Page 1 sur 1
Question EditorGadget
Publié : mer. 29/janv./2014 0:56
par majikeyric
Salut,
Lorsqu'on place une grande quantité de texte dans un editor gadget, y a t-il un moyen pour "se positionner" sur la dernière ligne du texte ?
J'ai pas trouvé de façon de le faire avec les fonctions disponibles ?!!
Merci
Re: Question EditorGadget
Publié : mer. 29/janv./2014 1:16
par Backup
l'editor de text de Purebasic répond aux normes du RTF
fait une recherche sur le RTF .... (il me semble avoir fait un Tuto la dessus... )
ici :
http://www.purebasic.fr/french/viewtopi ... =21&t=6664
Tuto Numero 15 de la section "utilisateur Avertis"
un truc du genre devrai marcher
Code : Tout sélectionner
Procedure Editor_Locate2(Gadget,x,Y)
; ;Par Progi1984
; Set cursor position
REG = GadgetID(Gadget)
CharIdx = SendMessage_(REG,#EM_LINEINDEX,Y-1,0)
LLength = SendMessage_(REG,#EM_LINELENGTH,CharIdx,0)
If LLength >= x-1
CharIdx + x-1
EndIf
Range.CHARRANGE
Range\cpMin = CharIdx
Range\cpMax = CharIdx
SendMessage_(REG,#EM_EXSETSEL,0,Range)
EndProcedure
Re: Question EditorGadget
Publié : mer. 29/janv./2014 2:07
par falsam
majikeyric a écrit :J'ai pas trouvé de façon de le faire avec les fonctions disponibles ?!!
Solution sans API
Code : Tout sélectionner
Enumeration
#Mainform
#Editor
EndEnumeration
Define.l Event, GEvent
Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered
Procedure Open_MainForm()
OpenWindow(#Mainform, 0, 0, 500, 400, "Test", WindowStyle)
EditorGadget(#Editor, 10, 10, 480, 380)
EndProcedure
Procedure Start()
Open_MainForm()
;Quelques ligne pour le test
For n=1 To 1000
AddGadgetItem(#Editor, -1, "Ligne "+Str(n))
Next
;Et on se place sur la derniere ligne
SetActiveGadget(#Editor)
;Se rendre à la ligne 31
;SetGadgetItemText(#Editor, 30, GetGadgetItemText(#Editor, 30))
;Se rendre sur la derniere ligne
SetGadgetItemText(#Editor, CountGadgetItems(#Editor), GetGadgetItemText(#Editor, CountGadgetItems(#Editor)))
EndProcedure
start()
Repeat
Event = WaitWindowEvent(10)
GEvent = EventGadget()
Select Event
Case #PB_Event_Gadget
Select GEvent
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Re: Question EditorGadget
Publié : mer. 29/janv./2014 15:01
par majikeyric
Merci pour vos 2 solutions
Celle sans API, n'était pas aussi évidente que ça : pour se positionner sur une ligne, en changer le contenu et avoir le focus.
Je ne savais pas que l'editor acceptait le RTF, c'est intéressant !
Re: Question EditorGadget
Publié : mer. 29/janv./2014 15:07
par falsam
majikeyric a écrit :Celle sans API, n'était pas aussi évidente que ça : pour se positionner sur une ligne, en changer le contenu.
Oui
Tout comme la ListIconGadget() on peut ajouter ou insérer un item, supprimer un item, les compter etc .... mais bizarrement on ne peut pas se positionner directement sur une ligne sans passer par l'astuce que je mentionne.
Re: Question EditorGadget
Publié : mer. 29/janv./2014 16:07
par Ar-S
il est vrai que coté gestion de texte dans de la liste PB est perfectible. Pour ce genre de projets, j'opterai pour une alliance structure/tableau ou map
Ainsi l'editor ne sert que pour l'affichage, le traitement se faisant avec de simple replacestring pour la modification et SetGadgetItemText pour le positionnemnt. le tout utilisant les données du tableau.
Peut-être que c'est un résonnement à la con j'ai pas testé mais ça me parait palier (^^)
On travail qu'avec du pré calculé en somme.