Page 1 sur 1

Curseur [Réglé]

Publié : mer. 21/févr./2007 2:45
par MetalOS
Quelqu'un sait si en PB on peut crée une procedure pour avoir la position du curseur d'ecriture dans un EditorGadget (Pas le surseur de la souris). Je vous explique, dans mon apli, g 1 BoutonGadget , et 1 EditorGadget.
et j'aimerais que quand je clique sur le boutonGadget j'ai un texte qui s'affiche dans l'editorGadget à l'endroit ou ce trouve le curseur dans cet EditorGadget.

Comment faire ? Merci (Désolé si c'est une question à 2 balle).

Publié : mer. 21/févr./2007 3:21
par Guimauve
C'est pas exactement ce que tu veux mais tu deverais être en mesure de l'adapter à tes besoins. (Extrait de CodeArchives : EditorGadget_GetCursorPosition.pb)

Code : Tout sélectionner

; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=1953&highlight=
; Author: Danilo
; Date: 08. August 2003

; 
; 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) 


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 
A+
Guimauve

Publié : mer. 21/févr./2007 21:23
par MetalOS
Merci Guimauve c'est pas exactement ce que je recherche mais ca va me servir quand même, et comme tu dit ya peut être moyen de l'adapter.

Publié : mer. 21/févr./2007 22:05
par nico
Pour mettre du texte à l'endroit du curseur, il suffit simplement de coller du texte.

SetClipboardText("Texte à coller")
Sendmessage_(Gadgetid(#Editeur),#WM_PASTE,0,0)

Publié : jeu. 22/févr./2007 13:47
par MetalOS
Un grand merci nico c'est exactement ce que je cherchais.

Publié : jeu. 22/févr./2007 18:49
par Dr. Dri
faut juste préserver le contenu du presse papier avant...
mais de mémoire y'a plus sûr qu'un PASTE (EM_REPLACESEL)

Dri

Publié : ven. 23/févr./2007 15:35
par MetalOS
Le code marche tres bien nico encore merci, mais un autre probleme ce pose pour moi. J'ais chercher dans la doc de PB mais j'ais pas trouvé, j'utilise le code que tu m'a donner et j'aimerais faire afficher les petit guillemet " ".
Mais ca plante et je ne c pas comment les declarer pour les faire afficher.

Voici mon code

Code : Tout sélectionner

SetClipboardText("<div align="left">Taper votre code ici </div>")
SendMessage_(GadgetID(#Editor_1),#WM_PASTE,0,0)
Ceci et la partie que je doit faire afficher dans mon Editor_1

Code : Tout sélectionner

<div align="left">Taper votre code ici </div>

Publié : ven. 23/févr./2007 21:14
par nico

Code : Tout sélectionner

;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Editor_0
  #Button_0
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 461, 201, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_0))
      EditorGadget(#Editor_0, 10, 50, 440, 140)
      ButtonGadget(#Button_0, 10, 10, 110, 30, "Coller")
      
    EndIf
  EndIf
EndProcedure

Open_Window_0()

Repeat
  Event = WaitWindowEvent()
  Select Event
    Case  #PB_Event_Gadget
      Select EventGadget()
        Case #Button_0
        ; Je remplace les guimmets par une étoile (tu peut le remplacer par un autre caractère)
          Chaine.s="<div align=*left*>Taper votre code ici </div>" 
          ReplaceString(Chaine,"*",Chr(34),2)
          SendMessage_(GadgetID(#Editor_0),#EM_REPLACESEL,1,@Chaine)
            
      EndSelect
   
    Case #WM_CLOSE
      quit=1
   
  EndSelect
Until quit=1