![]() |
WM_SIZE + SIZE_MINIMIZED geht nicht?
Mal auf Verdacht in die API-Sparte
Reagiert bei euch Delphi korrekt auf WM_SIZE + SIZE_MINIMIZED? Meins nicht (D5 Pro Updatepack #1). :(
Delphi-Quellcode:
Die Box ist nicht zu sehen. Wenn ich allerdings SIZE_MAXIMIZED einsetze, dann erscheint sie.
type
TForm1 = class(TForm) { ... } private procedure WMSize(var Message: TWMSize); message WM_SIZE; end; { ... } procedure TForm1.WMSize(var Message: TWMSize); begin if(Message.Msg = WM_SIZE) and (Message.SizeType = SIZE_MINIMIZED) then begin MessageBox(self.Handle,'yo',nil,0); end else inherited; end; Ist das ein Bug? Und wenn Ja: hat jemand eine Idee, wie man das beheben kann? Gruß. |
Re: WM_SIZE + SIZE_MINIMIZED geht nicht?
Hi,
ich nutze D5 Enterprise und habe den gleichen Fehler. Bei mir wird wmSize nur für die Typen SIZE_MAXIMIZED und SIZE_RESTORED aufgerufen. Für SIZE_MINIMIZED wird nicht mal die Ereignisbehandlung durchlaufen (gerade getestet). Hab dazu leider auch keine schnelle Idee, kann deinen Fehler aber bestätigen. Vermutung: SIZE_MINIMIZED wird nicht über das Ereignis wmSize weitergeleite, so dass dafür unsere Ereignisbehandlung nicht reagieren kann oder es gibt eine andere Stelle wo man es erfäht. Tut mir leid, dass ich nicht richtig helfen konnte, Gruß oki |
Re: WM_SIZE + SIZE_MINIMIZED geht nicht?
Hm.. also ich kann mich noch erinnern, dass es bei mir funktioniert hat..!
Schonmal versucht die WndProc zu überschreiben und dort die Message zu checken anstatt über einen Message-Handler? |
Re: WM_SIZE + SIZE_MINIMIZED geht nicht?
Ja, gerade eben:
Delphi-Quellcode:
Bei SIZE_MINIMIZED passiert auch hier nichts, SIZE_MAXIMIZED dagegen zeigt die MessageBox wieder an.
procedure TForm1.WndProc(var Message: TMessage);
begin case Message.Msg of WM_SIZE: if(Message.wParam = SIZE_MINIMIZED) then begin MessageBox(self.Handle,'yo',nil,0); exit; end; { ... } end; inherited WndProc(Message); end; |
Nachtrag
Liste der Anhänge anzeigen (Anzahl: 1)
Ach so, der Sinn der Frage ist folgender:
Es gab ja schon einige Male Fragen wie: Wie kann ich mein Programm in die TNA minimieren? Und bisher habe ich´s bei VCL-Programmen immer über WM_SYSCOMMAND/SC_MINIMIZE geregelt. Sprich: trat diese Message auf, ließ ich den Button in der Startleiste verschwinden und erzeugte das TNA-Symbol, usw. Allerdings klappt das Minimieren in die TNA nicht, wenn der globale Systemhotkey WIN+M benutzt wird, mit dem man ja alle aktiven Fenster auf einmal minimieren kann. In dem Fall wird die Anwendung einfach nur normal minimiert, aber sie verschwindet nicht in der TNA. Nach ein bisschen Rätselraten bei einem nonVCL-Programm habe ich das Problem nun mit WM_SIZE/SIZE_MINIMIZED lösen können. So wird auch auf den o.g. Sys-Hotkey reagiert, und das Programm verschwindet korrekt in der TNA. Tja, und beim Versuch, das für die VCL umzusetzen, bin ich dann auf das obige Problem gestoßen. Vielleicht ist´s auch keins, sondern ich mache bloß irgendwo einen Fehler. Darum habe ich mal die beiden Beispiele (VCL und nonVCL) rangehangen. Gruß. |
Re: WM_SIZE + SIZE_MINIMIZED geht nicht?
Hi,
ich hab auch noch mal etwas rumgetestet. Bei mir ist eins definitiv klar, beim Minimieren wird wmSize nicht aufgerufen. Egal was man macht, wenn wmSize aufgerufen wird, dann ausschließlich für SIZE_MAXIMIZED und SIZE_RESTORED! Das heißt, dass wmSize beim minimieren nicht aufgerufen wird. Ich habe auch schon mal bis runter ins TWinControl geschaut. Dort steht SIZE_MAXIMIZED und SIZE_MINIMIZED mit drin. Also auch keine Lösung. Gruß oki |
Re: WM_SIZE + SIZE_MINIMIZED geht nicht?
Hi,
nicht nur Delphi 5 ist betroffen. Sowohl bei Delphi 6 Personal (alle Updates) und Delphi 7 Enterprise Trial (ohne Updates [natürlich]) tritt dieser "Bug" auf. Was mich wundert ist, dass im PSDK drin steht, dass SIZE_MINIMIZED auch "dazu gehört". Wenn ich es noch schaffe, versuche ich gleich mal auf die Stelle in C++ ein WinAPI-Programm zu coden, um zu gucken, ob das wirklich ein Bug in Delphi ist, oder nicht! Chris |
Re: WM_SIZE + SIZE_MINIMIZED geht nicht?
Ähm es ist sehr wahscheinlich, dass es ein Bug ist, denn ohne die VCL läuft es ja anscheind.
einen Lösungsweg habe ich aber áuch nciht anzubieten :sad: |
Re: WM_SIZE + SIZE_MINIMIZED geht nicht?
Also bei meiner Taskbar-Kompo (auf
![]() |
Re: WM_SIZE + SIZE_MINIMIZED geht nicht?
Zitat:
Chris |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz