C'est du bon boulot Stefou! je pense que ça va servir à pas mal d'entre nous. Du coup je viens d'essayer de faire un mode page par page à la Word, ça irait bien avec ton notepad.
C'est un début, ça fonctionne mais c'est à compléter.
Pour tester : cliquer sur le bouton "New" affichera une nouvelle page en plaçant le curseur au début.
Ajout de l'automatisation pour le passage d'une page à l'autre en cours d'écriture.
Ouverture d'un fichier texte et ajout dans l'editeur en cours. S'il fait plus de 64 lignes, une ou plusieurs nouvelles pages sont affichées.
Code : Tout sélectionner
; Simuler Word et le changement de page avec un éditeur
; Idée initiale de Jacobus pour le notepad de Stefou
; Editeurs dynamique, méthode extraite d'un éditeur de Flaith
; Ca reste à peaufiner...
; Inclus la création d'une nouvelle page dès que la ligne 64 est atteinte dans l'éditeur précédent
; Sur la base d'utilisation de la police par défaut.
; Pour tester, (taper quelques lignes dans le premier éditeur, puis) descendre à l'aide de la touche "Entrée"
; On passe ainsi d'une page à l'autre tout en tapant son texte.
; A faire de même avec l'ouverture d'un fichier de plus de 64 lignes...
; Ouverture d'un fichier texte et ajout dans l'editeur en cours. S'il fait plus de 64 lignes, il est ouvert sur plusieurs pages.
;-Constantes
Enumeration
#WinPBWordpad
#ToolBar
#ToolBar_new
#ToolBar_open
#ToolBar_save
#ScrollPages
#Editeur
#file
#StatusBar
EndEnumeration
#PROGRAMNAME = "PBWordpad"
#PROGVERSION = "1.0.03.07"
#Bureau = 0
#PageWidth = 595 ; 21 cm pour simuler le format A4
#PageHeight = 842 ; 29,7 cm
#NbLines = 64
;-Variables globales
Global Gadget_Editor.l = 0, Num_Editor.l = 0, hEdit.l, Editeur.l
Structure GadgetEditor
Num_Gadget.l
Num.l
hEdit.l
EndStructure
Global NewList ListEditor.GadgetEditor()
Procedure Select_Editor()
Resultat = GetActiveGadget()
If Resultat<>-1 And Resultat = Num_Editor
Editeur.l = Gadget_Editor
EndIf
ProcedureReturn Editeur.l
EndProcedure
Procedure Nouvelle_page()
If Select_Editor()
NumLines = CountGadgetItems(Editeur.l)
If NumLines = #NbLines
ValScroll = GetGadgetAttribute(#ScrollPages, #PB_ScrollArea_InnerHeight)
SetGadgetAttribute(#ScrollPages, #PB_ScrollArea_InnerHeight, ValScroll+#PageHeight+60); agrandi la scrollarea d'une nouvelle page
OpenGadgetList(#ScrollPages)
AddElement(ListEditor())
Gadget_Editor + 1
Num_Editor + 1
ListEditor()\Num_Gadget = Gadget_Editor
ListEditor()\Num = Num_Editor
ListEditor()\hEdit = EditorGadget(ListEditor()\Num_Gadget, 20, ValScroll, #PageWidth, #PageHeight+40); on adapte l'éditeur à la scrollarea
SetActiveGadget(ListEditor()\Num_Gadget); activation de l'éditeur
SendMessage_(ListEditor()\hEdit, #EM_SETTARGETDEVICE, #Null, 0); retour à la ligne dans cette nouvelle page
SetGadgetAttribute(#ScrollPages, #PB_ScrollArea_Y, ValScroll-10) ;on ramène la page au niveau des yeux de l'utilisateur
CloseGadgetList()
EndIf
EndIf
EndProcedure
;-Fenêtre
DesktopN = ExamineDesktops()
If DesktopN<>0
WinL = DesktopWidth(#Bureau)
WinH = DesktopHeight(#Bureau)
EndIf
If OpenWindow(#WinPBWordpad, 0, 0, WinL-5, WinH-60, #PROGRAMNAME, #PB_Window_SystemMenu) = 0 Or CreateGadgetList(WindowID(#WinPBWordpad)) = 0
End
EndIf
;-Toolbar
hToolBar = CreateToolBar(#ToolBar, WindowID(#WinPBWordpad))
If hToolBar
ToolBarSeparator()
ToolBarStandardButton(#ToolBar_new, #PB_ToolBarIcon_New) :ToolBarToolTip(#ToolBar, #ToolBar_new, "Nouveau")
ToolBarStandardButton(#ToolBar_open, #PB_ToolBarIcon_Open) :ToolBarToolTip(#ToolBar, #ToolBar_open, "Ouvrir")
ToolBarStandardButton(#ToolBar_save, #PB_ToolBarIcon_Save) :ToolBarToolTip(#ToolBar, #ToolBar_save, "Enregistrer")
ToolBarSeparator()
EndIf
ScrollFlags = #PB_ScrollArea_Center|#PB_ScrollArea_Flat
ScrollAreaGadget(#ScrollPages,5,30,WinL-10,WindowHeight(#WinPBWordpad)-80,WindowWidth(#WinPBWordpad)-10,WindowHeight(#WinPBWordpad)*2,30,ScrollFlags)
AddElement(ListEditor())
Gadget_Editor + 1
Num_Editor + 1
ListEditor()\Num_Gadget = Gadget_Editor
ListEditor()\Num = Num_Editor
ListEditor()\hEdit = EditorGadget(ListEditor()\Num_Gadget, 20, ValScroll+20, #PageWidth, #PageHeight); on adapte l'éditeur à la scrollarea
SetActiveGadget(ListEditor()\Num_Gadget); activation de l'éditeur
SendMessage_(ListEditor()\hEdit, #EM_SETTARGETDEVICE, #Null, 0)
SetGadgetAttribute(#ScrollPages, #PB_ScrollArea_InnerWidth, #PageWidth)
SetGadgetAttribute(#ScrollPages, #PB_ScrollArea_InnerHeight, #PageHeight+40)
CloseGadgetList()
;-Statusbar
If CreateStatusBar(#StatusBar, WindowID(#WinPBWordpad))
AddStatusBarField(WindowWidth(#WinPBWordpad)/2)
AddStatusBarField(WindowWidth(#WinPBWordpad)/2)
StatusBarText(#StatusBar, 0,#PROGRAMNAME+" - "+#PROGVERSION, #PB_StatusBar_Raised)
StatusBarText(#StatusBar, 1, "PB forums français"+Chr(169)+"2007", #PB_StatusBar_Raised|#PB_StatusBar_Center)
EndIf
;-Programme
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Menu
Select EventMenu()
Case #ToolBar_new ; créer une nouvelle page avec un editeur
ValScroll = GetGadgetAttribute(#ScrollPages, #PB_ScrollArea_InnerHeight)
SetGadgetAttribute(#ScrollPages, #PB_ScrollArea_InnerHeight, ValScroll+#PageHeight+60); agrandi la scrollarea d'une nouvelle page
OpenGadgetList(#ScrollPages)
AddElement(ListEditor())
Gadget_Editor + 1
Num_Editor + 1
ListEditor()\Num_Gadget = Gadget_Editor
ListEditor()\Num = Num_Editor
ListEditor()\hEdit = EditorGadget(ListEditor()\Num_Gadget, 20, ValScroll, #PageWidth, #PageHeight+40); on adapte l'éditeur à la scrollarea
SetActiveGadget(ListEditor()\Num_Gadget); activation de l'éditeur
SendMessage_(ListEditor()\hEdit, #EM_SETTARGETDEVICE, #Null, 0); retour à la ligne dans cette nouvelle page
SetGadgetAttribute(#ScrollPages, #PB_ScrollArea_Y, ValScroll-10) ;on ramène la page au niveau des yeux de l'utilisateur
CloseGadgetList()
Case #ToolBar_open
file$=OpenFileRequester("Choisir fichier","c:\","*.txt",0)
If file$
Select_Editor()
If ReadFile(#file,file$)
While Eof(#file) = 0
AddGadgetItem(Editeur.l,-1,ReadString(#file))
NumLines = CountGadgetItems(Editeur.l)
If NumLines = #NbLines
ValScroll = GetGadgetAttribute(#ScrollPages, #PB_ScrollArea_InnerHeight)
SetGadgetAttribute(#ScrollPages, #PB_ScrollArea_InnerHeight, ValScroll+#PageHeight+60); agrandi la scrollarea d'une nouvelle page
OpenGadgetList(#ScrollPages)
AddElement(ListEditor())
Gadget_Editor + 1
Num_Editor + 1
ListEditor()\Num_Gadget = Gadget_Editor
ListEditor()\Num = Num_Editor
ListEditor()\hEdit = EditorGadget(ListEditor()\Num_Gadget, 20, ValScroll, #PageWidth, #PageHeight+40); on adapte l'éditeur à la scrollarea
SetActiveGadget(ListEditor()\Num_Gadget); activation de l'éditeur
SendMessage_(ListEditor()\hEdit, #EM_SETTARGETDEVICE, #Null, 0); retour à la ligne dans cette nouvelle page
SetGadgetAttribute(#ScrollPages, #PB_ScrollArea_Y, ValScroll-10) ;on ramène la page au niveau des yeux de l'utilisateur
CloseGadgetList()
Select_Editor()
AddGadgetItem(Editeur.l,-1,ReadString(#file))
EndIf
Wend
CloseFile(#file)
EndIf
EndIf
; Case #ToolBar_save
EndSelect
EndIf
If Event = #PB_Event_Gadget
Select EventGadget()
Case Gadget_Editor : Nouvelle_page() ; création auto d'une nouvelle page
EndSelect
EndIf
;-End
If Event = #PB_Event_CloseWindow
Quitter = 1
EndIf
Until Quitter
End