Position curseur

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
LavaLava
Messages : 173
Inscription : dim. 28/mars/2004 17:42
Localisation : Provence

Position curseur

Message par LavaLava »

Comment peut-on récupérer la position du curseur dans un EditorGadget ou un StringGadget ?
A+
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Dans un StrinGadget à une seule ligne, tu peux mettre ça:

SendMessage_(GadgetID(#StringGadget), #EM_GETSEL, #Null, @Pos)
Tu récupères la position dans Pos

Par contre, j'ai pas testé dans un EditorGadget ou un StringGadget multiligne

Chris :)
LavaLava
Messages : 173
Inscription : dim. 28/mars/2004 17:42
Localisation : Provence

Message par LavaLava »

Merci !,
J'ai testé avec un EditorGadget et un StringGadget multiligne et ça fonctionne aussi. A ceci prés que pos contient la position du curseur en nbe de caractéres ! Il faut donc retrouver le nombre de lignes ... c'est lourd mais faisable.
Par contre je ne sais pas si cela à de l'importance mais la commade devrait avoir 2 long en retour :
SendMessage_(GadgetID(#EditorGadget), #EM_GETSEL, #Null, @PosDebutSelection,@PosFinSelection)
Cela ne va t'il pas créer un phénoméne de 'bourrage' de la pile de Windows ?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Cela ne va t'il pas créer un phénoméne de 'bourrage' de la pile de Windows ?
Je sais pas, mon PC est branché sur le courant de l'EDF :lol:
(Ah ah!!! Elle est bonne, celle-là... non?
Non? Bon... Tant pis :cry: )

En fouillant dans CodeArchiv, j'ai trouvé ce code.
Si ça peut t'aider!

Code : Tout sélectionner

; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=862&highlight=
; Author: Danilo
; Date: 04. May 2003

; Allerdings bitte ich folgendes zu beachten: 
; Das updaten via Timer ist nicht gut, sondern wurde hier von mir 
; nur zu Demonstrationszwecken gewählt. 
; Normalerweise sitzen die UpdatePunkte im WindowCallback... 
; 
; Hier geht es nur darum die Funktion der Prozeduren 'StringGadgetCursorX/Y' zu zeigen...

; 
; by Danilo, 04.05.2003 - german forum 
; 
Procedure StringGadgetCursorX(gadget) 
  SendMessage_(GadgetID(gadget),#EM_GETSEL,@Min,@Max) 
  ProcedureReturn Max-SendMessage_(GadgetID(gadget),#EM_LINEINDEX,SendMessage_(GadgetID(gadget),#EM_LINEFROMCHAR,Min,0),0)+1 
EndProcedure 

Procedure StringGadgetCursorY(gadget) 
  SendMessage_(GadgetID(gadget),#EM_GETSEL,@Min,@Max) 
  ProcedureReturn SendMessage_(GadgetID(gadget),#EM_LINEFROMCHAR,Min,0)+1 
EndProcedure 

;- Programm 

#STRINGGADGET1 = 1 

Procedure UpdateStringGadgetPos() 
  Shared UpdateStringGadgetPos_oldX, UpdateStringGadgetPos_oldY 
  x = StringGadgetCursorX(#STRINGGADGET1) 
  y = StringGadgetCursorY(#STRINGGADGET1) 
  If x<>UpdateStringGadgetPos_oldX Or y<>UpdateStringGadgetPos_oldY 
    SetGadgetText(2,"X: "+RSet(Str(x),5,"0")+"   Y: "+RSet(Str(y),5,"0")) 
    UpdateStringGadgetPos_oldX = x : UpdateStringGadgetPos_oldY = y 
    Beep_(800,10) 
  EndIf 
EndProcedure 


EOL.s = Chr(13)+Chr(10) 
For a = 1 To 100 
  A$+"Zeile "+RSet(Str(a),3,"0")+EOL 
Next a 
A$+"<< ENDE >>" 


OpenWindow(1,200,200,200,420,#PB_Window_SystemMenu,"") 
CreateGadgetList(WindowID()) 
StringGadget(#STRINGGADGET1,3,3,194,394,A$,#ES_NOHIDESEL|#ES_MULTILINE|#WS_VSCROLL|#WS_HSCROLL) 
SetGadgetFont(#STRINGGADGET1,LoadFont(1,"Lucida Console",14)) 
TextGadget(2,3,400,194,17,"") 

SetTimer_(WindowID(),1,100,0) 

Repeat 
  Select WaitWindowEvent() 
    Case #PB_EventCloseWindow: End 
    Case #WM_TIMER 
      UpdateStringGadgetPos() 
  EndSelect 
ForEver 
 
Chris :)
LavaLava
Messages : 173
Inscription : dim. 28/mars/2004 17:42
Localisation : Provence

Message par LavaLava »

Elle est bien booooonnnnnne !
surtour que je rique pas de te contrarier car ton code à l'air de me plaire !
Merci...
Répondre