Editeur / Visualiseur pour PB

Programmation d'applications complexes
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Editeur / Visualiseur pour PB

Message 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:
Dernière modification par Jacobus le sam. 28/mai/2005 11:45, modifié 3 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.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Effectivement, c'est un plus.

Si JaPBe pouvait inclure un explorateur de fichier, ce serait pas mal.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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.

:)
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message 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
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.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

Ok je vois, c'est la ToolBar qui est par dessus. je vais rectifier de suite.

Là ça devrait aller mieux
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.
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

Message par bernard13 »

merci jacobus

j'aimerai modifier ton code pour moi
tu me donne la permission?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

:lol:

Il n'est jamais trop tard pour le savoir!
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

Message par bernard13 »

je remercie jacobus
pour son exellent idée .
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message 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.

@+
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.
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message 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
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message 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,
@+
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.
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

Message 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 .
Répondre