Seite 1 von 1

Herausfinden wenn der Maximieren Knopf GEDRÜCKT wurde?!

Verfasst: 03.11.2004 11:17
von nco2k
hi folks,

ich frage mich, ist es irgendwie möglich herauszufinden, wenn jemand den maximieren knopf in der titelzeile drückt?? so daß ich die windows interne maximieren funktion übergehen kann und das fenster nicht maximiert wird beim draufdrücken, sondern was ganz anderes passieren soll. ähnlich #PB_Event_CloseWindow, aber es existiert ja leider (noch?) kein #PB_Event_MaximizeWindow.

das folgende beispiel gibt nur ein ereigniss zurück, wenn das fenster schon maximiert ist und das will ich nicht. :cry:

Code: Alles auswählen

Procedure WindowCallback(hWnd, Msg, wParam, lParam) 
  Select Msg
    Case #WM_SIZE
      Select wParam
        Case #SIZE_MINIMIZED
          SetGadgetText(0, "Fenster ist Minimiert!") ;<--- Ereigniss tritt erst auf, wenn das Fenster minimiert wurde und NICHT beim draufdrücken auf den Minimieren-Knopf!
        Case #SIZE_MAXIMIZED
          SetGadgetText(0, "Fenster ist Maximiert!") ;<--- Ereigniss tritt erst auf, wenn das Fenster maximiert wurde und NICHT beim draufdrücken auf den Maximieren-Knopf!
      EndSelect
  EndSelect
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

#Title = "Test"
If OpenWindow(0, 0, 0, 300, 200, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered, #Title)
  If CreateGadgetList(WindowID())
    TextGadget(0, 110, 10, 100, 15, "")
    ButtonGadget(1, 5, 5, 100, 25, "Beenden")
  EndIf
Else
  MessageRequester(#Title, "Error", #MB_OK | #MB_ICONERROR)
  End
EndIf
SetWindowCallback(@WindowCallback())

Repeat
  
  If IsIconic_(WindowID())
  SetGadgetText(0, "Fenster ist Minimiert!") ;<--- Ereigniss tritt erst auf, wenn das Fenster minimiert wurde und NICHT beim draufdrücken auf den Minimieren-Knopf!
  ElseIf IsZoomed_(WindowID())
    SetGadgetText(0, "Fenster ist Maximiert!") ;<--- Ereigniss tritt erst auf, wenn das Fenster maximiert wurde und NICHT beim draufdrücken auf den Maximieren-Knopf!
  ElseIf WindowID()
    SetGadgetText(0, "Fenster ist Normal!")
  Else
    SetGadgetText(0, "Kein Fenster vorhanden!")
  EndIf
  
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadgetID()
        Case 1
          End
      EndSelect
    ;- Fehlende Funktionen in PB... Wie könnte man das nun vorübergehend lösen??
    ;Case #PB_Event_MinimizeWindow ;<--- Sowas brauche ich!
      ;MessageRequester(#Title, "Minimieren Knopf wurde gedrückt!")
    ;Case #PB_Event_MaximizeWindow ;<--- Sowas brauche ich!
      ;MessageRequester(#Title, "Maximieren Knopf wurde gedrückt!")
    Case #PB_Event_CloseWindow
      MessageRequester(#Title, "Schliessen Knopf wurde gedrückt!")
  EndSelect
  
ForEver

End
es ist wirklich schade, daß diese funktionen in pb fehlen. weiss jemand bescheid ob das überhaupt in plannung ist oder fred vielleicht schon daran arbeitet?? naja, warten wir auf die magische "4". /:->

bis dahin brauche ich einen ersatz...

vielen dank im voraus!

c ya,
nco2k

Verfasst: 03.11.2004 11:52
von Danilo

Code: Alles auswählen

;
; by Danilo, 03.11.2004 - german forum
;
Procedure WndProc(hWnd,Msg,wParam,lParam)
  Static IsMinimized
  Select Msg
    Case #WM_SYSCOMMAND
      Select wParam&$FFFFFFF0
        Case #SC_MAXIMIZE
          Beep_(800,100)
          ProcedureReturn 0
        Case #SC_MINIMIZE
          If IsMinimized
            ResizeWindow(400,400)
          Else
            ResizeWindow(400,0)
          EndIf
          IsMinimized!1
          ProcedureReturn 0
      EndSelect
  EndSelect
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

#WINICONS = #PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget
#WINFLAGS = #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#WINICONS

OpenWindow(0,0,0,400,400,#WINFLAGS,"xyz")
SetWindowCallback(@WndProc())

Repeat:Until WaitWindowEvent()=#PB_EVENT_CLOSEWINDOW
Probier mal beide Button, Max- und Minimize. ;)

Verfasst: 03.11.2004 11:56
von nco2k
vielen dank, unser mentor! :praise: :praise: :praise: :lol: :allright:

c ya,
nco2k

Verfasst: 03.11.2004 12:13
von Danilo
Musste noch ein "&$FFFFFFF0" bei "Select wParam" hinzufügen.
Siehe MSDN, die unteren 4 Bits kann das System verwenden.

Wenn es ganz korrekt sein soll, dann mußt Du evtl. noch das
SystemMenu anpassen (Minimize disablen, Restore enablen etc..).

Verfasst: 03.11.2004 17:41
von Ynnus
Falls es das Codearchiv noch gibt (gab es leider laaange kein Update mehr) sollte das unbedingt rein. Ein wirklich nützlicher Code welcher schnell die Möglichkeiten aufzeigt, die Systembuttons zu belegen. ;)

Verfasst: 03.11.2004 21:45
von Andre
Sunny hat geschrieben:Falls es das Codearchiv noch gibt (gab es leider laaange kein Update mehr) sollte das unbedingt rein. Ein wirklich nützlicher Code welcher schnell die Möglichkeiten aufzeigt, die Systembuttons zu belegen. ;)
Es wird ein neues CodeArchiv geben, kann sich nur noch um xx Wochen handeln. :wink:

PS: Gespeichert habe ich Danilo's Code schon heute mittag :D