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