Question EditorGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Question EditorGadget

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Question EditorGadget

Message 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
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Question EditorGadget

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: Question EditorGadget

Message par majikeyric »

Merci pour vos 2 solutions :D

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 !
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Question EditorGadget

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Question EditorGadget

Message 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

Code : Tout sélectionner

structure Mots
NumLigne.i
NumMot.i
Mot.s
endstructure
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.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre