Savez vous comment calculer la position du Caret dans l'éditeur de texte par apport à la fenêtre ?
Car ceci me permettrais d’insérer un StringGadget pour simuler un input.
Merci

Code : Tout sélectionner
; Les coordonnées sont relatives à l'EditorGadget normalement, pas fait de test, je te laisse le faire.
GetCaretPos_(@Point.POINT)
debug Point\x
debug Point\y
moi ce qui me gave , c'est que je me suis cassé le cul (en restant poli) a faire un regroupement des Tutosj'attendrais que quelqu’un veuille bien en dire plus.
Code : Tout sélectionner
Enumeration
#Main
#Popup
EndEnumeration
Enumeration
#Editor
#String
EndEnumeration
If OpenWindow(#Main, 0, 0, 600, 600, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(#Editor, 10, 10, 580, 500)
StringGadget(#String, -110, -30, 100, 20, "", #ES_MULTILINE)
HideGadget(#String, 1)
SetParent_(GadgetID(#String), GadgetID(#Editor))
For a = 0 To 5
AddGadgetItem(0, a, "Ligne "+Str(a))
Next
AddKeyboardShortcut(#Main, #PB_Shortcut_Control | #PB_Shortcut_I,123)
AddKeyboardShortcut(#Main, #PB_Shortcut_Return, 124)
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_RightClick
GetCaretPos_(@Point.POINT)
Debug Point\x
Debug Point\y
Case #PB_Event_Menu
Select EventMenu()
Case 123
If GetCaretPos_(@Point.POINT) <> 0
Debug Point\x
Debug Point\y
ResizeGadget(#String, Point\x +10, Point\y +10, #PB_Ignore, #PB_Ignore)
HideGadget(#String, 0)
SetActiveGadget(#String)
EndIf
Case 124
If GetActiveGadget() = #String
HideGadget(#String, 1)
Texte.s = GetGadgetText(#String)
SetGadgetText(#String, "")
SetClipboardText(Texte)
SendMessage_(GadgetID(#Editor), #WM_PASTE, 0, 0)
ElseIf GetActiveGadget() = #Editor
SetClipboardText(Chr(10) + Chr(13))
SendMessage_(GadgetID(#Editor), #WM_PASTE, 0, 0)
EndIf
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #String
Select EventType()
Case #PB_EventType_Change
Debug "#String #PB_EventType_Change"
EndSelect
Case #Editor
Select EventType()
Case #PB_EventType_Focus
HideGadget(#String, 1)
EndSelect
EndSelect
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1
EndIf
End
Je comprend ce que tu veux dire, mais pour un débutant, c'est pas évident de chercher quelque chose dont on ne sais rien.moi ce qui me gave , c'est que je me suis cassé le cul (en restant poli) a faire un regroupement des Tutos
et que personne ne s'en sert ! (je vais finir par tout virer ! )
C'est tout le problème, on débute mais on veut faire des choses intéressantes alors forcément ça passe par des codes fait par d'autres et encore faut que le code soit carré parce que sinon ce sera trop dur pour l'adapter. Je met le temps passé dans l'exemple que je donne pour montrer que même pour quelqu'un avec un niveau plus élevé, ça prend énormément de temps et encore là, c'est pour l'exemple parce que je ferais pas comme ça mais si je m'y met, j'en ai pour des heures.les mecs , arrivent , posent leur question ... genre démerdez vous a me filer un code tout fait
ou bien faites la recherche a ma place .....![]()
nico a écrit : C'est tout le problème, on débute mais on veut faire des choses intéressantes alors forcément ça passe par des codes fait par d'autres et encore faut que le code soit carré parce que sinon ce sera trop dur pour l'adapter. Je met le temps passé dans l'exemple que je donne pour montrer que même pour quelqu'un avec un niveau plus élevé, ça prend énormément de temps et encore là, c'est pour l'exemple parce que je ferais pas comme ça mais si je m'y met, j'en ai pour des heures.
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; EPB
Reponse sur ce lien par exempleLord Nelson a écrit :Car ceci me permettrais d’insérer un StringGadget pour simuler un input.
comme je l'ai dis , la reponse a cette question se trouve aussi làLord Nelson a écrit :Car ceci me permettrais d’insérer un StringGadget pour simuler un input.