Seite 1 von 1

Fenster und Gadgets anders Verwaltet

Verfasst: 12.11.2005 08:04
von ts-soft
Angeregt durch einen Code von hallodri :allright: 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 :mrgreen: . Ich hoffe, es kann jemand gebrauchen.

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
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.