Minimieren frage

Anfängerfragen zum Programmieren mit PureBasic.
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

außer man setzt den Status gleich wieder hoch, wie du gesagt hast.
Win11 x64 | PB 6.20
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

deja vu :lol:

FF :wink: <-- was ist das eigentlich?
Win11 x64 | PB 6.20
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Andesdaf hat geschrieben: FF :wink: <-- was ist das eigentlich?
Bild
;)
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

WinAPI
Return Values

An application should return zero if it processes this message
(F)iel (F)ergnügen :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

ah danke
FF :wink:
Win11 x64 | PB 6.20
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag 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:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

meine Kritik galt auch weniger dir, als dem dutzend postings nach dir,
für die "thema teilweise verfehlt" gilt. ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten