Fenster und Gadgets anders Verwaltet
Verfasst: 12.11.2005 08:04
Angeregt durch einen Code von hallodri
hab ich mal folgendes Grundgerüst geschaffen.
Ein strukturierter Pointer (nicht ganz korrekt aber...) dient als GadgetID oder WindowID, in der Strukture selber befindet sich das hWnd von Windows. Das ganze kombiniert mit der normalen Vorgehensweise
. Ich hoffe, es kann jemand gebrauchen.
PS: Das Callback dient nur der Demonstration und mit GadgetID ist die PB-Interne Nummer gemeint.
Wäre schön, wenn es in ähnlicher Form, also statt der Long-Struktur eine richtige Gadget-Structure, in PB4.0 umgesetzt wird. So das man anhand des Pointer (ObjektPointer?) immer alle Eigenschaften des Controls zur Verfügung hat.
Das verwenden der LONG Structur ist zwar nicht korrekt, funzt aber.

Ein strukturierter Pointer (nicht ganz korrekt aber...) dient als GadgetID oder WindowID, in der Strukture selber befindet sich das hWnd von Windows. Das ganze kombiniert mit der normalen Vorgehensweise

Code: Alles auswählen
Enumeration ; Windows
#frmMain
EndEnumeration
Dim *Win.LONG(#PB_Compiler_EnumerationValue -1)
Enumeration ;Gadgets
#btnOK
#btnCancel
EndEnumeration
Dim *Gad.LONG(#PB_Compiler_EnumerationValue -1)
Procedure MyWindowCallback(WindowID, Message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
Select Message
Case #WM_COMMAND
Debug GetDlgCtrlID_(GetFocus_())
Debug GetFocus_()
EndSelect
ProcedureReturn Result
EndProcedure
*Win(#frmMain) = OpenWindow(#PB_Any, 0, 0, 200, 50, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "Test")
If *Win(#frmMain)
SetWindowCallback(@MyWindowCallback())
CreateGadgetList(*Win(#frmMain)\l) ; <-- in \l steckt das handle
*Gad(#btnOK) = ButtonGadget(#PB_Any, 10, 10, 80, 30, "Ok")
*Gad(#btnCancel) = ButtonGadget(#PB_Any, 100, 10, 80, 30, "Cancel")
GadgetToolTip(*Gad(#btnOK), "Ich bin der Okay Button")
GadgetToolTip(*Gad(#btnCancel), "Hier wird nicht abgebrochen")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_EventGadget
Select EventGadgetID()
Case *Gad(#btnOK)
MessageRequester("Ok", "GadgetID: " + Str(*Gad(#btnOK)) + Chr(10) + "hWnd: " + Str(*Gad(#btnOK)\l))
Case *Gad(#btnCancel)
MessageRequester("Cancel", "GadgetID: " + Str(*Gad(#btnCancel)) + Chr(10) + "hWnd: " + Str(*Gad(#btnCancel)\l))
EndSelect
EndSelect
ForEver
EndIf
Wäre schön, wenn es in ähnlicher Form, also statt der Long-Struktur eine richtige Gadget-Structure, in PB4.0 umgesetzt wird. So das man anhand des Pointer (ObjektPointer?) immer alle Eigenschaften des Controls zur Verfügung hat.
Das verwenden der LONG Structur ist zwar nicht korrekt, funzt aber.