[RESOLU] [EditorGadget] Coordonnées du curseur

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

[RESOLU] [EditorGadget] Coordonnées du curseur

Message par Progi1984 »

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 !
Dernière modification par Progi1984 le jeu. 10/août/2006 14:52, modifié 1 fois.
brossden
Messages : 821
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Essaye ce code :

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 
  

31
Denis

Bonne Jounée à tous
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

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 !
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Code : Tout sélectionner

GetCursorPos_(Point.Point)
ScreenToClient_(GadgetID(#Editor),Point)
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

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 
snobw
Messages : 26
Inscription : ven. 05/nov./2004 12:58

Message par snobw »

Pour être plus clair, tu ne cherche pas la position du curseur souris, mais de celui du curseur clavier.

En gros à savoir qu'elle objet posséde le focus ?
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

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.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

J'ai trouvé ce que tu cherchais:

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)
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
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

C'est exactement ce qu'il me fallait !

Je prends ton edit en compte...
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

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 = -
Répondre