Publié : ven. 21/sept./2007 17:44
Cf plus bas...
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;- Window Constants
;
; Chargeur de RTF
; Code Dobro
;- Gadget Constants
;
Enumeration
#Window_0
#Editor_0
#Button_0
EndEnumeration
Procedure Open_Window_0()
If OpenWindow ( #Window_0 , 268, 68, 502, 517, "New window ( 0 )" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList ( WindowID ( #Window_0 ))
EditorGadget ( #Editor_0 , 10, 20, 480, 450)
ButtonGadget ( #Button_0 , 30, 480, 90, 30, "charge RTF" )
EndIf
EndIf
EndProcedure
Open_Window_0()
Repeat ; Start of the event loop
Event = WaitWindowEvent () ; This line waits until an event is received from Windows
WindowID = EventWindow () ; The Window where the event is generated, can be used in the gadget procedures
GadgetID = EventGadget () ; Is it a gadget event?
EventType = EventType () ; The event type
If Event = #PB_Event_Gadget
If GadgetID = #Editor_0
ElseIf GadgetID = #Button_0
Fichier$ = OpenFileRequester ( "Choisissez un fichier RTF à charger" , "*.rtf" , "Fichiers Textes|*.rtf" ,0)
If OpenFile (0, Fichier$)
While Eof (0) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
Texte$=Texte$+ ReadString (0) ; lit ligne par ligne le contenu du fichier
Wend
CloseFile (0)
SetGadgetText ( #Editor_0 , Texte$)
Texte$= ""
EndIf
EndIf
EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop
End
;
Code : Tout sélectionner
;-constantes
Enumeration
#ApiWin
#ToolBar
#TB_New
#TB_Open
#TB_Save
#TB_Cut
#TB_Copy
#TB_Paste
#TB_Undo
#TB_Redo
#TB_Sel
#TB_Print
#TB_Delete
#TB_Recycle
#String_dossier
#List_View
#Text_String_APIname
#String_APIname
#editeur
#API_choisie
#Text_compte_fichiers
#Text_compte_lignes
EndEnumeration
#version = "beta 01 - 2007"
#WindowWidth = 795 ; adaptation au 800x600
#WindowHeight = 550
;-Fonts
Global Font0 , Font1
Font0 = LoadFont(0, "courier", 8,#PB_Font_HighQuality)
Font1 = LoadFont(1, "Verdana", 8,#PB_Font_Bold|#PB_Font_HighQuality)
;-variables
Global AppliDir$,RepAPI$,RepAPIsave$
AppliDir$ = GetCurrentDirectory()
If FileSize(AppliDir$+"DossierAPI") = -1
CreateDirectory(AppliDir$+"DossierAPI");Dossier a créer pour contenir ou recevoir les fiches créées
EndIf
RepAPIsave$ = AppliDir$+"DossierAPI\"
Procedure List_View_API(DossierAPI$) ;CHARGEMENT DES FICHES TROUVEES DANS LE DOSSIER
NbFiles = 0 ; initialisation du compte total
If ExamineDirectory(0, DossierAPI$, "*.*") ; on examine tout le dossier
Chemin$ = GetPathPart(DossierAPI$)
SetGadgetText(#String_dossier,Chemin$)
Repeat
FileType = NextDirectoryEntry(0)
If FileType
FileName$ = DirectoryEntryName(0)
If FileName$ <> "." And FileName$ <> ".."
Ext$ = GetExtensionPart(FileName$)
If Ext$ = "txt" Or Ext$ = "rtf" ; on recherche les deux types
AddGadgetItem(#List_View, -1, FileName$) ; qu'on ajoute au listviewgadget()
NbFiles = NbFiles + 1 ; à chaque élément trouvés on incrémente de 1 pour compter le tout
EndIf
EndIf
EndIf
Until FileType = 0
SetGadgetState(#List_View, -1)
ClearGadgetItemList(#editeur)
SetGadgetText(#String_APIname,"")
Else
MessageRequester("Erreur","Impossible d'examiner le répertoire: "+Chr(10)+ DossierAPI$,64)
EndIf
SetGadgetText(#Text_compte_fichiers,"Il y a "+ Str(CountGadgetItems(#List_View))+" fiches API dans ce dossier")
ProcedureReturn NbFiles
EndProcedure
Procedure LoadApiFolder()
If DefautRepAPI$ = ""
DefautRepAPI$ = "c:\"
EndIf
NewRepAPI$ = PathRequester("Sélectionner un dossier", DefautRepAPI$)
If NewRepAPI$
ClearGadgetItemList(#List_View)
ClearGadgetItemList(#editeur)
SetGadgetState(#List_View, -1)
SetGadgetText(#String_APIname,"")
List_View_API(NewRepAPI$)
DefautRepAPI$ = NewRepAPI$
EndIf
EndProcedure
Procedure selectionner_tout(editor)
range.CHARRANGE\cpMin = 0
range\cpMax = -1
ProcedureReturn SendMessage_(GadgetID(editor),#EM_EXSETSEL,0,@range)
EndProcedure
Procedure Enregistrer_Fiche() ; Format texte
ApiFile$ = GetGadgetText(#String_APIname)
If ApiFile$ = ""
MessageRequester("ERREUR","Il n'y a rien à enregistrer!"+Chr(13)+"Vous devez d'abord créer ou modifier la fiche pour la sauvegarder.",#MB_ICONEXCLAMATION)
Else
Fichier.s = SaveFileRequester("Enregistrer une fiche",RepAPIsave$+ApiFile$,"Fichier Texte |*.txt", 0); enregistrement dans le dossier par défaut avec nom de fiche en cours
If Fichier = ""
Else
If GetExtensionPart(Fichier) = ""
Fichier = Fichier + ".txt"
EndIf
api.s = GetFilePart(Fichier.s)
EnregistreFichier = #True
If FileSize(Fichier.s)>0
Reponse = MessageRequester("Cette fiche existe déjà !","Voulez vous remplacer la fiche : " + api +" ?" ,#MB_ICONEXCLAMATION |#PB_MessageRequester_YesNo )
If Reponse <> 6
EnregistreFichier = #False
EndIf
EndIf
EndIf
If EnregistreFichier
If CreateFile(0,Fichier.s)
Nombre_de_lignes = CountGadgetItems(#editeur)
For n = 0 To Nombre_de_lignes -1
TexteEditor.s = GetGadgetItemText(#editeur,n,0)
WriteStringN(0,TexteEditor)
Next
CloseFile(0)
EndIf
EndIf
EndIf
EndProcedure
Procedure MoveToRecycleBin(Fiche.s)
Protected lpFileOp.SHFILEOPSTRUCT
If FileSize(Fiche) <> - 1
*Mem = AllocateMemory(Len(Fiche) + 2)
If *Mem
lpFileOp\hwnd = 0
lpFileOp\pTo = 0
lpFileOp\wFunc = #FO_DELETE
lpFileOp\pFrom = *Mem
lpFileOp\fFlags = #FOF_ALLOWUNDO | #FOF_NOCONFIRMATION
CopyMemoryString(Fiche, @*Mem)
CopyMemoryString(Chr(0))
CopyMemoryString(Chr(0))
retour=SHFileOperation_(@lpFileOp)
If retour=0 : retour=1 : Else : retour =0 : EndIf
ProcedureReturn retour
FreeMemory(*Mem)
EndIf
EndIf
EndProcedure
Procedure Suppression(FichierSelect$, mode.l) ; une seule procedure pour 2 modes de suppression
If mode = 0
mode$ = "SI VOUS CLIQUEZ SUR OUI LE FICHIER SERA DEFINITIVEMENT SUPPRIME !"
ElseIf mode = 1
mode$ = "SI VOUS CLIQUEZ SUR OUI LE FICHIER SERA ENVOYE A LA CORBEILLE !"
EndIf
NumElement = GetGadgetState(#List_View)
Resultat = MessageRequester("AVERTISSEMENT","VOUS ETES SUR LE POINT DE SUPPRIMER UNE FICHE!"+Chr(13)+""+Chr(13)+"VOULEZ VOUS CONTINUER ?"+Chr(13)+""+Chr(13)+"SI VOUS N'ÊTES PAS SÛR CLIQUEZ SUR NON"+Chr(13)+""+Chr(13)+mode$,#MB_ICONEXCLAMATION | #PB_MessageRequester_YesNo)
If Resultat = 6
;on a cliqué sur oui
If mode = 0
If DeleteFile(FichierSelect$)<>0
If NumElement<>-1
RemoveGadgetItem(#List_View, NumElement)
EndIf
ClearGadgetItemList(#editeur)
SetGadgetText(#String_APIname, "")
SetGadgetState(#List_View, -1)
SetGadgetText(#Text_compte_lignes,"")
SetGadgetText(#Text_compte_fichiers,"Il y a "+ Str(CountGadgetItems(#List_View))+" fiches API dans ce dossier")
Else
MessageRequester("ERREUR","Le fichier n'a pu être effacé!",#MB_ICONERROR)
EndIf
ElseIf mode = 1
If MoveToRecycleBin(FichierSelect$)
If NumElement<>-1
RemoveGadgetItem(#List_View, NumElement)
EndIf
ClearGadgetItemList(#editeur)
SetGadgetText(#String_APIname, "")
SetGadgetState(#List_View, -1)
SetGadgetText(#Text_compte_lignes,"")
SetGadgetText(#Text_compte_fichiers,"Il y a "+ Str(CountGadgetItems(#List_View))+" fiches API dans ce dossier")
Else
MessageRequester("ERREUR","Le fichier n'a pu être effacé!",#MB_ICONERROR)
EndIf
EndIf
ElseIf Resultat = 7
;on a cliqué sur non, donc rien.
EndIf
EndProcedure
;-Fenêtre
ExamineDesktops() ; on se réfère au bureau pour centrer ou non la fenêtre en fonction de sa taille
Largeur$ = Str(DesktopWidth(0))
Hauteur$ = Str(DesktopHeight(0))
If Val(Largeur$)>800 And Val(Hauteur$)>600
FlagWin = #PB_Window_SystemMenu|#PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget |#PB_Window_TitleBar|#PB_Window_MaximizeGadget
Else
FlagWin = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget |#PB_Window_TitleBar|#PB_Window_MaximizeGadget
EndIf
If OpenWindow(#ApiWin,0,0, #WindowWidth, #WindowHeight," API PureViewer "+#version, FlagWin)And CreateGadgetList(WindowID(#ApiWin))
SetWindowColor(#ApiWin,RGB(173, 191, 193))
If CreateToolBar(#ToolBar, WindowID(#ApiWin))
ToolBarStandardButton(#TB_New, #PB_ToolBarIcon_New) :ToolBarToolTip(#ToolBar,#TB_New,"Créer une nouvelle fiche")
ToolBarStandardButton(#TB_Open, #PB_ToolBarIcon_Open):ToolBarToolTip(#ToolBar,#TB_Open,"Sélectionner et ouvrir un autre dossier")
ToolBarStandardButton(#TB_Save, #PB_ToolBarIcon_Save):ToolBarToolTip(#ToolBar,#TB_Save,"Enregistrer sous")
ToolBarSeparator()
ToolBarStandardButton(#TB_Cut,#PB_ToolBarIcon_Cut) :ToolBarToolTip(#ToolBar,#TB_Cut,"Couper")
ToolBarStandardButton(#TB_Copy,#PB_ToolBarIcon_Copy) :ToolBarToolTip(#ToolBar,#TB_Copy,"Copier")
ToolBarStandardButton(#TB_Paste,#PB_ToolBarIcon_Paste):ToolBarToolTip(#ToolBar,#TB_Paste,"Coller")
ToolBarSeparator()
ToolBarStandardButton(#TB_Undo,#PB_ToolBarIcon_Undo):ToolBarToolTip(#ToolBar,#TB_Undo,"Annuler")
ToolBarStandardButton(#TB_Redo,#PB_ToolBarIcon_Redo):ToolBarToolTip(#ToolBar,#TB_Redo,"Recommencer")
ToolBarStandardButton(#TB_Sel ,#PB_ToolBarIcon_Find):ToolBarToolTip(#ToolBar,#TB_Sel,"Sélectionner tout dans l'éditeur")
ToolBarSeparator()
ToolBarStandardButton(#TB_Print,#PB_ToolBarIcon_Print):ToolBarToolTip(#ToolBar,#TB_Print,"Imprimer la fiche en cours")
ToolBarSeparator()
ToolBarStandardButton(#TB_Recycle,#PB_ToolBarIcon_Replace):ToolBarToolTip(#ToolBar,#TB_Recycle,"Envoyer la fiche sélectionnée à la corbeille")
ToolBarStandardButton(#TB_Delete ,#PB_ToolBarIcon_Delete) :ToolBarToolTip(#ToolBar,#TB_Delete ,"Supprimer définitivement la fiche sélectionnée")
EndIf
StringGadget(#String_dossier,10,25,770,18,"",#PB_String_ReadOnly)
ListViewGadget(#List_View,0,47,200,483)
SetGadgetColor(#List_View,#PB_Gadget_FrontColor,RGB(32, 233, 221))
SetGadgetColor(#List_View,#PB_Gadget_BackColor,RGB(75, 96, 98))
TextGadget(#Text_compte_fichiers,0,530,200,20,"Il y a "+ Str(CountGadgetItems(#List_View))+" fiches API dans ce dossier",#PB_Text_Border)
SetGadgetColor(#Text_compte_fichiers,#PB_Gadget_BackColor,RGB(75, 96, 98))
SetGadgetColor(#Text_compte_fichiers,#PB_Gadget_FrontColor,RGB(208, 219, 220))
EditorGadget(#editeur,200,47,595,483)
SendMessage_(GadgetID(#editeur), #EM_SETTARGETDEVICE, #Null, 0);retour à la ligne automatique
; SetGadgetFont(#editeur, Font0)
SetGadgetColor(#editeur, #PB_Gadget_BackColor, RGB(245, 243, 199))
;SetGadgetColor(#editeur, #PB_Gadget_FrontColor, RGB(64, 101, 53))
TextGadget(#Text_String_APIname,205,532,40,15,"Fichier")
SetGadgetColor(#Text_String_APIname,#PB_Gadget_BackColor,RGB(173, 191, 193))
;SetGadgetColor(#Text_String_APIname,#PB_Gadget_FrontColor,RGB(208, 219, 220))
StringGadget(#String_APIname,245,532,300,16,"",#PB_String_ReadOnly|#PB_Text_Center)
SetGadgetFont(#String_APIname, Font1)
TextGadget(#Text_compte_lignes,545,530,250,20," Cette fiche est composée de "+ Str(CountGadgetItems(#editeur))+" lignes",#PB_Text_Border)
SetGadgetColor(#Text_compte_lignes,#PB_Gadget_BackColor,RGB(75, 96, 98))
SetGadgetColor(#Text_compte_lignes,#PB_Gadget_FrontColor,RGB(208, 219, 220))
EndIf
;-Chargement des fiches
Load.l = List_View_API(RepAPIsave$)
If Load = 0 ; si dossier par défaut est vide
LoadApiFolder() ; on relance un chargement de dossier au choix
EndIf
;-Programme
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget()
Case #List_View
Select EventType()
Case #PB_EventType_LeftClick
ClearGadgetItemList(#editeur)
PosElement = GetGadgetState(#List_View)
NomFichier$ = GetGadgetText(#List_View)
RepAPI$ = GetGadgetText(#String_dossier)
FicheVue$ = RepAPI$ + NomFichier$
If PosElement >= 0
If OpenFile(#API_choisie, FicheVue$)
While Eof(#API_choisie) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
Texte$=Texte$+ ReadString(#API_choisie) ; lit ligne par ligne le contenu du fichier
Wend
CloseFile(#API_choisie)
SetGadgetText( #editeur , Texte$) ;affichage dans l'éditeur
Texte$= "" ; variable remise à zéro
SetGadgetText(#Text_compte_lignes," Cette fiche est composée de "+ Str(CountGadgetItems(#editeur))+" lignes")
SetGadgetText(#String_APIname, NomFichier$)
Else
MessageRequester("ERREUR","Impossible d'ouvrir ce fichier, il est peut être défectueux.",16)
EndIf
EndIf
EndSelect
EndSelect
EndIf
;-Menus events
Select Event
Case #PB_Event_Menu
Select EventMenu()
Case #TB_New
ClearGadgetItemList(#editeur)
SetGadgetText(#String_APIname, "Nouvelle fiche")
SetGadgetState(#List_View, -1)
SetGadgetText(#Text_compte_lignes,"")
ApiName$ = InputRequester("Création de fiche", "Donnez un nom à cette fiche","")
If ApiName$
SetGadgetText(#String_APIname, ApiName$+".txt")
SetActiveGadget(#editeur)
EndIf
Case #TB_Open : LoadApiFolder()
Case #TB_Save : Enregistrer_Fiche()
Case #TB_Cut
Vide$ = ""
SendMessage_(GadgetID(#editeur),#EM_GETSEL,@StartSel,@EndSel)
Buffer$ = Space(EndSel-StartSel)
SendMessage_(GadgetID(#editeur),#EM_GETSELTEXT,0,@Buffer$)
ClearClipboard()
SetClipboardText(Buffer$)
SendMessage_(GadgetID(#editeur),#EM_REPLACESEL,#True,@Vide$)
SetGadgetText(#Text_compte_lignes," Cette fiche est composée de "+ Str(CountGadgetItems(#editeur))+" lignes")
Case #TB_Copy
SendMessage_(GadgetID(#editeur),#EM_GETSEL,@StartSel,@EndSel)
Buffer$ = Space(EndSel-StartSel)
SendMessage_(GadgetID(#editeur),#EM_GETSELTEXT,0,@Buffer$)
ClearClipboard()
SetClipboardText(Buffer$)
Case #TB_Paste
Buffer$ = GetClipboardText()
SendMessage_(GadgetID(#editeur),#EM_REPLACESEL,#True,@Buffer$)
SetGadgetText(#Text_compte_lignes," Cette fiche est composée de "+ Str(CountGadgetItems(#editeur))+" lignes")
Case #TB_Undo : SendMessage_(GadgetID(#editeur),#EM_UNDO,0,0)
SetGadgetText(#Text_compte_lignes," Cette fiche est composée de "+ Str(CountGadgetItems(#editeur))+" lignes")
Case #TB_Redo : SendMessage_(GadgetID(#editeur),#EM_REDO,0,0)
SetGadgetText(#Text_compte_lignes," Cette fiche est composée de "+ Str(CountGadgetItems(#editeur))+" lignes")
Case #TB_Sel : selectionner_tout(#editeur)
Case #TB_Print ; impression à faire, j'ai la flemme et pas le temps maintenant...
Case #TB_Recycle
If GetGadgetText(#String_APIname)=""
MessageRequester("ERREUR","Il n'y a pas de fichier sélectionné",#MB_ICONEXCLAMATION)
Else
Selection$ = GetGadgetText(#String_dossier)+GetGadgetText(#String_APIname)
Suppression(Selection$, 1) ; mode corbeille
EndIf
Case #TB_Delete
If GetGadgetText(#String_APIname)=""
MessageRequester("ERREUR","Il n'y a pas de fichier sélectionné",#MB_ICONEXCLAMATION)
Else
Selection$ = GetGadgetText(#String_dossier)+GetGadgetText(#String_APIname)
Suppression(Selection$, 0) ; mode suppression directe
EndIf
;-Fin
EndSelect
; Case #WM_SIZE
Case #PB_Event_CloseWindow :Quitter = 1
EndSelect
Until Quitter
End
Surement quelq'un qui ne connait pas l'utilité de l'API windows... (pourtant un jour ou l'autre il en aura grandement besoin, c'est inévitable)Dobro a écrit : autre chose l'un d'entre nous a mis "m'en fout" , qui c'est ??
reste plus qu'a faire une petite routine de chargement de fiche RTF presente dans le dossier !! ...Ollivier a écrit :@jacobus
J'ai juste exécuté ton code : ça va, ça assure en design de ton bord!
En effet c'est nul, mais c'est un vieux code que j'ai ressorti et je ne m'étais pas cassé le tronc (juste un lecteur de code externe à l'ide pb pour soulager ce dernier) c'est donc à refaire en bonne et due formece que je reproche au code par contre c'est les Case 0,1,2,3 pas tres parlant !!
M'est avis que son pseudo commence par Bernard et fini par 13autre chose l'un d'entre nous a mis "m'en fout" , qui c'est ??
Bonne idée, mettre des fiches en communs par exemple...On peut faire des liens (par exemple URL que je peux récupérer dans ma boucle d'événements) depuis l'EditorGadget?
Code : Tout sélectionner
UpDateLayeredWindow
USER32.DLL
Modifie l'apparence d'une fenêtre transparente.
WindowID.L;ID de la fenêtre qui subit la modification.;
Dst.L;Handle de l'image destinataire dans le cas d'une opération interne (à étudier). Sinon 0.;
*FenetreCoords;Pointe vers une structure POINT définissant les nouvelles coordonnées de la fenêtre. Si les coordonnées ne doivent pas être modifiées *FenetreCoords = 0;
*FenetreDims;Pointe vers une structure POINT définissant les nouvelles dimensions de la fenêtre. Si la taille de la fenêtre reste inchangée, *FenetreDims = 0;
Src.L;Handle de l'image. 0 dans le cas d'une modification autre que l'image de la fenêtre.;
*ImageCoords;Pointe vers une structure POINT définissant les coordonnées du point haut gauche de la zone à récupérer dans l'image.;
CouleurTransparence.L;Valeur de la couleur considérée comme transparente;
*Blend;Pointe vers une structure BLENDFUNCTION;
Mode.L;Mode d'exécution de la fonction;
[tag]layer;window;fenêtre;transparent;translucide;modif;change
[ex][/ex]
@Olivier :Ollivier a écrit :Pardon, il n'y a pas de bug...
Code : Tout sélectionner
UpDateLayeredWindow USER32.DLL Modifie l'apparence d'une fenêtre transparente. WindowID.L;ID de la fenêtre qui subit la modification.; Dst.L;Handle de l'image destinataire dans le cas d'une opération interne (à étudier). Sinon 0.; *FenetreCoords;Pointe vers une structure POINT définissant les nouvelles coordonnées de la fenêtre. Si les coordonnées ne doivent pas être modifiées *FenetreCoords = 0; *FenetreDims;Pointe vers une structure POINT définissant les nouvelles dimensions de la fenêtre. Si la taille de la fenêtre reste inchangée, *FenetreDims = 0; Src.L;Handle de l'image. 0 dans le cas d'une modification autre que l'image de la fenêtre.; *ImageCoords;Pointe vers une structure POINT définissant les coordonnées du point haut gauche de la zone à récupérer dans l'image.; CouleurTransparence.L;Valeur de la couleur considérée comme transparente; *Blend;Pointe vers une structure BLENDFUNCTION; Mode.L;Mode d'exécution de la fonction; [tag]layer;window;fenêtre;transparent;translucide;modif;change [ex][/ex]