Das Beispiel von RSBasic ist für EIN Gadget ausgelegt.
Für mehr als eines ist eine kleine Anpassung nötig. Ausserdem würde ich das in eine Prozedur
packen, und damit dann das Textgadget erstellen.
Als Beispiel so :
Code: Alles auswählen
EnableExplicit
#PROP_OLDPROC = "PROP:OLDPROC"
#PROP_PBGADGET = "PROP:PBGADGET"
Procedure TextGadgetCB(hWnd, uMsg, wParam, lParam)
Protected TextGadgetCB = GetProp_(hWnd, #PROP_OLDPROC) ; Für den Originalen CB
Protected Gadget ; Die PB Gadgetnummer
; Raus, wenn es keinen originalen Callback gibt (Irgendwas läuft dann falsch)
If Not TextGadgetCB
Debug "Callback wird missbraucht"
ProcedureReturn #Null
EndIf
Select uMsg
Case #WM_LBUTTONDBLCLK
Gadget = GetProp_(hwnd, #PROP_PBGADGET)
Debug "Doppelklick auf Gadget " + Str(Gadget)
EndSelect
ProcedureReturn CallWindowProc_(TextGadgetCB, hWnd, uMsg, wParam, lParam)
EndProcedure
Procedure.i _TextGadget(Gadget, x, y, w, h, Text$)
Protected CB
TextGadget(Gadget, x, y, w, h, Text$, #SS_NOTIFY)
; Callback setzen
CB = SetWindowLongPtr_(GadgetID(Gadget), #GWL_WNDPROC, @TextGadgetCB())
; Damit keine Liste/Map oder sonstwas gebraucht wird, jedes Gadget seine eigenen Daten
SetProp_(GadgetID(Gadget), #PROP_OLDPROC, CB) ; Für den Originalen Callback des Gadgets
SetProp_(GadgetID(Gadget), #PROP_PBGADGET, Gadget) ; Für die PB GadgetNummer
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
_TextGadget(1, 10, 10, 200, 20, "1 - Hallo bin_neu_hier, klicke hier doppelt.")
_TextGadget(2, 10, 40, 200, 20, "2 - Hallo bin_neu_hier, klicke hier doppelt.")
_TextGadget(3, 10, 70, 200, 20, "3 - Hallo bin_neu_hier, klicke hier doppelt.")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
So mal eben auf die Schnelle