Bah, ........ et mon asniere !!!!!!!!Et mon idée de catégorie alors ....... (que j'ai volé sans le savoir à ApiGuide )
Tout le monde s'en fous
Un tuto de l'API
- Kwai chang caine
- Messages : 6992
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Patience, j'y travaille dès que j'ai un peu de temps à consacrer au projet. J'en ai d'autres en cours que je ne peux trop retarder... mais ça roule
Si on te l'a pas encore dit, c'est une bonne idée aussi de faire des catégories. Pour préciser je suis parti sur le rebargadget() qui devrait donner un bel aspect au prog. Vala @+
Si on te l'a pas encore dit, c'est une bonne idée aussi de faire des catégories. Pour préciser je suis parti sur le rebargadget() qui devrait donner un bel aspect au prog. Vala @+
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
- Kwai chang caine
- Messages : 6992
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Mille mercis JACOBUSSi on te l'a pas encore dit, c'est une bonne idée aussi de faire des catégories
Loin de moi de vous stréssés, vous avez bien assez de travail.
Ni non plus d'etre impatient.
Mais ça fait le troisieme PC que j'achete à carrefour, j'ai cru que mes messages aparaissaient plus sur le forum
Me voila rassuré, si en plus c'est une bonne idée, alors là, tu me comble de joie.
Il est content heu, le KCC il a posé son gravillon dans la piramiiiii deee
Encore merci de ta réponse
Bon voilà une nouvelle version de notre French API viewer
Je lui ai apporté quelques petites optimisations comme par exemple la sélection auto de l'editeur pour les boutons de la toolbar, comme ça on peut copier/coller etc sur l'un ou l'autre avec les mêmes boutons.
Pour la GUI j'ai utilisé un code de Chris, l'oeil en coin, et j'ai donc mis un rebargadget pour le choix des catégories que l'on peut augmenter si on veut.
Un nouveau dossier pour chaque nouvelle catégorie dans le dossier principal. Une idée, on peut créer les exemples au format texte et les enregistrer dans le dossier correspondant avec le même nom que l'api, qui elle est en RTF, donc pas de conflit.
Reste à faire la procédure pour les fiches exemples et leur chargement mais c'est facile à ajouter.
Si Ollivier a quelques fiches à ajouter...
ça sera plus mieux
Je vous laisse découvrir le code:
Je lui ai apporté quelques petites optimisations comme par exemple la sélection auto de l'editeur pour les boutons de la toolbar, comme ça on peut copier/coller etc sur l'un ou l'autre avec les mêmes boutons.
Pour la GUI j'ai utilisé un code de Chris, l'oeil en coin, et j'ai donc mis un rebargadget pour le choix des catégories que l'on peut augmenter si on veut.
Un nouveau dossier pour chaque nouvelle catégorie dans le dossier principal. Une idée, on peut créer les exemples au format texte et les enregistrer dans le dossier correspondant avec le même nom que l'api, qui elle est en RTF, donc pas de conflit.
Reste à faire la procédure pour les fiches exemples et leur chargement mais c'est facile à ajouter.
Si Ollivier a quelques fiches à ajouter...
Je vous laisse découvrir le code:
Code : Tout sélectionner
;-Declarations
Declare ChargementFiches_API(DossierAPI$, LGadget.l)
Declare Enregistrer_Fiche() ; Format RTF
Declare Enregistrer_Exemple(); Format texte
Declare MoveToRecycleBin(Fiche.s)
Declare Suppression(FichierSelect$, mode.l)
Declare SelectedListview(ListGadget.l,RepAPI$)
Declare GetCurrentEditor()
Declare ReChargerFiches()
; ********* procedure piqué au forum anglais !! ****
Declare Editor_Save(EGid.l,file.s)
Declare Editor_Load(EGid.l, file.s)
Declare StreamFileIn_Callback(hFile, pbBuff, cb, pcb)
Declare StreamFileOut_Callback(hFile, pbBuff, cb, pcb)
;********************non utilisé pour le moment **********
Declare EditorGadgetSelectAll(Gadget_ID) ; selectionne tout
Declare EditorGadgetCOPY(Gadget_ID); copy dans le clip board
Declare EditorGadgetPASTE(Gadget_ID) ; pose dans l'editeur
; ****************************************************
;-constantes
Enumeration
#ApiWin
#ToolBar
#TB_Edit
#TB_New
#TB_Open
#TB_Save
#TB_Print
#TB_Cut
#TB_Copy
#TB_Paste
#TB_Undo
#TB_Redo
#TB_Sel
#TB_Delete
#TB_Recycle
#CONTAINER_REBAR
#Rebar
#Cont_fenetres
#List_View_fenetres
#Cont_Gadgets
#List_View_Gadgets
#Cont_Internet
#List_View_Internet
#Cont_Divers
#List_View_Divers
#String_dossier
#Text_String_APIname
#String_APIname
#Panel
#editeur:#editeur1
#API_choisie
#Text_compte_fichiers
#Text_compte_lignes
#exemple
EndEnumeration
#version = "beta 01 - 2007"
#WindowWidth = 795 ; adaptation au 800x600
#WindowHeight = 560
#CCS_VERT = $00000080 ; pour le rebar
;-Fonts
Global Font0 , Font1, flg
Font0 = LoadFont(0, "courier", 8,#PB_Font_HighQuality)
Font1 = LoadFont(1, "Verdana", 8,#PB_Font_Bold|#PB_Font_HighQuality)
;-variables
Global AppliDir$,RepAPIsave$,RepAPI$,NbFiles.l,Editeur.l,ListGadget.l,g_hinst
AppliDir$ = GetCurrentDirectory()
Global DossierFenetres$, DossierGadgets$, DossierInternet$, DossierDivers$
;Création des dossiers pour contenir ou recevoir les fiches créées
If FileSize(AppliDir$+"DossierAPI") = -1
CreateDirectory(AppliDir$+"DossierAPI")
EndIf
RepAPIsave$ = AppliDir$+"DossierAPI\"
If FileSize(RepAPIsave$+"API_Fenêtres") = -1
CreateDirectory(RepAPIsave$+"API_Fenêtres")
EndIf
DossierFenetres$ = RepAPIsave$+"API_Fenêtres\"
If FileSize(RepAPIsave$+"API_Gadgets") = -1
CreateDirectory(RepAPIsave$+"API_Gadgets")
EndIf
DossierGadgets$ = RepAPIsave$+"API_Gadgets\"
If FileSize(RepAPIsave$+"API_Internet") = -1
CreateDirectory(RepAPIsave$+"API_Internet")
EndIf
DossierInternet$ = RepAPIsave$+"API_Internet\"
If FileSize(RepAPIsave$+"API_Divers") = -1
CreateDirectory(RepAPIsave$+"API_Divers")
EndIf
DossierDivers$ = RepAPIsave$+"API_Divers\"
;--------------------
;-REBAR
Procedure InsertBar(Text.s, Child.l, Parent.l, BarWidth.l, Index.l, BkColor.l, FgColor)
rbBand.REBARBANDINFO
rbBand\cbSize = SizeOf(REBARBANDINFO)
rbBand\fMask = #RBBIM_STYLE | #RBBIM_CHILD | #RBBIM_CHILDSIZE | #RBBIM_TEXT | #RBBIM_HEADERSIZE | #RBBIM_COLORS
rbBand\fStyle = #RBBS_CHILDEDGE
rbBand\clrBack = BkColor
rbBand\clrFore = FgColor
rbBand\lpText = @Text
rbBand\hwndChild = Child
rbBand\cyMinChild = BarWidth
rbBand\cxHeader = 25
rbBand\cx = BarWidth
SendMessage_(Parent, #RB_INSERTBAND, Index, @rbBand)
EndProcedure
Procedure CreateRebar(Gadget, hwndOwner)
rbi.REBARINFO
icex.INITCOMMONCONTROLSEX
icex\dwSize = SizeOf(INITCOMMONCONTROLSEX);
icex\dwICC = #ICC_COOL_CLASSES|#ICC_BAR_CLASSES;
InitCommonControlsEx_(@icex);
hwndRB = CreateWindowEx_(#WS_EX_TOOLWINDOW, "ReBarWindow32", #Null, #WS_CHILD|#WS_VISIBLE|#WS_CLIPSIBLINGS|#CCS_VERT , 0,0,0,0, hwndOwner, Gadget, g_hinst, #Null)
SetWindowTheme_(hwndRB, " ", " ")
ProcedureReturn hwndRB;
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 ; 800x600 mini
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) = 0 Or CreateGadgetList(WindowID(#ApiWin)) = 0
End
EndIf
;-Toolbar
hToolBar = CreateToolBar(#ToolBar, WindowID(#ApiWin))
If hToolBar
ToolBarStandardButton(#TB_Edit, #PB_ToolBarIcon_Properties,#PB_ToolBar_Toggle):ToolBarToolTip(#ToolBar,#TB_Edit,"Editer la fiche en cours")
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,"Recharger toutes les fiches")
ToolBarStandardButton(#TB_Save, #PB_ToolBarIcon_Save) :ToolBarToolTip(#ToolBar,#TB_Save,"Enregistrer sous")
ToolBarStandardButton(#TB_Print,#PB_ToolBarIcon_Print):ToolBarToolTip(#ToolBar,#TB_Print,"Imprimer la fiche en cours")
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")
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
SetWindowColor(#ApiWin,RGB(173, 191, 193))
g_hinst = GetModuleHandle_(#Null) ; rebar
PanelGadget(#Panel, 205,25,590,515)
;-Panel définition
AddGadgetItem(#Panel, -1, "Définition")
EditorGadget(#editeur,0,0,585,450,#PB_Editor_ReadOnly)
SendMessage_(GadgetID(#editeur), #EM_SETTARGETDEVICE, #Null, 0)
TextGadget(#Text_String_APIname,5,467,50,15,"Fichier :")
TextGadget(#String_APIname,55,465,300,18,"",#PB_String_ReadOnly|#PB_Text_Center)
SetGadgetFont(#String_APIname, Font1)
SetGadgetColor(#String_APIname,#PB_Gadget_FrontColor,RGB(92, 139, 78))
;-Panel exemple
AddGadgetItem(#Panel, -1, "Exemple")
EditorGadget(#editeur1,0,0,585,450)
SendMessage_(GadgetID(#editeur1), #EM_SETTARGETDEVICE, #Null, 0)
SetGadgetColor(#editeur1, #PB_Gadget_BackColor, RGB(245, 243, 199))
SetGadgetColor(#editeur1, #PB_Gadget_FrontColor, RGB(117, 175, 99))
SetGadgetFont(#editeur1, Font0)
TextGadget(#Text_compte_lignes,5,465,570,20,"")
SetGadgetColor(#Text_compte_lignes,#PB_Gadget_FrontColor,RGB(92, 139, 78))
CloseGadgetList();clos le panel
StringGadget(#String_dossier,205,540,590,18,"",#PB_String_ReadOnly)
;----CONTAINER_REBAR
hMainCont = ContainerGadget(#CONTAINER_REBAR,0,25,200,515)
hwndRB = CreateRebar(#Rebar, hMainCont)
;- ---Rebar 1 - Fenetres
hCont_1 = ContainerGadget(#Cont_fenetres, 0, 0, 200,515)
ListViewGadget(#List_View_fenetres,0,0,200,410)
SetGadgetColor(#List_View_fenetres,#PB_Gadget_FrontColor,RGB(32, 233, 221))
SetGadgetColor(#List_View_fenetres,#PB_Gadget_BackColor,RGB(75, 96, 98))
CloseGadgetList()
;- ---Rebar 2 - Gadgets
hCont_2 = ContainerGadget(#Cont_Gadgets, 0, 0, 200,515)
ListViewGadget(#List_View_Gadgets,0,0,200,410)
SetGadgetColor(#List_View_Gadgets,#PB_Gadget_FrontColor,RGB(32, 233, 221))
SetGadgetColor(#List_View_Gadgets,#PB_Gadget_BackColor,RGB(75, 96, 98))
CloseGadgetList()
;- ---Rebar 3 - Internet
hCont_3 = ContainerGadget(#Cont_Internet, 0, 0, 200,515)
ListViewGadget(#List_View_Internet,0,0,200,410)
SetGadgetColor(#List_View_Internet,#PB_Gadget_FrontColor,RGB(32, 233, 221))
SetGadgetColor(#List_View_Internet,#PB_Gadget_BackColor,RGB(75, 96, 98))
CloseGadgetList()
;- ---Rebar 4 - Divers
hCont_4 = ContainerGadget(#Cont_Divers, 0, 0, 200,515)
ListViewGadget(#List_View_Divers,0,0,200,410)
SetGadgetColor(#List_View_Divers,#PB_Gadget_FrontColor,RGB(32, 233, 221))
SetGadgetColor(#List_View_Divers,#PB_Gadget_BackColor,RGB(75, 96, 98))
CloseGadgetList()
CloseGadgetList()
InsertBar("FENETRES" , hCont_1, hwndRB, 200, 0, RGB(173, 191, 193), RGB(255, 255, 255))
InsertBar("GADGETS" , hCont_2, hwndRB, 200, 1, RGB(173, 191, 193), RGB(255, 255, 255))
InsertBar("INTERNET" , hCont_3, hwndRB, 200, 2, RGB(173, 191, 193), RGB(255, 255, 255))
InsertBar("DIVERS" , hCont_4, hwndRB, 200, 3, RGB(173, 191, 193), RGB(255, 255, 255))
TextGadget(#Text_compte_fichiers,2,540,203,20,"Il y a "+ Str(CountGadgetItems(#List_View_fenetres))+" fiches API",#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))
;-Chargement des fiches
ReChargerFiches()
SetGadgetText(#String_dossier,RepAPIsave$); adresse du répertoire principal
;-Programme
Repeat
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
;-Gadgets events
Select Event
Case #PB_Event_Gadget
Select GadgetID
Case #List_View_fenetres
Select EventType
Case #PB_EventType_LeftClick
SelectedListview(#List_View_fenetres,DossierFenetres$)
EndSelect
Case #List_View_Gadgets
Select EventType
Case #PB_EventType_LeftClick
SelectedListview(#List_View_Gadgets,DossierGadgets$)
EndSelect
Case #List_View_Internet
Select EventType
Case #PB_EventType_LeftClick
SelectedListview(#List_View_Internet,DossierInternet$)
EndSelect
Case #List_View_Divers
Select EventType
Case #PB_EventType_LeftClick
SelectedListview(#List_View_Divers,DossierDivers$)
EndSelect
EndSelect
;-Menus events
Case #PB_Event_Menu
Select EventMenu()
Case #TB_New
ClearGadgetItemList(#editeur)
SetGadgetText(#String_APIname, "Nouvelle fiche")
SetGadgetState(#List_View_fenetres, -1)
SetGadgetText(#Text_compte_lignes,"")
ApiName$ = InputRequester("Création de fiche", "Donnez un nom à cette fiche","")
If ApiName$
SetGadgetText(#String_APIname, ApiName$+".rtf")
SetGadgetItemText(#Panel, 0, ApiName$+".rtf",0)
SetActiveGadget(#editeur)
EndIf
Case #TB_Open : ReChargerFiches()
Case #TB_Save
If GetCurrentEditor() = #editeur
Enregistrer_Fiche()
ElseIf GetCurrentEditor() = #editeur1
Enregistrer_Exemple()
EndIf
Case #TB_Cut : GetCurrentEditor()
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$)
If CountGadgetItems(#editeur1) <> 0
SetGadgetText(#Text_compte_lignes," Cet exemple est composé de "+ Str(CountGadgetItems(#editeur1))+" lignes de codes")
EndIf
Case #TB_Copy : GetCurrentEditor()
SendMessage_(GadgetID(Editeur),#EM_GETSEL,@StartSel,@EndSel)
Buffer$ = Space(EndSel-StartSel)
SendMessage_(GadgetID(Editeur),#EM_GETSELTEXT,0,@Buffer$)
ClearClipboard()
EditorGadgetCOPY(Editeur)
Case #TB_Paste : GetCurrentEditor()
EditorGadgetPASTE(Editeur)
If CountGadgetItems(#editeur1) <> 0
SetGadgetText(#Text_compte_lignes," Cet exemple est composé de "+ Str(CountGadgetItems(#editeur1))+" lignes de codes")
EndIf
Case #TB_Undo : GetCurrentEditor()
SendMessage_(GadgetID(Editeur),#EM_UNDO,0,0)
If CountGadgetItems(#editeur1) <> 0
SetGadgetText(#Text_compte_lignes," Cet exemple est composé de "+ Str(CountGadgetItems(#editeur1))+" lignes de codes")
EndIf
Case #TB_Redo : GetCurrentEditor()
SendMessage_(GadgetID(Editeur),#EM_REDO,0,0)
If CountGadgetItems(#editeur1) <> 0
SetGadgetText(#Text_compte_lignes," Cet exemple est composé de "+ Str(CountGadgetItems(#editeur1))+" lignes de codes")
EndIf
Case #TB_Sel : GetCurrentEditor() : EditorGadgetSelectAll(Editeur)
Case #TB_Print ; impression à faire, j'ai la flemme et pas le temps maintenant... et j'en vois pas l'utilité
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)+".rtf"
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)+".rtf"
Suppression(Selection$, 0) ; mode suppression directe
EndIf
Case #TB_Edit
Beep_(200,200)
btflg = GetToolBarButtonState(#ToolBar, #TB_Edit)
If btflg = 1 ;enfoncé
SetGadgetAttribute(#editeur, #PB_Editor_ReadOnly, 0) ; editable
ElseIf btflg = 0 ;défoncé
SetGadgetAttribute(#editeur, #PB_Editor_ReadOnly, 1) ; non éditable
EndIf
;-Fin
EndSelect
; Case #WM_SIZE
Case #PB_Event_CloseWindow :Quitter = 1
EndSelect
Until Quitter
End
; PLUS BESOIN DE CETTE PROCEDURE LAISSEE POUR INFO/EXEMPLE
; Procedure LoadApiFolder(LGadget.l)
; If DefautRepAPI$ = ""
; DefautRepAPI$ = "c:\"
; EndIf
; NewRepAPI$ = PathRequester("Sélectionner un dossier", DefautRepAPI$)
; If NewRepAPI$
; ClearGadgetItemList(LGadget)
; ClearGadgetItemList(#editeur)
; ClearGadgetItemList(#editeur1)
; SetGadgetState(LGadget, -1)
; SetGadgetText(#String_APIname,"")
; ChargementFiches_API(NewRepAPI$,LGadget)
; DefautRepAPI$ = NewRepAPI$
; EndIf
; EndProcedure
Procedure Enregistrer_Fiche() ; Format RTF
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
; enregistrement dans le dossier par défaut avec nom de fiche en cours
; Il faudra sélectionner le dossier adéquat fenetre, gadget, internet ou divers
fichier.s = SaveFileRequester("Enregistrer une fiche",RepAPIsave$+ApiFile$,"Fichier RTF |*.rtf", 0)
If fichier = ""
Else
If GetExtensionPart(fichier) = ""
fichier = fichier + ".rtf"
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
Editor_Save(#editeur,fichier.s)
FileName2$=GetFilePart(fichier.s)
FileName2$=Left( FileName2$,Len(FileName2$)-4)
ReChargerFiches()
EndIf
EndIf
EndProcedure
Procedure Enregistrer_Exemple() ; 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 l'exemple pour le sauvegarder.",#MB_ICONEXCLAMATION)
Else
; enregistrement dans le dossier par défaut avec nom de fiche en cours
; Il faudra sélectionner le dossier adéquat fenetre, gadget, internet ou divers
Fichier.s = SaveFileRequester("Enregistrer un exemple",RepAPIsave$+ApiFile$,"Fichier Texte |*.txt", 0)
If Fichier = ""
Else
If GetExtensionPart(Fichier) = ""
Fichier = Fichier + ".txt"
EndIf
exemple.s = GetFilePart(Fichier.s)
EnregistreFichier = #True
If FileSize(Fichier.s)>0
Reponse = MessageRequester("Cet exemple existe déjà !","Voulez vous remplacer : " + exemple +" ?" ,#MB_ICONEXCLAMATION |#PB_MessageRequester_YesNo )
If Reponse <> 6
EnregistreFichier = #False
EndIf
EndIf
EndIf
If EnregistreFichier
If CreateFile(0,Fichier.s)
Nombre_de_lignes = CountGadgetItems(#editeur1)
For n = 0 To Nombre_de_lignes -1
TexteEditor.s = GetGadgetItemText(#editeur1,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
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
SetGadgetItemText(#Panel, 0, "Définition",0)
ReChargerFiches()
Else
MessageRequester("ERREUR","Le fichier n'a pu être effacé!",#MB_ICONERROR)
EndIf
ElseIf mode = 1
If MoveToRecycleBin(FichierSelect$)
SetGadgetItemText(#Panel, 0, "Définition",0)
ReChargerFiches()
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
Procedure Editor_Save(EGid.l,file.s)
Protected StreamData.EDITSTREAM
Protected FileID.l
If file <> ""
FileID = CreateFile(#PB_Any, file)
If FileID
StreamData\dwCookie = FileID(FileID)
StreamData\dwError = #Null
StreamData\pfnCallback = @StreamFileOut_Callback()
If UCase(GetExtensionPart(file)) = "RTF"
SendMessage_(GadgetID(EGid), #EM_STREAMOUT, #SF_RTF, @StreamData)
Else
SendMessage_(GadgetID(EGid), #EM_STREAMOUT, #SF_TEXT, @StreamData)
EndIf
CloseFile(FileID)
EndIf
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure Editor_Load(EGid.l, file.s)
Protected StreamData.EDITSTREAM
Protected FileID.l
FileID = ReadFile(#PB_Any, file)
If FileID
StreamData\dwCookie = FileID(FileID)
StreamData\dwError = #Null
StreamData\pfnCallback = @StreamFileIn_Callback()
If UCase(GetExtensionPart(file)) = "RTF"
SendMessage_(GadgetID(EGid), #EM_STREAMIN, #SF_RTF, @StreamData)
Else
SendMessage_(GadgetID(EGid), #EM_STREAMIN, #SF_TEXT, @StreamData)
EndIf
CloseFile(FileID)
EndIf
EndProcedure
Procedure StreamFileIn_Callback(hFile, pbBuff, cb, pcb)
ProcedureReturn ReadFile_(hFile, pbBuff, cb, pcb, 0)!1
EndProcedure
Procedure StreamFileOut_Callback(hFile, pbBuff, cb, pcb)
ProcedureReturn WriteFile_(hFile, pbBuff, cb, pcb, 0)!1
EndProcedure
Procedure EditorGadgetSelectAll(Gadget_ID)
; Select the whole Text of the EditorGadget
RangeAll.CHARRANGE\cpMin = 0
RangeAll\cpMax = -1
ProcedureReturn SendMessage_(GadgetID(Gadget_ID),#EM_EXSETSEL,0,@RangeAll) ; Select All
EndProcedure
Procedure EditorGadgetCOPY(Gadget_ID)
ProcedureReturn SendMessage_(GadgetID(Gadget_ID), #WM_COPY, 0, 0)
EndProcedure
Procedure EditorGadgetPASTE(Gadget_ID)
ProcedureReturn SendMessage_(GadgetID(Gadget_ID), #EM_PASTESPECIAL, 0, 0)
EndProcedure
Procedure GetCurrentEditor()
;permet l'usage de la toolbar sur l'éditeur en cours en fonction de l'onglet affiché
Resultat = GetGadgetState(#Panel)
If Resultat = 0
Editeur.l = #editeur
ElseIf Resultat = 1
Editeur.l = #editeur1
EndIf
ProcedureReturn Editeur
EndProcedure
Procedure SelectedListview(ListGadget.l,RepAPI$)
SetGadgetItemText(#Panel, 1, "Exemple",0)
ClearGadgetItemList(#editeur)
ClearGadgetItemList(#editeur1)
PosElement = GetGadgetState(ListGadget)
NomFichier$ = GetGadgetText(ListGadget)
FicheVue$ = RepAPI$ + NomFichier$+".rtf"
If PosElement >= 0
Editor_Load(#editeur, FicheVue$)
SetGadgetText(#String_APIname, NomFichier$)
SetGadgetText(#String_dossier,RepAPI$)
SetGadgetItemText(#Panel, 0, "API : " +NomFichier$,0);ajouter pour avoir le nom dans l'onglet
;chargement de l'exemple correspondant s'il existe
Exemple$ = RepAPI$ + NomFichier$+".txt"
If FileSize(Exemple$)<>-1
If OpenFile(#exemple, Exemple$)
While Eof(#exemple) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
Texte$=Texte$+ ReadString(#exemple) ; lit ligne par ligne le contenu du fichier
Wend
CloseFile(#exemple)
SetGadgetText( #editeur1 , Texte$) ;affichage dans l'onglet exemple
Texte$= "" ; variable remise à zéro
SetGadgetItemText(#Panel, 1, "Exemple d'utilisation de :"+NomFichier$,0) ; averti de l'existence d'un exemple
EndIf
EndIf
LCount = CountGadgetItems(#editeur1)
If LCount <= 0
nblcode$ = "Aucun exemple disponible avec cette fiche"
ElseIf LCount = 1
nblcode$ = " Cet exemple est composé de 1 ligne de code"
ElseIf LCount > 1
nblcode$ = " Cet exemple est composé de "+ Str(LCount)+" lignes de code"
EndIf
SetGadgetText(#Text_compte_lignes,nblcode$)
Else
MessageRequester("ERREUR","Impossible d'ouvrir ce fichier, il est peut être défectueux.",16)
EndIf
EndProcedure
Procedure ChargementFiches_API(DossierAPI$, LGadget.l)
ClearGadgetItemList(LGadget)
If ExamineDirectory(0, DossierAPI$, "*.*") ; on examine tout le dossier
Chemin$ = GetPathPart(DossierAPI$)
Repeat
FileType = NextDirectoryEntry(0)
If FileType
FileName$ = DirectoryEntryName(0)
If FileName$ <> "." And FileName$ <> ".."
Ext$ = GetExtensionPart(FileName$)
If Ext$ = "rtf"
FileName2$=Left(FileName$,Len(FileName$)-4)
AddGadgetItem(LGadget, -1, FileName2$) ; on ajoute chaque fiche trouvée au listviewgadget()
NbFiles = NbFiles + 1 ; à chaque fiche trouvée on incrémente de 1 pour compter le tout
EndIf
EndIf
EndIf
Until FileType = 0
SetGadgetState(LGadget, -1)
Else
MessageRequester("Erreur","Impossible d'examiner le répertoire: "+Chr(10)+ DossierAPI$,64)
EndIf
EndProcedure
Procedure ReChargerFiches()
ClearGadgetItemList(#editeur):ClearGadgetItemList(#editeur1)
SetGadgetText(#String_APIname,"")
SetGadgetText(#Text_compte_lignes,"")
SetGadgetItemText(#Panel, 0, "Définition",0)
SetGadgetItemText(#Panel, 1, "Exemple",0)
NbFiles = 0
ChargementFiches_API(DossierFenetres$ ,#List_View_fenetres)
ChargementFiches_API(DossierGadgets$ ,#List_View_Gadgets )
ChargementFiches_API(DossierInternet$ ,#List_View_Internet)
ChargementFiches_API(DossierDivers$ ,#List_View_Divers)
If NbFiles <= 1
NBfiches$ = "Il y a "+ Str(NbFiles)+" fiche API enregistrée"
Else
NBfiches$ = "Il y a "+ Str(NbFiles)+" fiches API enregistrées"
EndIf
SetGadgetText(#Text_compte_fichiers,NBfiches$)
EndProcedure
Dernière modification par Jacobus le lun. 01/oct./2007 19:24, modifié 2 fois.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Je viens d'éditer le code ci-dessus en ajoutant la création d'exemple texte. Pour l'enregistrement d'un exemple il faut ouvrir une fiche api, aller dans l'onglet exemple et créer ou modifier celui existant.
En cliquant sur "Enregistrer" la sélection de l'éditeur se fait automatiquement avec la fonction GetCurrentEditor() et le choix txt ou rtf se fait en conséquence.
En clair
- si l'onglet Définition est actif >> enregistrement fiche RTF
- si l'onglet Exemple est actif >> enregistrement exemple TXT
@+
En cliquant sur "Enregistrer" la sélection de l'éditeur se fait automatiquement avec la fonction GetCurrentEditor() et le choix txt ou rtf se fait en conséquence.
En clair
- si l'onglet Définition est actif >> enregistrement fiche RTF
- si l'onglet Exemple est actif >> enregistrement exemple TXT
@+
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
- Kwai chang caine
- Messages : 6992
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Ah oui, désolé je n'ai pas pensé à ça. Il s'agit d'une dll du system32 dans winxp qui est nécessaire pour l'affichage du rebar entre autres.
A télécharger ci dessous et à copier dans le répertoire system32 de Windows.
File:1->uxtheme.dll

A télécharger ci dessous et à copier dans le répertoire system32 de Windows.
File:1->uxtheme.dll

Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
- Kwai chang caine
- Messages : 6992
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Ben comme je n'ai pas win2000 ça va pas être simple.
Essayes quand même de désactiver la ligne suivante en la commentant dans la procédure CreateRebar(Gadget, hwndOwner)
et fais un essai. Ca devrait désactiver les thèmes, ce qui sera moins beau mais tu pourras peut-être le compiler. Sinon voir avec quelqu'un qui a win2000...
Dis moi ce que ça donne
Essayes quand même de désactiver la ligne suivante en la commentant dans la procédure CreateRebar(Gadget, hwndOwner)
Code : Tout sélectionner
SetWindowTheme_(hwndRB, " ", " ")Dis moi ce que ça donne
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
- Kwai chang caine
- Messages : 6992
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Merci et tant mieux si ça vous plaît. Le prog reste opensource, donc si vous voulez y ajouter des trucs allez-y. Vous pouvez l'adapter à votre utilisation ou vos goûts.
Quand on sera tous d'accord sur une version finale, on pourra le distribuer en exe avec des dossiers contenant quelques fiches de définitions et exemples. Je pense d'ailleurs qu'on pourrait faire les exemples au format *.pb comme il suffit de changer l'extension, ce serait plus simple pour les tester directement .
Si vous voulez tester les dossiers, faites une copie de la fiche UpDateLayeredWindow dans chaque dossier en lui donnant un autre nom. Pareil pour les exemples, copiez des fichiers textes (de n'importe quoi) portant le nom que vous aurez donné à vos fiches de test, vous pourrez voir comment ça marche et essayer les fonctions.
Petit concours : Trouver un nom sympa à ce programme, pour l'instant y a rien de définitif, ce serait donc bien de le personnaliser avec un nom bien de chez nous.
Quand on sera tous d'accord sur une version finale, on pourra le distribuer en exe avec des dossiers contenant quelques fiches de définitions et exemples. Je pense d'ailleurs qu'on pourrait faire les exemples au format *.pb comme il suffit de changer l'extension, ce serait plus simple pour les tester directement .
Si vous voulez tester les dossiers, faites une copie de la fiche UpDateLayeredWindow dans chaque dossier en lui donnant un autre nom. Pareil pour les exemples, copiez des fichiers textes (de n'importe quoi) portant le nom que vous aurez donné à vos fiches de test, vous pourrez voir comment ça marche et essayer les fonctions.
Petit concours : Trouver un nom sympa à ce programme, pour l'instant y a rien de définitif, ce serait donc bien de le personnaliser avec un nom bien de chez nous.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
- Kwai chang caine
- Messages : 6992
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Ouahhh!, merci jacobus enfin quelque chose que KCC, il a compris la questionTrouver un nom sympa à ce programme, pour l'instant y a rien de définitif, ce serait donc bien de le personnaliser avec un nom bien de chez nous
Alors pour le nom de mes programmes, je joue souvent avec les mots.
En fait ils devraient tous s'appeller pareils : "En construction"
Mais comme, j'aime bien trouver le nom en premier, c'est plus simple pour certains nom de variable, le graphisme des forms, etc ....
Alors à froid, KCC y va proposer tout simplement :
.....................................API........................
Pour All Pure Interface
J'aurais malheureusement et surement d'autres idées
Maintenant à vous