Herausfinden wenn der Maximieren Knopf GEDRÜCKT wurde?!

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Herausfinden wenn der Maximieren Knopf GEDRÜCKT wurde?!

Beitrag 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
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag 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. ;)
Zuletzt geändert von Danilo am 03.11.2004 12:14, insgesamt 2-mal geändert.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

vielen dank, unser mentor! :praise: :praise: :praise: :lol: :allright:

c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag 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..).
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag 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. ;)
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag 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
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Antworten