Also, ich war glaube ich etwas voreilig. Ich habe gemerkt, das die Lösung von Shardik doch nicht so funktioniert,
wie ich das gerne hätte. Das Problem ist glaube ich grundsätzlich, das die aktuelle Cursorposition immer nur dann
richtig ausgegeben wird, wenn das Gadget auch aktiviert ist. Ich verstehe das durchaus, und denke, man müsste
das z.B. über einen Callback realisieren können.
Ich bin bei den Messeges in Callbacks ein absoluter Anfänger und habe es mal mit "#WM_NOTIFY" versucht. So
funtioniert es auch einigermaßen, allerdings muss man immer erst die Maus über ein anderes Gadget bewegen.
Am besten wäre es, wenn die Position des Cursors immer wenn das ComboboxGadget aktiviert ist und der Cursor
bewegt wird in eine Variable geschrieben würde und diese global abzufragen wäre... GEHT DAS...UND WIE...?!
Hier mein erster kläglicher Versuch in einem Beispiel...
Code: Alles auswählen
Procedure WindowCallback(WindowID, Message, wParam, lParam)
Select Message
Case #WM_NOTIFY
xPos.l = SendMessage_(GadgetID(0), #CB_GETEDITSEL, 0, 0) >> 16
SetGadgetText(3, "XPos: " + Str(xPos))
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Procedure SetCursorX(Gadget, xPos)
;Setzt den Cursor an die angegebene Position im Text
SendMessage_(GadgetID(Gadget), #CB_SETEDITSEL, 0, xPos << 16 + xPos)
EndProcedure
If OpenWindow(0, 0, 0, 300, 65, "ComboBoxTest", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ComboBoxGadget(0, 10, 10, 280, 22, #PB_ComboBox_Editable)
ButtonGadget (1, 10, 35, 100, 22, "Zeit einfügen")
ButtonGadget (2, 115, 35, 100, 22, "Datum einfügen")
TextGadget (3, 230, 39, 60, 22, "XPos:", #PB_Text_Border)
SetGadgetText (0, "Dies ist ein Testtext...")
SetActiveGadget(0)
SetCursorX(0, 13)
SetWindowCallback(@WindowCallback())
EndIf
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 1
;Hier soll an der aktuellen Cursorposition im ComboboxGadget
;die aktuelle Uhrzeit eingesetzt und der Cursor neu positioniert werden.
Case 2
;Hier soll an der aktuellen Cursorposition im ComboboxGadget
;das aktuelle Datum eingesetzt und der Cursor neu positioniert werden.
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow