Curseur [Réglé]
Curseur [Réglé]
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).
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).
Dernière modification par MetalOS le jeu. 22/févr./2007 13:46, modifié 1 fois.
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)
A+
Guimauve
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
Guimauve
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
Ceci et la partie que je doit faire afficher dans mon Editor_1
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)
Code : Tout sélectionner
<div align="left">Taper votre code ici </div>
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