Page 6 sur 7

Publié : mar. 25/sept./2007 8:29
par Kwai chang caine
Et mon idée de catégorie alors ....... (que j'ai volé sans le savoir à ApiGuide )
Tout le monde s'en fous
Bah, ........ et mon asniere !!!!!!!! :?

Publié : mar. 25/sept./2007 8:38
par Jacobus
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 :D
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 @+ 8)

Publié : mar. 25/sept./2007 8:42
par Kwai chang caine
Si on te l'a pas encore dit, c'est une bonne idée aussi de faire des catégories
Mille mercis JACOBUS
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 :lol:

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 :D

Encore merci de ta réponse :wink:

Publié : dim. 30/sept./2007 18:33
par Jacobus
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... :mrgreen: ça sera plus mieux

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

Publié : dim. 30/sept./2007 18:49
par Ollivier
Ah, ben t'as bien avancé! Houlà, va ptêt falloir que je commence à faire 2 ou 3 fiches...

Publié : dim. 30/sept./2007 19:56
par 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

@+

Publié : dim. 30/sept./2007 20:10
par Ollivier
Pour ma part, je vais regarder ça cette semaine car là, la gueule de bois et le boulot demain matin m'incite à rejoindre le plumard.

Publié : lun. 01/oct./2007 10:07
par Kwai chang caine
Bonjour JACOBUS

Apparement t'as fait un boulot de dingue.
Mais j'ai pas pu voir, car ça me declenche un panneau d'erreur : "bibliotheque UXTheme.dll introuvable" :cry:

Je pense que ça viens de chez moi, mais comme j'en suis pas sur, je prefere te demander avant d'aller acheter un nouveau PC :D

Publié : lun. 01/oct./2007 11:02
par Jacobus
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
Image

Publié : lun. 01/oct./2007 12:25
par Kwai chang caine
Merci pour le SAV :wink:
Mais tu sais comme plaie, j'suis au top
Maintenant j'ai changé de message d'erreur :cry:
"Le point d'entrée de procedure RtlUnhandledExceptionFilter introuvable dans ntdll.dll"

Au fait j'suis sous W2000

Désolé de te créer encore plus de boulot :oops:

Publié : lun. 01/oct./2007 12:54
par Jacobus
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)

Code : Tout sélectionner

SetWindowTheme_(hwndRB, " ", " ")
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

Publié : lun. 01/oct./2007 13:24
par Kwai chang caine
Merci beaucoup JACOBUS 8)

ça marche du tonnere de ZEUS
ça valait le coup, il est splendide ton programme on dirait un vrai :lol: :wink:

Avec ça API-guide il a qu'a bien se tenir....

Mille merci et excuse moi pour le derangement :oops:

Encore bravo, merci et bonne continuation

Publié : lun. 01/oct./2007 15:55
par Ar-S
Ton interface est superbe Jacobus ! un grand bravo !!!
ça commence fort

Publié : lun. 01/oct./2007 19:38
par Jacobus
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. :P

Publié : lun. 01/oct./2007 20:09
par Kwai chang caine
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
Ouahhh!, merci jacobus enfin quelque chose que KCC, il a compris la question :D et surtout il est content KCC y va jouer :D
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 :lol:
Maintenant à vous :D