Nimm lieber:
Code: Alles auswählen
SetWindowLongPtr_(GadgetID(#DeinGadget), #GWL_WNDPROC, @DeinCallback())
Außerdem kannst du im Callback den Parameter "Message" bzw. "uMsg" ausgeben lassen, um zu ermitteln, welche Events bei welcher Aktion ausgelöst werden.
Die Eventnummer kannst du z.B. mit Hilfe des Programms Konstantia den Konstantennamen ermitteln und in deinem Code verwenden.
Ich sehe gerade, dass der Downloadlink nicht mehr funktioniert. Schade, aber war vorhersehbar.
Du kannst das nützliche Programm auch hier herunterladen: http://www.rsbasic.de/backupprogramme/Konstantia.zip
Ansonsten hier ein Code, um die Cursorposition durchgehend zu ermitteln:
Code: Alles auswählen
EnableExplicit
Global ComboBoxCB
Procedure ComboBoxCB(hWnd, uMsg, wParam, lParam)
Protected xPos
Select uMsg
Case #WM_CTLCOLOREDIT
If IsGadget(GetActiveGadget())
If GadgetID(GetActiveGadget()) = hWnd
xPos = SendMessage_(hWnd, #CB_GETEDITSEL, 0, 0) >> 16
SetGadgetText(3, "XPos: " + Str(xPos))
EndIf
EndIf
EndSelect
ProcedureReturn CallWindowProc_(ComboBoxCB, hWnd, uMsg, wParam, lParam)
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, 500, 400, "Window", #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)
ComboBoxCB = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @ComboBoxCB())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf