Page 1 sur 2

Editeur / Visualiseur pour PB

Publié : ven. 27/mai/2005 14:44
par Jacobus
Salut à toutes et tous,
Je viens de me faire un prog pour lire mes codes sources rapidement sans passer par l'éditeur/compilateur. Cela me permet de consulter vite fait un ou plusieurs codes et d'en extraire une routine.
J'y ai adjoint quelques fonctions de base pour travailler, mais le but essentiel est de voir/lire du code sans ouvrir d'onglet supplémentaire dans PB ou JaPBe. C'est sans autre prétention que cela puisse servir à la communauté purebasicienne, je vous le livre ici. N'hésitez pas à l'améliorer ou le corriger si vous le souhaitez.

Code : Tout sélectionner

; PB Viewer by Jacobus le 27/05/2005
; PureBasic 3.93
; Outil complémentaire  pour la communauté Purebasicienne

; But du jeu : Visionner rapidement ses codes en les affichant dans
; un éditeur permettant également d'agir sur le contenu du fichier.
; Tout en travaillant dans l'éditeur PB ou JaPBe vous avez vos codes
; et routines sous la main, et pouvez les exporter rapidement.
; Pourquoi ? >> j'en avais marre d'ouvrir et fermer des onglets pour lire
; un source. Là c'est plus rapide. Sans compter que de cette manière, 
; c'est facilement transportable sur une clé ou une diskette.

; On peut même, avec la lib de Progi1984, ajouter la coloration syntaxique et le numérotage des lignes.
; Mais aussi ajouter de la couleur et d'autres fonctions grâce à nos chers libraires.

; Si certains veulent l'améliorer ou apporter leur concours, ben tant mieux
; que tout le monde en profite. 
; Jacobus
;
;*****Code******
;-constantes
Enumeration
  #WindowWidth  = 795 ; adaptation au 800x600
  #WindowHeight = 550
  #win
  #List_View
  #Text_String_PBcode
  #String_PBcode
  #editeur
  #SPB_Choisi
  #Text_compte_fichiers
  #Text_compte_lignes
EndEnumeration
#version = "1/2005"
;-variables
Global Nom$,RepPB$
Nom$ = "Jacobus" ; Personnalisez le en indiquant votre nom

;- 64ko et plus 
;Méthode de Fred 
#MaxSize=500000 
Procedure SetStringManipulationBufferSize(Bytes) 
  PBStringBase.l = 0 
  PBMemoryBase.l = 0 
  !MOV eax, dword [PB_StringBase] 
  !MOV [esp+4],eax 
  !MOV eax, dword [PB_MemoryBase] 
  !MOV [esp+8],eax 
  HeapReAlloc_(PBMemoryBase, #GMEM_ZEROINIT, PBStringBase, Bytes) 
  !MOV dword [_PB_StringBase],eax 
EndProcedure 
; Set the buffer size for all strings to #MaxSize. 
SetStringManipulationBufferSize(#MaxSize) 

Procedure.s ApplicationDir();Répertoire d'application par LSI
  appdir$ = Space(255)
  GetCurrentDirectory_(255, @appdir$)
  If Right(appdir$, 1) <> "\" ; si l'adresse ne finit pas par "\"
    appdir$ = appdir$ + "\" ; on rajoute le "\"
  EndIf
  ProcedureReturn appdir$
EndProcedure

Global AppliDir$
AppliDir$=ApplicationDir()

Procedure List_View_PB()
  NbFiles = 0
  RepPB$ = AppliDir$+"SourcesPB\" ; Indiquer le nom de votre dossier de codes sources s'il est unique
  ;RepPB$ = PathRequester("Sélectionner un dossier", "c:\") ;<== si vous préférez choisir sur le HD ou ailleurs
  If ExamineDirectory(#PB_Any, RepPB$, "*.pb")
    Repeat
      FileType = NextDirectoryEntry()
      If FileType
        FileName$ = DirectoryEntryName()
        If FileName$ <> "." And FileName$ <> ".."
          Ext$ = LCase(Right(FileName$,3)) 
          If Ext$ = ".pb" 
            AddGadgetItem(#List_View, -1, FileName$)
            NbFiles = NbFiles + 1
          EndIf
        EndIf
      EndIf 
    Until FileType = 0
    SetGadgetState(#List_View, 0)
  Else
    MessageRequester("Erreur","Impossible d'examiner le répertoire: " + RepPB$,64)
  EndIf
  SetGadgetText(#Text_compte_fichiers,"Il y a "+ Str(CountGadgetItems(#List_View))+" fichiers PB dans ce dossier")
EndProcedure 

Procedure selectionner_tout(editor)
  range.CHARRANGE\cpMin = 0 
  range\cpMax = -1 
  ProcedureReturn SendMessage_(GadgetID(#editeur),#EM_EXSETSEL,0,@range) 
EndProcedure

Procedure Enregistrer()
  NomCode$ = GetGadgetText(#String_PBcode)
  Fichier.s = SaveFileRequester("Enregistrer un Code",AppliDir$+"SourcesPB\"+NomCode$,"Fichier PB |*.pb", 0); là aussi choisissez le dossier d'enregistrement
  If Fichier = ""     
  Else   
    If GetExtensionPart(Fichier) = ""  
      Fichier = Fichier + ".pb"
    EndIf    
    Code.s = GetFilePart(Fichier.s)
    EnregistreFichier = #True
    If FileSize(Fichier.s)>0 
      Reponse = MessageRequester("Ce fichier existe déjà !","Voulez vous remplacer le fichier :   " + Code ,#MB_ICONEXCLAMATION |#PB_MessageRequester_YesNo ) 
      If Reponse = 6
        a$ + "Yes"
      ElseIf Reponse = 7
        a$ + "No"
        
        If Reponse <> 6 
          EnregistreFichier = #False 
        EndIf 
      EndIf
    EndIf 
  EndIf 
  
  If EnregistreFichier  
    If CreateFile(0,Fichier.s)
      Nombre_de_lignes = CountGadgetItems(#editeur) 
      For n = 0 To Nombre_de_lignes -1
        TexteEditor.s = GetGadgetItemText(#editeur,n,0)
        WriteStringN(TexteEditor)
      Next 
      CloseFile(0) 
    EndIf  
  EndIf 
EndProcedure

Procedure Window_Viewer()
  If OpenWindow(0,0,0, #WindowWidth, #WindowHeight, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget |#PB_Window_TitleBar, Nom$+" PB Viewer "+#version)And CreateGadgetList(WindowID(0)) 
    
    If CreateToolBar(0, WindowID())
      ToolBarStandardButton(0, #PB_ToolBarIcon_New)
      ToolBarToolTip(0,"Page blanche")
      ToolBarStandardButton(1, #PB_ToolBarIcon_Open)
      ToolBarToolTip(1,"Ouvrir dossier")
      ToolBarStandardButton(2, #PB_ToolBarIcon_Save)
      ToolBarToolTip(2,"Enregistrer sous")
      ToolBarSeparator()
      ToolBarStandardButton(3,#PB_ToolBarIcon_Cut)
      ToolBarToolTip(3,"Couper")
      ToolBarStandardButton(4,#PB_ToolBarIcon_Copy)
      ToolBarToolTip(4,"Copier")    
      ToolBarStandardButton(5,#PB_ToolBarIcon_Paste)
      ToolBarToolTip(5,"Coller")
      ToolBarSeparator()
      ToolBarStandardButton(6,#PB_ToolBarIcon_Undo) 
      ToolBarToolTip(6,"Annuler")
      ToolBarStandardButton(7,#PB_ToolBarIcon_Redo)
      ToolBarToolTip(7,"Recommencer") 
      ToolBarStandardButton(8,#PB_ToolBarIcon_Delete); j'utilise cette icône pour l'exemple, mais vous pouvez utiliser votre icône avec : ToolBarImageButton(8,UseImage(1))
      ToolBarToolTip(8,"Sélectionner tout dans l'éditeur")
    EndIf
    
  ListViewGadget(#List_View,0,27,200,503)
  TextGadget(#Text_compte_fichiers,0,530,200,20,"Il y a "+ Str(CountGadgetItems(#List_View))+" fichiers PB dans ce dossier",#PB_Text_Border)
  
  TextGadget(#Text_String_PBcode,395,28,140,18,"Fichier actuellement ouvert :")
  StringGadget(#String_PBcode,535,25,250,20,"")
  
  EditorGadget(#editeur,200,47,595,483,#PB_Container_Raised)
  TextGadget(#Text_compte_lignes,545,530,250,20,"  Ce code est composé de "+ Str(CountGadgetItems(#editeur))+" lignes",#PB_Text_Border)
  
EndIf 
EndProcedure 
  
  ;-programme 
Window_Viewer()  
Repeat 
  
  Event = WaitWindowEvent()
  If Event = #PB_EventGadget 
    Select EventGadgetID()
          
        Case #List_View 
          Select EventType() 
            Case #PB_EventType_LeftClick 
              ClearGadgetItemList(#editeur)
              PosElement = GetGadgetState(#List_View)
              NomFichier$ = GetGadgetText(#List_View)    
              SourceVu$ = RepPB$ + NomFichier$ 
               If PosElement >= 0                                
                Resultat= ReadFile(#SPB_Choisi,SourceVu$) 
                If Resultat <>0  
                  *Tampon=AllocateMemory(Lof())                                                  
                  ReadData(*Tampon, Lof()) 
                  SRC$=PeekS(*Tampon,Lof())  
                  AddGadgetItem(#editeur, -1 ,SRC$)
                  CloseFile(#SPB_Choisi)
                  FreeMemory(*Tampon) 
                Else 
                  MessageRequester("ERREUR","Impossible d'ouvrir ce fichier, il est peut être défectueux.",64)
                EndIf
              EndIf  
              SetGadgetText(#Text_compte_lignes,"  Ce code est composé de  "+ Str(CountGadgetItems(#editeur))+" lignes")
              SetGadgetText(#String_PBcode, NomFichier$)
              ActivateGadget(#editeur)
          EndSelect
         
      
          
      EndSelect
    EndIf 
    
    Select Event
      Case #PB_EventMenu 
        Select EventMenuID()
          
          Case 0 : ClearGadgetItemList(#editeur) : SetGadgetText(#Text_compte_lignes,"  Ce code est composé de  "+ Str(CountGadgetItems(#editeur))+" lignes")
            
          Case 1 : ClearGadgetItemList(#List_View) : List_View_PB()
            
          Case 2 : Enregistrer()
            
          Case 3 
            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,"  Ce code est composé de  "+ Str(CountGadgetItems(#editeur))+" lignes")
            
          Case 4
            SendMessage_(GadgetID(#editeur),#EM_GETSEL,@StartSel,@EndSel) 
            Buffer$ = Space(EndSel-StartSel) 
            SendMessage_(GadgetID(#editeur),#EM_GETSELTEXT,0,@Buffer$) 
            ClearClipboard() 
            SetClipboardText(Buffer$) 
             
          Case 5
            Buffer$ = GetClipboardText() 
            SendMessage_(GadgetID(#editeur),#EM_REPLACESEL,#True,@Buffer$) 
            SetGadgetText(#Text_compte_lignes,"  Ce code est composé de  "+ Str(CountGadgetItems(#editeur))+" lignes")
            
          Case 6 : SendMessage_(GadgetID(#editeur),#EM_UNDO,0,0)
            SetGadgetText(#Text_compte_lignes,"  Ce code est composé de  "+ Str(CountGadgetItems(#editeur))+" lignes")
            
          Case 7 : SendMessage_(GadgetID(#editeur),#EM_REDO,0,0)
            SetGadgetText(#Text_compte_lignes,"  Ce code est composé de  "+ Str(CountGadgetItems(#editeur))+" lignes")
            
          Case 8 : selectionner_tout(editor)
          
          
        EndSelect 
      
    Case #PB_Event_CloseWindow :Quitter = 1
      
  EndSelect 
  
Until Quitter
End
  
@+ Jacobus :wink:

Publié : ven. 27/mai/2005 15:00
par nico
Effectivement, c'est un plus.

Si JaPBe pouvait inclure un explorateur de fichier, ce serait pas mal.

Publié : ven. 27/mai/2005 18:22
par Anonyme2
Je clique sur l'icone dossier et j'ai la messagerequester

impossible d'examiner le répertoire C:\Program Foles\PureBasic\Complier\sourcePB

Alors, on fait comment


Je pense que la hauteur du textgadget "Fichier actuellement ouvert" est insuffisante, je ne vois pas le F majuscule en entier

Publié : ven. 27/mai/2005 20:01
par nico
Denis, il faut modifier une ligne dans le source (ligne 53) pour indiquer le chemin de ton répertoire où alors décommenter le requester.

:)

Publié : ven. 27/mai/2005 20:25
par Jacobus
C'est normal Denis :
C:\Program Foles\PureBasic\Complier\sourcePB
Program Foles est un peu dingue :lol:

Plaisanterie mise à part, le dossier que j'ai indiqué est le mien. Il faut donc que tu modifies le chemin (Là où sont tes sources) comme l'a dit Nico, ou encore utiliser le PathRequester.

Par contre je ne vois pas pourquoi tu ne vois pas correctement le F du TextGadget qui est pourtant à 20 de hauteur 8O

Publié : ven. 27/mai/2005 20:31
par nico
Ce n'est pas sa taille, le problème; c'est le placement x et y.

au lieu de 25 mettre 28 par exemple.

:D

Publié : ven. 27/mai/2005 20:33
par Jacobus
Ok je vois, c'est la ToolBar qui est par dessus. je vais rectifier de suite.

Là ça devrait aller mieux

Publié : ven. 27/mai/2005 21:11
par bernard13
merci jacobus

j'aimerai modifier ton code pour moi
tu me donne la permission?

Publié : ven. 27/mai/2005 21:37
par Backup
je sais pas pour vous ! mais moi dans le menu outils de Japbe
y a le menu "Code Template Plugin "

qui fait ça deja !! :D

mais cela ne retire rien du boulot de Jacobus , bien sur ! :D

Publié : ven. 27/mai/2005 21:43
par nico
:lol:

Il n'est jamais trop tard pour le savoir!

Publié : sam. 28/mai/2005 7:39
par bernard13
je remercie jacobus
pour son exellent idée .

Publié : sam. 28/mai/2005 8:33
par Jacobus
Je suis comme Nico, je n'avais pas encore vu/essayé
Code Template Plugin

J'utilise pourtant jaPBe depuis un moment :roll: y a encore plein de truc que j'ai pas testé.

Bah, de toute façon je préfère le mien que je trouve plus facile d'utilisation. 8) (non non je suis pas chauvin, ou juste un peu :lol: )
De plus, tu lui ajoute l'icône PB, tu le places dans le répertoire de PureBasic avec le dossier contenant tes sources, un raccourci sur le bureau avec PB, jaPBe, SmartUpdate et ça roule.

Attention cependant : Dans l'état n'utilisez pas de fichier supérieur à 64 ko, Zapman l'a testé et planté avec une chaîne trop longue ! :lol:
Je n'avais pas pensé à ça initialement...

Voici la méthode de Fred pour les longues chaînes :
(à insérer en début de code)
je le rééditerai plus tard

Code : Tout sélectionner

#MaxSize=500000
;
Procedure SetStringManipulationBufferSize(Bytes)
PBStringBase.l = 0
PBMemoryBase.l = 0
!MOV eax, dword [PB_StringBase]
!MOV [esp+4],eax
!MOV eax, dword [PB_MemoryBase]
!MOV [esp+8],eax
HeapReAlloc_(PBMemoryBase, #GMEM_ZEROINIT, PBStringBase, Bytes)
!MOV dword [_PB_StringBase],eax
EndProcedure
;
; Set the buffer size for all strings to #MaxSize.
SetStringManipulationBufferSize(#MaxSize)
@Bernard13, Tu peux manipuler le code comme bon te semble, arranges le à ta façon, personnalises le. Ca devrait te faire une base de travail là, les noms utilisés sont explicites et c'est pas un code très compliqué à comprendre. Tu peux utiliser plusieurs User libs pour le faire à ton goût, comme par exemple celle de Nico (settextcolor) pour remplacer la toolbar par des boutons avec icônes.

@+

Publié : sam. 28/mai/2005 10:09
par gnozal
Dobro a écrit :je sais pas pour vous ! mais moi dans le menu outils de Japbe y a le menu "Code Template Plugin "
Je propose une version améliorée de ce plugin : CodeExplorer http://forums.purebasic.com/english/vie ... hp?t=11456

Améliorations :
- coloration syntaxique
- support des ZIP
- recherche par mots clés
etc...

Image

Publié : sam. 28/mai/2005 11:43
par Jacobus
Ok, Ok, ton plugin a l'air au point Gnozal,
Je continuerai quand même le développement de mon viewer, au moins pour le fun. :)

je réédite le code du 1er post avec la lecture des fichiers de plus de 64 Ko

et ici une version colorisée avec :
- LibEditorPlus de Progi1984
- Lib PureColor de Gnozal
Donc pensez à installer ces deux librairies si ce n'est déjà fait avant de compiler.

Code : Tout sélectionner

; PB Viewer by Jacobus le 27/05/2005
; PureBasic 3.93
; Outil complémentaire  pour la communauté Purebasicienne

; But du jeu : Visionner rapidement ses codes en les affichant dans
; un éditeur permettant également d'agir sur le contenu du fichier.
; Tout en travaillant dans l'éditeur PB ou JaPBe vous avez vos codes
; et routines sous la main, et pouvez les exporter rapidement.
; Pourquoi ? >> j'en avais marre d'ouvrir et fermer des onglets pour lire
; un source. Là c'est plus rapide. Sans compter que de cette manière, 
; c'est facilement transportable sur une clé ou une diskette.

; On peut même, avec la lib de Progi1984, ajouter la coloration syntaxique et le numérotage des lignes.
; Mais aussi ajouter de la couleur et d'autres fonctions.

; Si certains veulent l'améliorer ou apporter leur concours, ben tant mieux
; que tout le monde en profite. 
; Jacobus
;-constantes
Enumeration
  #WindowWidth  = 795 ; adaptation au 800x600
  #WindowHeight = 550
  #win
  #List_View
  #Text_String_PBcode
  #String_PBcode
  #editeur
  #SPB_Choisi
  #Text_compte_fichiers
  #Text_compte_lignes
EndEnumeration
#version = "1/2005"
;-variables
Global Nom$,RepPB$
Nom$ = "Jacobus" ; Personnalisez en indiquant votre nom

;- 64ko et plus
;Méthode de Fred
#MaxSize=500000
Procedure SetStringManipulationBufferSize(Bytes)
  PBStringBase.l = 0
  PBMemoryBase.l = 0
  !MOV eax, dword [PB_StringBase]
  !MOV [esp+4],eax
  !MOV eax, dword [PB_MemoryBase]
  !MOV [esp+8],eax
  HeapReAlloc_(PBMemoryBase, #GMEM_ZEROINIT, PBStringBase, Bytes)
  !MOV dword [_PB_StringBase],eax
EndProcedure
; Set the buffer size for all strings to #MaxSize.
SetStringManipulationBufferSize(#MaxSize)

;-PureCOLOR 
Procedure.l WindowCallBack(WindowID.l, message.l, wParam.l, lParam.l) 
  ReturnValue.l = #PB_ProcessPureBasicEvents  
  ReturnValue = PureCOLOR_CallBack(WindowID, message, wParam, lParam, ReturnValue) 
  ProcedureReturn ReturnValue 
EndProcedure 

Procedure.s ApplicationDir();Répertoire d'application par LSI
  appdir$ = Space(255)
  GetCurrentDirectory_(255, @appdir$)
  If Right(appdir$, 1) <> "\" ; si l'adresse ne finit pas par "\"
    appdir$ = appdir$ + "\" ; on rajoute le "\"
  EndIf
  ProcedureReturn appdir$
EndProcedure

Global AppliDir$
AppliDir$=ApplicationDir()

Procedure List_View_PB()
  NbFiles = 0
  ;RepPB$ = AppliDir$+"SourcesPB\" ; <== Indiquer le nom de votre dossier de codes sources s'il est unique
  RepPB$ = PathRequester("Sélectionner un dossier", "C:\Documents and Settings\JEAN-MARC\Mes documents\") ;<== Win XP (modifier USERNAME en conséquence)
  ;RepPB$ = PathRequester("Sélectionner un dossier", "C:\windows\Mes documents\");<== Win 98 et Me
  If ExamineDirectory(#PB_Any, RepPB$, "*.pb")
    Repeat
      FileType = NextDirectoryEntry()
      If FileType
        FileName$ = DirectoryEntryName()
        If FileName$ <> "." And FileName$ <> ".."
          Ext$ = LCase(Right(FileName$,3)) 
          If Ext$ = ".pb" 
            AddGadgetItem(#List_View, -1, FileName$)
            NbFiles = NbFiles + 1
          EndIf
        EndIf
      EndIf 
    Until FileType = 0
    SetGadgetState(#List_View, 0)
  Else
    MessageRequester("Erreur","Impossible d'examiner le répertoire: " + RepPB$,64)
  EndIf
  SetGadgetText(#Text_compte_fichiers,"Il y a "+ Str(CountGadgetItems(#List_View))+" fichiers PB dans ce dossier")
EndProcedure 

Procedure selectionner_tout(editor)
  range.CHARRANGE\cpMin = 0 
  range\cpMax = -1 
  ProcedureReturn SendMessage_(GadgetID(#editeur),#EM_EXSETSEL,0,@range) 
EndProcedure

Procedure Enregistrer()
  NomCode$ = GetGadgetText(#String_PBcode)
  Fichier.s = SaveFileRequester("Enregistrer un Code",AppliDir$+"SourcesPB\"+NomCode$,"Fichier PB |*.pb", 0); là aussi choisissez le dossier d'enregistrement
  If Fichier = ""     
  Else   
    If GetExtensionPart(Fichier) = ""  
      Fichier = Fichier + ".pb"
    EndIf    
    Code.s = GetFilePart(Fichier.s)
    EnregistreFichier = #True
    If FileSize(Fichier.s)>0 
      Reponse = MessageRequester("Ce fichier existe déjà !","Voulez vous remplacer le fichier :   " + Code ,#MB_ICONEXCLAMATION |#PB_MessageRequester_YesNo ) 
      If Reponse = 6
        a$ + "Yes"
      ElseIf Reponse = 7
        a$ + "No"
        
        If Reponse <> 6 
          EnregistreFichier = #False 
        EndIf 
      EndIf
    EndIf 
  EndIf 
  
  If EnregistreFichier  
    If CreateFile(0,Fichier.s)
      Nombre_de_lignes = CountGadgetItems(#editeur) 
      For n = 0 To Nombre_de_lignes -1
        TexteEditor.s = GetGadgetItemText(#editeur,n,0)
        WriteStringN(TexteEditor)
      Next 
      CloseFile(0) 
    EndIf  
  EndIf 
EndProcedure

Procedure Window_Viewer()
  If OpenWindow(0,0,0, #WindowWidth, #WindowHeight, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget |#PB_Window_TitleBar, Nom$+" PB Viewer "+#version)And CreateGadgetList(WindowID(0)) 
    SetWindowCallback(@WindowCallBack())
    
    If CreateToolBar(0, WindowID())
      ToolBarStandardButton(0, #PB_ToolBarIcon_New)
      ToolBarToolTip(0,"Page blanche")
      ToolBarStandardButton(1, #PB_ToolBarIcon_Open)
      ToolBarToolTip(1,"Ouvrir dossier")
      ToolBarStandardButton(2, #PB_ToolBarIcon_Save)
      ToolBarToolTip(2,"Enregistrer sous")
      ToolBarSeparator()
      ToolBarStandardButton(3,#PB_ToolBarIcon_Cut)
      ToolBarToolTip(3,"Couper")
      ToolBarStandardButton(4,#PB_ToolBarIcon_Copy)
      ToolBarToolTip(4,"Copier")    
      ToolBarStandardButton(5,#PB_ToolBarIcon_Paste)
      ToolBarToolTip(5,"Coller")
      ToolBarSeparator()
      ToolBarStandardButton(6,#PB_ToolBarIcon_Undo) 
      ToolBarToolTip(6,"Annuler")
      ToolBarStandardButton(7,#PB_ToolBarIcon_Redo)
      ToolBarToolTip(7,"Recommencer") 
      ToolBarStandardButton(8,#PB_ToolBarIcon_Delete); j'utilise cette icône pour l'exemple, mais vous pouvez utiliser votre icône avec : ToolBarImageButton(8,UseImage(1))
      ToolBarToolTip(8,"Sélectionner tout dans l'éditeur")
    EndIf
    
    ListViewGadget(#List_View,0,47,200,483)
    PureCOLOR_SetGadgetColor(#List_View,RGB($0,$FF,$0),RGB($0,$0,$0))
    TextGadget(#Text_compte_fichiers,0,530,200,20,"Il y a "+ Str(CountGadgetItems(#List_View))+" fichiers PB dans ce dossier",#PB_Text_Border)
    PureCOLOR_SetGadgetColor(#Text_compte_fichiers,RGB($FF,$0,$0),RGB($0,$0,$0))
  
    TextGadget(#Text_String_PBcode,395,28,140,18,"Fichier actuellement ouvert :")
    PureCOLOR_SetGadgetColor(#Text_String_PBcode,-1,RGB($80,$80,$C0))
    
  StringGadget(#String_PBcode,535,25,250,20,"")
  PureCOLOR_SetGadgetColor(#String_PBcode,RGB($FF,$FF,$FF),RGB($0,$0,$0))
  
  EditorGadget(#editeur,200,47,595,483,#PB_Container_Raised)
  Editor_ColorBackground(#editeur,RGB($C0,$C0,$D1))
  
  TextGadget(#Text_compte_lignes,545,530,250,20,"  Ce code est composé de "+ Str(CountGadgetItems(#editeur))+" lignes",#PB_Text_Border)
  PureCOLOR_SetGadgetColor(#Text_compte_lignes,RGB($FF,$FF,$0),RGB($0,$0,$0))
  
  PureCOLOR_SetWindowColor(0,RGB($80,$80,$C0))
EndIf 
EndProcedure 
  
  ;-programme 
Window_Viewer()  
Repeat 
  
  Event = WaitWindowEvent()
  If Event = #PB_EventGadget 
    Select EventGadgetID()
          
        Case #List_View 
          Select EventType() 
            Case #PB_EventType_LeftClick 
              ClearGadgetItemList(#editeur)
              PosElement = GetGadgetState(#List_View)
              NomFichier$ = GetGadgetText(#List_View)    
              SourceVu$ = RepPB$ + NomFichier$ 
               If PosElement >= 0                                
                Resultat= ReadFile(#SPB_Choisi,SourceVu$) 
                If Resultat <>0  
                  *Tampon=AllocateMemory(Lof())                                                  
                  ReadData(*Tampon, Lof()) 
                  SRC$=PeekS(*Tampon,Lof())  
                  AddGadgetItem(#editeur, -1 ,SRC$)
                  CloseFile(#SPB_Choisi)
                  FreeMemory(*Tampon) 
                Else 
                  MessageRequester("ERREUR","Impossible d'ouvrir ce fichier, il est peut être défectueux.",16)
                EndIf
              EndIf  
              SetGadgetText(#Text_compte_lignes,"  Ce code est composé de  "+ Str(CountGadgetItems(#editeur))+" lignes")
              SetGadgetText(#String_PBcode, NomFichier$)
              ActivateGadget(#editeur)
          EndSelect
         
      
          
      EndSelect
    EndIf 
    
    Select Event
      Case #PB_EventMenu 
        Select EventMenuID()
          
          Case 0 : ClearGadgetItemList(#editeur) : SetGadgetText(#String_PBcode, "")
            SetGadgetText(#Text_compte_lignes,"  Ce code est composé de  "+ Str(CountGadgetItems(#editeur))+" lignes")
            
          Case 1 : ClearGadgetItemList(#List_View) : List_View_PB()
            
          Case 2 : Enregistrer()
            
          Case 3 
            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,"  Ce code est composé de  "+ Str(CountGadgetItems(#editeur))+" lignes")
            
          Case 4
            SendMessage_(GadgetID(#editeur),#EM_GETSEL,@StartSel,@EndSel) 
            Buffer$ = Space(EndSel-StartSel) 
            SendMessage_(GadgetID(#editeur),#EM_GETSELTEXT,0,@Buffer$) 
            ClearClipboard() 
            SetClipboardText(Buffer$) 
             
          Case 5
            Buffer$ = GetClipboardText() 
            SendMessage_(GadgetID(#editeur),#EM_REPLACESEL,#True,@Buffer$) 
            SetGadgetText(#Text_compte_lignes,"  Ce code est composé de  "+ Str(CountGadgetItems(#editeur))+" lignes")
            
          Case 6 : SendMessage_(GadgetID(#editeur),#EM_UNDO,0,0)
            SetGadgetText(#Text_compte_lignes,"  Ce code est composé de  "+ Str(CountGadgetItems(#editeur))+" lignes")
            
          Case 7 : SendMessage_(GadgetID(#editeur),#EM_REDO,0,0)
            SetGadgetText(#Text_compte_lignes,"  Ce code est composé de  "+ Str(CountGadgetItems(#editeur))+" lignes")
            
          Case 8 : selectionner_tout(editor)
          
          
        EndSelect 
      
    Case #PB_Event_CloseWindow :Quitter = 1
      
  EndSelect 
  
Until Quitter
End
  
Quelques options supplémentaires au prochain épisode,
@+

Publié : sam. 28/mai/2005 16:47
par bernard13
question a Jacobus

pourquoi tu as mis les constantes suivante :

#WindowWidth = 795 ; adaptation au 800x600
#WindowHeight = 550

pour ecrire ceci :
If OpenWindow(0,0,0, #WindowWidth, #WindowHeight

alors que tu aurais pus mettre
If OpenWindow(0,0,0, 795,550
peux tu m'expliquer svp .