Un tuto de l'API

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions

La Doc API avec exemples en PB et en Français : ça vous intéresse?

Oui
44
96%
Non
0
Aucun vote
Men fout
2
4%
 
Nombre total de votes : 46

Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Jacobus a écrit :Hello, je vois que ça avance bien ce petit projet, sympa :)
Je devrais pouvoir poster dès ce soir une version doté de nouvelles fonctionnalités, notamment au niveau de l'accessibilité et la présentation, comme par exemple l'ouverture simultanée d'une fiche avec l'exemple d'utilisation correspondant. Je zipperai le tout comme t'as fais Dobro avec un lien
oui ! un lien c'est bon !! :)

par contre repart bien de ma derniere version , car j'ai inserer des procedures tres efficace de chargement/sauvegarde en RTF, ainsi que le copier-collé compatible RTF !!


c'est quoi les Data stream :)
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Perso je ne sais pas ce que c'est ton DataStream mais c'est sûrement intéressant.

Par contre, il ne faut oublier les Linuxiens : il n'ont ptêt pas les DLL de l'API mais peuvent être attirées par telle ou telle fonctions. Le cas échéant, (et si possible) une procédure en PB peut faire l'affaire.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour les copains.

Comme je vous l'ai dit mon avis n'a pas grande importance, mais comme vous en etes à l'ebauche de l'éditeur, je me permet de vous suggerer une idée que je viens d'avoir.

Ce serais bien si vous pouviez rajouter un champ pour les classer par categorie.
Car le probleme quand on y connais rien en API et que l'on est devant un probleme à résoudre, c'est bien beau d'avoir une liste de centaines d'API bien allignées par ordre alphabetique, mais cela implique que l'on connaisse deja l'API que l'on cherche.

Mais si par exemple on veux agir sur le systeme et faire une pause, on irais dans le dossier systeme, puis je ne sais pas par exemple temp et hop il y aurais par exemple l'API SLEEP qui serait expliquée : Donne un delay en milliseconde. (C'est la seule que je connaisse par coeur :D )

Comme ça meme si on ne connais pas l'API on la decouvre sans avoir à la demander à FLYPE, et qu'il ai à se taper 2 heures de recherche dans MSDN.

Voila c'est une idée, je ne sais pas si elle vaut quelque chose mais c'est tout ce que je suis capable de vous donner :cry:

Bon courage
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Message par Ulix »

Boujour a tous !


Merci pour cette bonne idée et sa mise en oeuvre !
titre : Nom de L'API

Explication de cette API

Code exemple en Purebasic

Auteur



Pour que le code PB soit plus facilement consultable, pourquoi ne pas le mettre dans un onglet ?

J'ai modifier le code de l'application comme suit :

Ajout dans la gadget liste :

Code : Tout sélectionner


 PanelGadget(#Panel, 200,47,595,450) ;ajouter pour avoir des onglets
                AddGadgetItem(#Panel, -1, "Editeur : ") ;un onglet pour la description de l'API
        
					    EditorGadget(#editeur,10,10,570,400)
					    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))
		    
		    AddGadgetItem(#Panel, -1, "Code") ; deux  onglet pour un exemple de code en PB
		    				EditorGadget(#editeur1,10,10,570,400)
		    				
		   CloseGadgetList()
 				

 

Après la ligne 192, l'instrution :

Code : Tout sélectionner

SetGadgetItemText(#Panel, 0, "Editeur  :  " +NomFichier$);ajouter pour avoir le nom dans l'onglet

 
Qu'en pensez-vous ?
Et faire affiché le code de l'exemple en PureBasic dans le deuxiéme onglet (si présent bien sûr !)

merci de m'avoir lu :lol:
Brossden69
Messages : 14
Inscription : mar. 18/sept./2007 8:17

Message par Brossden69 »

Il y a quelques temps que j'utilise ce site suivant :

http://docvb.free.fr/api.php

Tout n'y est pas mais je pense que c'est une bon debut .....
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Ulix a écrit :Boujour a tous !


Merci pour cette bonne idée et sa mise en oeuvre !
bonne idée ! :D

tu veux bien poster le code dans son entier ? s'il te plait ? :)

si possible evitons les codes en KIT !! :lol: (style patch PHP pour les Forumphpbb)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

@BROSSDEN
Oui tu as raison, il est cool ce site

Au fait faut rendre à césar ce qui est à néron. :D

Je viens de regarder dans ApiGuide qui est une référence en la matiere.
Eh ben eux, il y ont déjà pensé à faire des rubriques. :?
J'avais jamais fais gaffe, ils appellent ça des groups.
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Message par Ulix »

@Dobro

Tu as raison, je m'avais pas osez (de peur que cela fasse repédition) car en fait je n'ai fait que peu de changement. :oops:

Voici donc le code en entier !


Code : Tout sélectionner

Declare List_View_API(DossierAPI$)
Declare LoadApiFolder()
Declare selectionner_tout(editor)
Declare Enregistrer_Fiche() ; Format texte
Declare MoveToRecycleBin(Fiche.s) 
Declare Suppression(FichierSelect$, mode.l) 



; ********* 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_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
  #Panel
  #editeur:#editeur1
  #API_choisie
  #Text_compte_fichiers
  #Text_compte_lignes
  #bouton
EndEnumeration
#version = "beta 01 - 2007"
#WindowWidth  = 795 ; adaptation au 800x600
#WindowHeight = 560


;-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$,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\"

;-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)
  SetWindowColor(#ApiWin,RGB(173, 191, 193))
  
  
  
  
  If CreateGadgetList(WindowID(#ApiWin)) 
    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))
    
    
    PanelGadget(#Panel, 200,47,595,450) ;ajouter pour avoir des onglets
                AddGadgetItem(#Panel, -1, "Editeur : ") ;un onglet pour la description de l'API
        
					    EditorGadget(#editeur,10,10,570,400)
					    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))
		    
		    AddGadgetItem(#Panel, -1, "Code") ; deux  onglet pour un exemple de code en PB
		    				EditorGadget(#editeur1,10,10,570,400)
		    				
		   CloseGadgetList()
 				
		    				
    ;EditorGadget(#editeur,200,47,595,450)
    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)) 
    ButtonGadget(#bouton,#WindowWidth-100,#WindowHeight-50,50,20,"edite",#PB_Button_Toggle);#PB_Button_Toggle 
  EndIf 
  
  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   
EndIf

btflg=0 ; bouton flag
SetGadgetAttribute(#editeur, #PB_Editor_ReadOnly, 1)
;-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() ; 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 
  
  ;-Menus events   
  Select Event
    Case #PB_Event_Gadget 
      Select  GadgetID
        Case #bouton
          Beep_(200,200)
          If  btflg=0
            SetGadgetAttribute(#editeur, #PB_Editor_ReadOnly, 0) 
            btflg=1
          Else 
            SetGadgetAttribute(#editeur, #PB_Editor_ReadOnly, 1)
            btflg=0
          EndIf
          
          
        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$+".rtf"   
              If PosElement >= 0      
                Editor_Load(#editeur, FicheVue$)
                SetGadgetText(#Text_compte_lignes,"  Cette fiche est composée de "+ Str(CountGadgetItems(#editeur))+" lignes")
                SetGadgetText(#String_APIname, NomFichier$)
                
			SetGadgetItemText(#Panel, 0, "Editeur  :  " +NomFichier$);ajouter pour avoir le nom dans l'onglet

              Else 
                MessageRequester("ERREUR","Impossible d'ouvrir ce fichier, il est peut être défectueux.",16) 
              EndIf                                                     
              
          EndSelect 
      EndSelect
      
    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$
            ;AddGadgetItem(#List_View, -1, ApiName$) ; qu'on ajoute au listviewgadget() 
           SetGadgetText(#String_APIname, ApiName$+".rtf")
            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() 
          EditorGadgetCOPY(#editeur)
        Case #TB_Paste 
          SetGadgetText(#Text_compte_lignes,"  Cette fiche est composée de "+ Str(CountGadgetItems(#editeur))+" lignes")
          EditorGadgetPASTE(#editeur) 
        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)+".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
          
          
          ;-Fin         
      EndSelect
      
      ; Case #WM_SIZE
      
    Case #PB_Event_CloseWindow :Quitter = 1
      
  EndSelect
  
Until Quitter

End



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$ = "rtf"          ; on recherche les deux types  Ext$ = "txt" Or
            FileName2$=Left(FileName$,Len(FileName$)-4) 
            AddGadgetItem(#List_View, -1, FileName2$) ; 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 |*.rtf", 0); enregistrement dans le dossier par défaut avec nom de fiche en cours
    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) 
      AddGadgetItem(#List_View, -1, FileName2$) ; qu'on ajoute au listviewgadget()
    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

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

Affiché le l'exemple de l'utilisation de l'API dans le deuxiéme onglet, me parais un plus au niveau de la lisibilité.
Car si l'on devais visualisé l'exemple a la suite de la description de l'API cela serais certainement non fonctionnel !

Le problême serait, je pense de savoir si l'exemple d'utilisation de l'API doit être dans deux fichiers distingue (1 pour la description de L'API, l'autre pour l'exemple) ou bien un seule fichier (dans ce cas prévoir un moyen lors de la lecture du fichier de séparer la description de l'API (affichage dans le 1er onglet, et l'exemple affichage dans le 2eme onglet)

J'espére avoir été clair ! Merci
:P
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

comme tu l'a fait la !! c'est tres bien !! vraiment bonne idée !! :)

je pense qu'il faut ajouter le Code dans la fiche !! une seule fiche contiendrai
le tout !! explication detaillé+code :)

il suffit d'ajouter une ligne du style "

Code : Tout sélectionner

" 
pour signaler au prg que la suite doit aller dans l'onglet :D
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Coucou !!!!!!! c'est morpionibus, je suis là :D

Et mon idée de catégorie alors ....... :? (que j'ai volé sans le savoir à ApiGuide :oops: )

Tout le monde s'en fous :lol:
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

j'ai pas suivi l'affaire :?

vous voulez refaire un ApiGuide ? :idea:

si c'est çà, c'est une excellente initiative !!!!!!!

j'ai beaucoup beaucoup appris grace a ApiGuide il y a qq années.
Image
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

En résumé :
Oui mais avec la "french langue" et plutot adapté à notre Pure chéri :D
C'est une idée parmis toutes ses nombreuses idée de notre amis OLLIVIER à laquelle pas mal de freres vont surement ammener une brique.
Et surtout le grand DOBRO qui coordonne tout ça.
Sauf CHRIS qui prefere discuter avec bernard13 :lol:
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

en "french langue" pour notre "Pure chéri"
sur un forum french pb avec des loustics pareil j'm'doute ben.

je maintiens que c'est une très bonne idée.

le corps du programme ressemble un peu à ce que j'avais fais et jamais fini (comme bcp de trucs). peut etre que je pourrais vous filer le source et que vous en fassiez ce que vous voulez. j'avais présenté l'engin ici il y a plus d'un an maintenant (le temps passe trop vite) :
http://www.purebasic.fr/french/viewtopic.php?t=5162
Dernière modification par Flype le lun. 24/sept./2007 22:36, modifié 1 fois.
Image
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Flype a écrit : peut etre que je pourrais vous filer le source et que vous en fassiez ce que vous voulez.
superbe interface ton rss

par contre, tu peut éventuellement utiliser notre application, pour y inserer ton system de listview a base de dossiers
ce qui apporterai le system de trie par categories que demande KCC
récupère cette archive, qui reprends le source du départ, ainsi que le dossier qui l'accompagne , pour avoir la premiere fiche de reference ecrite par Olivier

http://michel.dobro.free.fr/Forum_PB/API_viewer.zip

ps : ce lien comprends la derniere version du source donné par Ulix :)
SpaceMan
Messages : 290
Inscription : mar. 26/oct./2004 19:35
Contact :

Message par SpaceMan »

Salut Les Mecs !
j'avoue que c'est un projet magnifique! mais vu mon niveau en programmation je ne peux vous etre utile par contre vous avez nos soutiens et encouragement. Il m'arrive souvent de rencontrer des problemes et de me dire que les API pourraient m'aider à les resoudre mais etant donné que j'ai le meme niveau que Kwai chang caine :lol: j'ose pas les défier. ce projet est le bienvenu :D :D :D
Du courage :wink:
Répondre