Seite 2 von 3

Verfasst: 27.02.2009 14:25
von Andesdaf
außer man setzt den Status gleich wieder hoch, wie du gesagt hast.

Verfasst: 27.02.2009 15:32
von mk-soft
Mit Callback die WM_SYSCOMMAND abfangen

Code: Alles auswählen

;- Konstanten
Enumeration ; Window ID
  #Window
EndEnumeration

Enumeration ; Menu ID
  #Menu
EndEnumeration

Enumeration ; MenuItem ID
  #Menu_Exit
EndEnumeration

Enumeration ; Statusbar ID
  #Statusbar
EndEnumeration

Enumeration ; Gadget ID
  #List
EndEnumeration

; ***************************************************************************************

;- Declare
Declare WinCB(hWnd, uMsg, wParam, lParam)

; ***************************************************************************************

Procedure UpdateWindow()

  Protected x,y,dx,dy
  Protected mn,st,tb
  
  x = 0
  y = 0
  mn = MenuHeight()
  st = StatusBarHeight(#StatusBar)
  ;tb = ToolBarHeight(#ToolBar)
  dx = WindowWidth(#Window)
  dy = WindowHeight(#Window) - mn - st - tb
  ResizeGadget(#List, x, y, dx, dy)
  
EndProcedure

Procedure WriteLog(Info.s)
  Protected temp.s
  temp = FormatDate("%YYYY.%MM.%DD %HH:%II:%SS - ", Date()) + Info
  AddGadgetItem(#List, -1, temp)
  If CountGadgetItems(#List) > 500
    RemoveGadgetItem(#List, 0)
  EndIf
EndProcedure

;- Globale Variablen
Global exit = 0

;- Fenster
style = #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget
If OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 400, 300, "Fenster", style)
  ; Menu
  If CreateMenu(#Menu, WindowID(#Window))
    MenuTitle("&Datei")
      MenuItem(#Menu_Exit, "Be&enden")
  EndIf
  ; Statusbar
  CreateStatusBar(#Statusbar, WindowID(#Window))
  ; Gadgets
  If CreateGadgetList(WindowID(#Window))
    ListViewGadget(#List, 0,0,0,0)
  EndIf
  
  ;-- Setze Callback
  SetWindowCallback(@WinCB())
  
  ;-- Hauptschleife
  Repeat
    event   = WaitWindowEvent()
    window  = EventWindow()
    menu    = EventMenu()
    type    = EventType()
    Select event
      Case #PB_Event_Menu
        Select menu
          Case #Menu_Exit
            Exit = 1
        EndSelect
      Case #PB_Event_Gadget
      Case #PB_Event_CloseWindow
        Exit = 1
      Case #PB_Event_Repaint
      Case #PB_Event_SizeWindow
        UpdateWindow()
        
      Case #PB_Event_MoveWindow
      Case #PB_Event_ActivateWindow
      Case #PB_Event_SysTray
    
    EndSelect
    
  Until Exit
EndIf

; ***************************************************************************************

Procedure WinCB(hWnd, uMsg, wParam, lParam)
  
  Protected result, temp.s
  
  result = #PB_ProcessPureBasicEvents
  Select uMsg
    Case #WM_SIZE 
      Select wParam 
        Case #SIZE_MINIMIZED 
          WriteLog("Fenster wurde minimiert")
        Case #SIZE_RESTORED 
          WriteLog("Fenster wurde wiederhergestellt")
        Case #SIZE_MAXIMIZED 
          WriteLog("Fenster wurde maximiert")
      EndSelect
    Case #WM_SYSCOMMAND 
      Select wParam 
        Case #SC_MINIMIZE 
          WriteLog("Menu minimieren")
          ; Code zum Minimieren hier einfügen
          result = 0
        Case #SC_RESTORE 
          WriteLog("Menu wiederhergestellen")
        Case #SC_MAXIMIZE 
          WriteLog("Menu maximieren")
      EndSelect
    Default
  EndSelect
  
  ProcedureReturn result 
  
EndProcedure

; ***************************************************************************************

FF :wink:

Verfasst: 27.02.2009 15:53
von ts-soft
mk-soft hat geschrieben:Mit Callback die WM_SYSCOMMAND abfangen
FF :wink:
http://www.purebasic.fr/german/viewtopi ... 055#234055
FF :wink:

Verfasst: 27.02.2009 15:58
von Andesdaf
deja vu :lol:

FF :wink: <-- was ist das eigentlich?

Verfasst: 27.02.2009 16:12
von HeX0R
Andesdaf hat geschrieben: FF :wink: <-- was ist das eigentlich?
Bild
;)

Verfasst: 27.02.2009 16:18
von mk-soft
WinAPI
Return Values

An application should return zero if it processes this message
(F)iel (F)ergnügen :wink:

Verfasst: 27.02.2009 16:44
von Andesdaf
ah danke
FF :wink:

Verfasst: 27.02.2009 16:53
von Kaeru Gaman
Die ursprüngliche Frage war aber nur, wie man das Minimieren überhaupt registriert.
von "vorher nochemal schnell so ne ackzion ausführn" hat er nix gesacht.

Verfasst: 27.02.2009 18:15
von Shardik
Kaeru Gaman hat geschrieben:Die ursprüngliche Frage war aber nur, wie man das Minimieren überhaupt registriert.
von "vorher nochemal schnell so ne ackzion ausführn" hat er nix gesacht.
Das ist vollkommen korrekt. Deshalb habe ich ja auch zunächst die Links zu den Beispielen von Fluid Byte (der zeigt, wie das Problem in PB 4.20 und PB 4.30 nur mit PB-Bordmitteln lösbar ist) und edel gesetzt. Mein Beispiel bietet aber einen "Mehrwert", indem man eine beliebige Aktion vor dem Minimieren durchführen kann oder durch ein "ProcedureReturn 0" den Minimierungsvorgang ganz unterdrücken kann (sozusagen den Minimierungsknopf "abklemmen" ohne ihn unsichtbar zu machen)... :wink:

Verfasst: 27.02.2009 18:22
von Kaeru Gaman
meine Kritik galt auch weniger dir, als dem dutzend postings nach dir,
für die "thema teilweise verfehlt" gilt. ;)