[RESOLU] [EditorGadget] Coordonnées du curseur
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
[RESOLU] [EditorGadget] Coordonnées du curseur
Bonjour, pour une future autocomplétion dans ma lib LEP (LibEditorPlus)... j'aurais besoin de connaitre la position du curseur dans l'editorgadget, mais les coordonnées vis à vis de la fenetre...
J'espère que vous voyez ce que je veux dire.
@+ Merci !
J'espère que vous voyez ce que je veux dire.
@+ Merci !
Dernière modification par Progi1984 le jeu. 10/août/2006 14:52, modifié 1 fois.
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
Essaye ce code :
31
Code : Tout sélectionner
Global x, y, OldPosX, OldPosY, rc.s, Px, Py
rc.s = Chr(13)+Chr(10)
Procedure EditGadgetCursor(gadget)
SendMessage_(GadgetID(gadget),#EM_GETSEL,@Px,@Py)
x = SendMessage_(GadgetID(gadget),#EM_LINEFROMCHAR,Px,0)+1
y = Px-SendMessage_(GadgetID(gadget),#EM_LINEINDEX,SendMessage_(GadgetID(gadget),#EM_LINEFROMCHAR,Py,0),0)
EndProcedure
Procedure EditGadgetPos()
EditGadgetCursor(1)
If (x<>OldPosX Or y<>OldPosY) And y =>0
SetGadgetText(2,Str(x))
SetGadgetText(3,Str(y))
OldPosX = x : OldPosY = y
Beep_(6000,15)
EndIf
EndProcedure
Procedure Window()
OpenWindow(1,200,200,350,500,"Test Position Curseur" ,#PB_Window_SystemMenu)
CreateGadgetList(WindowID(1))
EditorGadget(1,3,3,300,400)
StringGadget(2,50,450,40,20,"")
StringGadget(3,180,450,40,20,"")
TextGadget(4,10,452,70,20,"Ligne:")
TextGadget(5,125,452,70,20,"Caract:")
SetGadgetFont(1,LoadFont(1,"Comic sans Ms",12))
SetGadgetFont(2,LoadFont(2,"Comic sans Ms",10, #PB_Font_Bold ))
SetGadgetFont(3,LoadFont(3,"Comic sans Ms",10, #PB_Font_Bold ))
SetGadgetFont(4,LoadFont(4,"Comic sans Ms",10, #PB_Font_Bold ))
SetGadgetFont(5,LoadFont(5,"Comic sans Ms",10, #PB_Font_Bold ))
SetTimer_(WindowID(1),1,100,0)
For n = 1 To 100
Texte.s+"Ligne numéro : "+RSet(Str(n),3,"0")+rc
Next n
SetGadgetText(1,Texte.s)
EndProcedure
Window()
SetActiveGadget(1)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow: End
Case #WM_TIMER
EditGadgetPos()
EndSelect
ForEver
Denis
Bonne Jounée à tous
Bonne Jounée à tous
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Merci, mais ce sont plus les coordonnées disons générales vis à vis de la fenetre qu'il me faudrait et non la position dans l'EditorGadget !
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
Code : Tout sélectionner
GetCursorPos_(Point.Point)
ScreenToClient_(GadgetID(#Editor),Point)
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Dans ce code, j'ai la position de la souris mais pas du curseur :
Code : Tout sélectionner
Global x, y, OldPosX, OldPosY, rc.s, Px, Py
rc.s = Chr(13)+Chr(10)
Procedure EditGadgetPos()
GetCursorPos_(Point.Point)
ScreenToClient_(GadgetID(1),Point)
SetGadgetText(2,Str(point\x))
SetGadgetText(3,Str(point\y))
EndProcedure
Procedure Window()
OpenWindow(1,200,200,350,500,"Test Position Curseur" ,#PB_Window_SystemMenu)
CreateGadgetList(WindowID(1))
EditorGadget(1,3,3,300,400)
StringGadget(2,50,450,40,20,"")
StringGadget(3,180,450,40,20,"")
TextGadget(4,10,452,70,20,"X:")
TextGadget(5,125,452,70,20,"Y:")
SetTimer_(WindowID(1),1,100,0)
For n = 1 To 100
Texte.s+"Ligne numéro : "+RSet(Str(n),3,"0")+rc
Next n
SetGadgetText(1,Texte.s)
EndProcedure
Window()
SetActiveGadget(1)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow: End
Case #WM_TIMER
EditGadgetPos()
EndSelect
ForEver
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
En fait, je cherche à réaliser une autocompletion pour EditorGadget donc... il me faut la position absolue du curseur clavier lorsque l'EditorGadget est actif.
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
J'ai trouvé ce que tu cherchais:
J'ai fais un test et le popup s'affiche correctement, le coin supérieur gauche du popup s'alignant sur le coin supérieur du caret.
[Edit] j'oubliais, suivant la version de RichEdit, l'utilisation du message EM_POSFROMCHAR diffère.
Voir ici MSDN:
http://msdn.microsoft.com/library/defau ... omchar.asp
Code : Tout sélectionner
SendMessage_(editeur,#EM_EXGETSEL,0,@CHARRANGE.CHARRANGE)
SendMessage_(editeur,#EM_POSFROMCHAR,@point.point,CHARRANGE\CPmin)
ClientToScreen_(editeur,@point.point)
DisplayPopupMenu(0, WindowID(0),point\x,point\y)
[Edit] j'oubliais, suivant la version de RichEdit, l'utilisation du message EM_POSFROMCHAR diffère.
Voir ici MSDN:
http://msdn.microsoft.com/library/defau ... omchar.asp
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
C'est exactement ce qu'il me fallait !
Je prends ton edit en compte...
Je prends ton edit en compte...
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Code correct :
Code : Tout sélectionner
Global x, y, OldPosX, OldPosY, rc.s, Px, Py
rc.s = Chr(13)+Chr(10)
Procedure EditGadgetPos()
SendMessage_(GadgetID(1),#EM_EXGETSEL,0,@CHARRANGE.CHARRANGE)
SendMessage_(GadgetID(1),#EM_POSFROMCHAR,@point.point,CHARRANGE\CPmin)
ClientToScreen_(GadgetID(1),@point.point)
DisplayPopupMenu(0, WindowID(1),point\x,point\y)
SetGadgetText(2,Str(point\x))
SetGadgetText(3,Str(point\y))
EndProcedure
Procedure Window()
OpenWindow(1,200,200,500,500,"Test Position Curseur" ,#PB_Window_SystemMenu)
CreateGadgetList(WindowID(1))
EditorGadget(1,3,3,300,400)
StringGadget(2,50,450,40,20,"")
StringGadget(3,180,450,40,20,"")
TextGadget(4,10,452,70,20,"X:")
TextGadget(5,125,452,70,20,"Y:")
ButtonGadget(6,400,100,100,100,"")
If CreatePopupMenu(0) ; La création du menu contextuel commence...
MenuTitle("Projet") ; Vous pouvez utiliser toutes les commandes relatives au menu,
EndIf
For n = 1 To 100
Texte.s+"Ligne numéro : "+RSet(Str(n),3,"0")+rc
Next n
SetGadgetText(1,Texte.s)
EndProcedure
Window()
SetActiveGadget(1)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow: End
Case #PB_Event_Gadget
If EventGadget()=6
EditGadgetPos()
EndIf
EndSelect
ForEver
; IDE Options = PureBasic v4.00 (Windows - x86)
; CursorPosition = 22
; Folding = -
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net