StringGadget [RESOLU]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
micio
Messages : 17
Inscription : jeu. 06/déc./2007 11:12

StringGadget [RESOLU]

Message par micio »

Bonjour à tous

Je suis nouvel utilisateur PureBasic et peu expérimenté en programmation (PB 1res impressions excellentes) dans le passé j'ai toucher un peu au c et au pascal, c'était au temps de msdos, ça date un peu.

Je voudrais savoir comment dans un StringGadget ou EditorGadget il est possible de récupérer la position du curseur text et comment le positionner à l'endroit choisi, et, en espérant ne pas abuser, comment préselectionner une portion de text et récupérer une sésection.

Merci pour votre aide
cordialement micio
Dernière modification par micio le dim. 09/déc./2007 13:21, modifié 1 fois.
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Ptet via un S/GetGadgetState
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Bienvenue

Pour la position du curseur dans un EditorGadget
Code trouvé sur CodeArchivde PureArea.net.

Tu peux aussi télécharger cet utilitaire, il reprend les 1900 codes du CodeArchiv, mais en facilitant la recherche par différents filtres.

Code : Tout sélectionner

; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=1953&highlight=
; Author: Danilo (updated for PB4.00 by blbltheworm)
; Date: 08. August 2003
; OS: Windows
; Demo: No

; 
; by Danilo, 08.08.2003 - german forum 
; 
Procedure EditorGadgetCursorX(Gadget) 
  ; returns X-Pos of Cursor 
  REG = GadgetID(Gadget) 
  SendMessage_(REG,#EM_EXGETSEL,0,Range.CHARRANGE) 
  ProcedureReturn (Range\cpMax-(SendMessage_(REG,#EM_LINEINDEX,SendMessage_(REG,#EM_EXLINEFROMCHAR,0,Range\cpMin),0))+1) 
EndProcedure 

Procedure EditorGadgetCursorY(Gadget) 
  ; returns Y-Pos of Cursor 
  REG = GadgetID(Gadget) 
  SendMessage_(REG,#EM_EXGETSEL,0,Range.CHARRANGE) 
  ProcedureReturn SendMessage_(REG,#EM_EXLINEFROMCHAR,0,Range\cpMin)+1 
EndProcedure 

Procedure EditorGadgetCursorPos(Gadget) 
  ; returns relative Position of Cursor 
  SendMessage_(GadgetID(Gadget),#EM_EXGETSEL,0,Range.CHARRANGE) 
  ProcedureReturn Range\cpMax 
EndProcedure 

Procedure EditorGadgetLocate(Gadget,x,y) 
  ; 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 



OpenWindow(1,200,200,300,200,"EditorGadget",#PB_Window_SystemMenu) 
  CreateGadgetList(WindowID(1)) 
  EditorGadget(1,5,5,290,190) 
  
  AddGadgetItem(1,-1,"Hallo!") 
  AddGadgetItem(1,-1,"") 
  AddGadgetItem(1,-1,"Hier ein paar Proceduren") 
  AddGadgetItem(1,-1,"zur Steuerung des Cursors") 
  AddGadgetItem(1,-1,"im EditorGadget.") 

  EditorGadgetLocate(1,7,2) 

  SetActiveGadget(1) 

Repeat 
  Select WaitWindowEvent() 
    Case #PB_Event_CloseWindow: End 
  EndSelect 
  SetWindowText_(WindowID(1),"X: "+Str(EditorGadgetCursorX(1))+" Y: "+Str(EditorGadgetCursorY(1))+" -- Position: "+Str(EditorGadgetCursorPos(1))) 
ForEver 
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
micio
Messages : 17
Inscription : jeu. 06/déc./2007 11:12

Message par micio »

Bonjour à tous

Merci pour votre aide.
Tout vas bien.

cordialement micio
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

comtois a écrit :Tu peux aussi télécharger cet utilitaire, il reprend les 1900 codes du CodeArchiv, mais en facilitant la recherche par différents filtres.
Je ne connaissais pas cet utilitaire. Adopté !
Merci comtois !

Lio :D
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Répondre