AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi WM_SIZE + SIZE_MINIMIZED geht nicht?
Thema durchsuchen
Ansicht
Themen-Optionen

WM_SIZE + SIZE_MINIMIZED geht nicht?

Ein Thema von MathiasSimmack · begonnen am 29. Jul 2003 · letzter Beitrag vom 30. Jul 2003
Antwort Antwort
Seite 1 von 2  1 2      
MathiasSimmack
(Gast)

n/a Beiträge
 
#1

WM_SIZE + SIZE_MINIMIZED geht nicht?

  Alt 29. Jul 2003, 16:12
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:
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;
Die Box ist nicht zu sehen. Wenn ich allerdings SIZE_MAXIMIZED einsetze, dann erscheint sie.

Ist das ein Bug?
Und wenn Ja: hat jemand eine Idee, wie man das beheben kann?

Gruß.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#2

Re: WM_SIZE + SIZE_MINIMIZED geht nicht?

  Alt 30. Jul 2003, 11:44
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
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#3

Re: WM_SIZE + SIZE_MINIMIZED geht nicht?

  Alt 30. Jul 2003, 11:53
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?
Manuel Pöter
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#4

Re: WM_SIZE + SIZE_MINIMIZED geht nicht?

  Alt 30. Jul 2003, 12:48
Ja, gerade eben:
Delphi-Quellcode:
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;
Bei SIZE_MINIMIZED passiert auch hier nichts, SIZE_MAXIMIZED dagegen zeigt die MessageBox wieder an.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#5

Nachtrag

  Alt 30. Jul 2003, 13:33
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ß.
Angehängte Dateien
Dateityp: zip onminimize.zip (3,6 KB, 18x aufgerufen)
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#6

Re: WM_SIZE + SIZE_MINIMIZED geht nicht?

  Alt 30. Jul 2003, 14:12
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
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: WM_SIZE + SIZE_MINIMIZED geht nicht?

  Alt 30. Jul 2003, 14:50
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
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#8

Re: WM_SIZE + SIZE_MINIMIZED geht nicht?

  Alt 30. Jul 2003, 15:17
Ä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
Alexander
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#9

Re: WM_SIZE + SIZE_MINIMIZED geht nicht?

  Alt 30. Jul 2003, 15:31
Also bei meiner Taskbar-Kompo (auf www.x-spy.net/personal) subclass ich die Fenster die der Taskbar hinzugefügt werden um die Buttons der Taskbar an die Zustände der Fenster anzupassen. Und in dieser "gesubclassten" WndProc funzt die WM_SIZE Message (auch mit SIZE_MINIMIZED) problemlos..!
Manuel Pöter
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: WM_SIZE + SIZE_MINIMIZED geht nicht?

  Alt 30. Jul 2003, 15:31
Zitat von alexander:
denn ohne die VCL läuft es ja anscheind
Hehe... das ist es ja: unter C++ läuft es wunderbar. Unter Delphi (nonVCL) geht es nur sporadisch. D.h. beim normalen Minimieren funzt es und beim Win+M wieder nicht...

Chris
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz