Cursor im StringGadget verschieben
Cursor im StringGadget verschieben
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
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
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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?
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?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Naja, er könnte die Position in einer Variable speichern:
Soll ähnlich könnte es klappen (schnell hingeschrieben):
...mußt Dich ein bißchen spielen.
lg
Marco
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
lg
Marco
Zuletzt geändert von marco2007 am 18.08.2008 19:03, insgesamt 1-mal geändert.
Windows 11 - PB 6.03 x64
_________________________________
_________________________________
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
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Hier das ganze nochmal für EditorGadget:
und marco2006 baut jetzt noch rauf und runter rein 
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

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

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

Zuletzt geändert von edel am 18.08.2008 20:08, insgesamt 1-mal geändert.