Verfasst: 27.02.2009 14:25
außer man setzt den Status gleich wieder hoch, wie du gesagt hast.
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
; ***************************************************************************************
http://www.purebasic.fr/german/viewtopi ... 055#234055mk-soft hat geschrieben:Mit Callback die WM_SYSCOMMAND abfangen
FF
Andesdaf hat geschrieben: FF<-- was ist das eigentlich?
(F)iel (F)ergnügenReturn Values
An application should return zero if it processes this message
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)...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.