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
