Seite 1 von 2
Cursor im StringGadget verschieben
Verfasst: 18.08.2008 18:30
von iostream
Ich habe folgendes Problem:
Ich möchte manuell per Klick auf ein ButtonGadget den Cursor in einem StringGadget eine "Position" weiterschieben (wie wenn ich im StringGadget die rechte oder linke Pfeiltaste drücke)...wie stell ich das an?
Mfg
iostream
Verfasst: 18.08.2008 18:35
von Kaeru Gaman
hm...
wenn du einen Button klickst, dann bekommt der Button den Focus, und nicht mehr das Stringgadget.
du müßtest dir eine komplett eigene Oberfläche proggen, also nicht den standard-cursor benutzen.
Verfasst: 18.08.2008 18:39
von X0r
Vielleicht meint er ja, dass erst der Fokus auf das Stringgadget gesetzt werden soll.
Verfasst: 18.08.2008 18:48
von Kaeru Gaman
aber in dem moment, wo er auf den button klickt, ist der cursor vom stringgadget verschwunden,
also wenn man auf das button-event reagiert, ist der cursor nicht mehr irgendwo,
wo man gucken könnte wo er ist und ihn versetzen.
btw: wie war der Urlaub?
Verfasst: 18.08.2008 19:00
von marco2007
Naja, er könnte die Position in einer Variable speichern:
Soll ähnlich könnte es klappen (schnell hingeschrieben):
Code: Alles auswählen
If OpenWindow(0, 0, 0, 200, 60, "")
If CreateGadgetList(WindowID(0))
StringGadget(0, 0, 0, 80, 20, "Zeile 1")
ButtonGadget(1, 10, 25, 40, 20, "+")
SendMessage_(GadgetID(0), #EM_SETSEL, 0, 0)
SendMessage_(GadgetID(0), #EM_GETSEL, @b, @a)
Debug a
Debug b
SetActiveGadget(0)
EndIf
EndIf
Repeat
event= WaitWindowEvent()
Select event: Case #PB_Event_Gadget: Select EventGadget()
Case 1
a+1
SetActiveGadget(0)
SendMessage_(GadgetID(0), #EM_SETSEL, a, 0)
SendMessage_(GadgetID(0), #EM_GETSEL, @b, @a)
Debug a
Debug b
EndSelect: EndSelect
Until event = #PB_Event_CloseWindow
...mußt Dich ein bißchen spielen.
lg
Marco
Verfasst: 18.08.2008 19:03
von edel
Code: Alles auswählen
hwnd = OpenWindow(0,#PB_Ignore,#PB_Ignore,260,50,"")
CreateGadgetList(hwnd)
StringGadget(0,10,10,150,23,"test")
ButtonGadget(1,165,10,28,23,"<")
ButtonGadget(2,190,10,28,23,">")
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
If EventGadget() = 2
SetActiveGadget(0)
SendMessage_(GadgetID(0),#EM_GETSEL,@start,@ende)
start + 1
SendMessage_(GadgetID(0),#EM_SETSEL,start,start)
EndIf
If EventGadget() = 1
SetActiveGadget(0)
SendMessage_(GadgetID(0),#EM_GETSEL,@start,@ende)
start - 1
SendMessage_(GadgetID(0),#EM_SETSEL,start,start)
EndIf
EndIf
Until event = #PB_Event_CloseWindow
Verfasst: 18.08.2008 19:10
von marco2007
marco2006 hat geschrieben:...mußt Dich ein bißchen spielen.
...das Spielen ist natürlich nach Edel`s Code überflüssig geworden.
Verfasst: 18.08.2008 19:16
von ts-soft
Hier das ganze nochmal für EditorGadget:
Code: Alles auswählen
Procedure Editor_GetCursorX(Gadget)
Protected Range.CHARRANGE
SendMessage_(GadgetID(Gadget), #EM_EXGETSEL, 0, Range)
ProcedureReturn (Range\cpMax - (SendMessage_(GadgetID(Gadget), #EM_LINEINDEX, SendMessage_(GadgetID(Gadget), #EM_EXLINEFROMCHAR, 0, Range\cpMin), 0)) + 1)
EndProcedure
Procedure Editor_GetCursorY(Gadget)
Protected Range.CHARRANGE
SendMessage_(GadgetID(Gadget), #EM_EXGETSEL, 0, Range)
ProcedureReturn SendMessage_(GadgetID(Gadget), #EM_EXLINEFROMCHAR, 0, Range\cpMin) + 1
EndProcedure
Procedure Editor_SetCursorPos(Gadget, x, y)
Protected CharIdx
Protected LLength
Protected Range.CHARRANGE
CharIdx = SendMessage_(GadgetID(Gadget), #EM_LINEINDEX, y-1, 0)
LLength = SendMessage_(GadgetID(Gadget), #EM_LINELENGTH, CharIdx, 0)
If LLength >= x - 1
CharIdx + x - 1
EndIf
Range\cpMin = CharIdx
Range\cpMax = CharIdx
ProcedureReturn SendMessage_(GadgetID(Gadget), #EM_EXSETSEL, 0, Range)
EndProcedure
If OpenWindow(0, 0, 0, 322, 180, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
EditorGadget(0, 8, 8, 306, 133)
ButtonGadget(1, 160, 150, 60, 25, "=>")
ButtonGadget(2, 100, 150, 60, 25, "<=")
Define I.l, X.l, Y.l, Text.s
For I = 1 To 8
Text + "Feel the ..Pure.. Power" + #CRLF$
Next
SetGadgetText(0, Text)
Editor_SetCursorPos(0, 5, 5)
SetActiveGadget(0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadget() > 0
X = Editor_GetCursorX(0)
Y = Editor_GetCursorY(0)
If EventGadget() = 1
Editor_SetCursorPos(0, X + 1, Y)
Else
Editor_SetCursorPos(0, X - 1, Y)
EndIf
SetActiveGadget(0)
EndIf
EndSelect
ForEver
EndIf
und marco2006 baut jetzt noch rauf und runter rein

Verfasst: 18.08.2008 19:44
von iostream
thx

Verfasst: 18.08.2008 19:47
von edel
Code: Alles auswählen
hwnd = OpenWindow(0,#PB_Ignore,#PB_Ignore,280,250,"")
CreateGadgetList(hwnd)
EditorGadget(0,10,10,150,100)
ButtonGadget(1,165,10,25,23,"<")
ButtonGadget(2,190,10,25,23,">")
ButtonGadget(3,215,10,25,23,"^")
ButtonGadget(4,240,10,25,23,"v")
SetGadgetText(0,"test" + #LF$ + "lala")
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
If EventGadget() = 1
SetActiveGadget(0)
SendMessage_(GadgetID(0),#WM_KEYDOWN,#VK_LEFT,0)
EndIf
If EventGadget() = 2
SetActiveGadget(0)
SendMessage_(GadgetID(0),#WM_KEYDOWN,#VK_RIGHT,0)
EndIf
If EventGadget() = 3
SetActiveGadget(0)
SendMessage_(GadgetID(0),#WM_KEYDOWN,#VK_UP,0)
EndIf
If EventGadget() = 4
SetActiveGadget(0)
SendMessage_(GadgetID(0),#WM_KEYDOWN,#VK_DOWN,0)
EndIf
EndIf
Until event = #PB_Event_CloseWindow
