Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   WM_SIZE Handler Maximize, Minimize,... (https://www.delphipraxis.net/157354-wm_size-handler-maximize-minimize.html)

Dunkelbunt27 9. Jan 2011 11:46

WM_SIZE Handler Maximize, Minimize,...
 
Hallo Delphi Praxis,

vor kurzem hat man mir die Seite http://social.msdn.microsoft.com/Sea...?Query=WM_SIZE empfohlen um ein Problem beim resizen zu lösen.
Jetzt möchte ich die Ereignisse
1) Fenster maximieren,
2) Fenster minimieren,
3) Fenstergröße wiederherstellen und
4) Fenster neu laden (aus der Taskleiste) erstellen.

Size_Maximized, Size_Minimized, Size_Rerstored ... müsste ich eigentlich verwenden können.
Ich kenne mich damit noch nicht sehr gut aus und habe Probleme die richtige procedure deklarierung im type Teil der Form zu finden.
Ich hab es mit folgendem veruscht:
Delphi-Quellcode:
type
TForm1 = class(TForm)
procedure WMSizeMaximized(var Message: TMessage); message WM_SIZE;
[...]

procedure TSchreibmaschine.WMSizeMaximized(var Message: TMessage);
begin
  neuzeichnen;
end;
Ich bekomme beim kompilieren zahlreiche Fehlermeldungen und nichts funktioniert.
Was ich suche ist jemand der von WM_Size ahnung hat und mir erklären kann,
wie ich es richtig benutzen kann.
Ich möchte wissen wie man das jeweilige im Quelltext schreibt, ich weiß z.B. das man:
Delphi-Quellcode:
procedure WMSizeMaximized(var Message: TMessage); message WM_SIZE;
so schreibt, bei den anderen habe ich leider keine Ahnung.

Ich hoffe ihr könnt mir helfen,
FG Dunkelbunt

Luckie 9. Jan 2011 11:50

AW: WM_SIZE Handler Maximize, Minimize,...
 
Zitat:

Zitat von Dunkelbunt27 (Beitrag 1073383)
Ich bekomme beim kompilieren zahlreiche Fehlermeldungen und nichts funktioniert

Interessant und nun? Sollen wir die Fehlermeldungen raten?

Bummi 9. Jan 2011 11:54

AW: WM_SIZE Handler Maximize, Minimize,...
 
Häng die Deklaration in den private Teil und vergiss inherited nicht.

Dunkelbunt27 9. Jan 2011 11:55

AW: WM_SIZE Handler Maximize, Minimize,...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Natürlich nicht,
hier die Fehlermeldung (es kommt bei genauer betrachtung 4x dieselbe).

Dunkelbunt27 9. Jan 2011 11:57

AW: WM_SIZE Handler Maximize, Minimize,...
 
Zitat:

Häng die Deklaration in den private Teil und vergiss inherited nicht.
:gruebel:

Könntest du mir das mal am Beispiel erklären, oder am besten kurz im Quelltextform schreiben?

wäre ganz lieb

Bummi 9. Jan 2011 11:58

AW: WM_SIZE Handler Maximize, Minimize,...
 
klingt nach einem Fehler in neuzeichnen;

Dunkelbunt27 9. Jan 2011 12:03

AW: WM_SIZE Handler Maximize, Minimize,...
 
Wie leitet man denn normalerwiese das Ereignis ein, wenn das Fenster vergrößert wird, das Grundgerüst dazu müsste doch jedesmal gleich sein, oder?
Das zeichnen funktioniert eigentlich, es ist einfach übernommen, da bei alles anderen Schritten im Programm, wie resizen, ... läuft es problemlos ab.


[edit]
Wenn ich fogendes schreibe:
Delphi-Quellcode:
procedure WMSizeMaximized(var Message: TMessage); message WM_SIZE;
procedure WMSizeMinimized(var Message: TMessage); message WM_SIZE;
bekomme ich folgenden Fehler:
Code:
[DCC Fehler] Schreibunit.pas(22): E2140 Doppelter Botschaftsmethoden-Index
[/edit]

Luckie 9. Jan 2011 12:22

AW: WM_SIZE Handler Maximize, Minimize,...
 
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Label1: TLabel;
  private
    { Private declarations }
    procedure WMSize(var Msg: TMessage); message WM_SIZE;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMSize(var Msg: TMessage);
begin
  case Msg.WParam of
    SIZE_MAXIMIZED: Label1.Caption := 'Maximiert';
    SIZE_MINIMIZED: Label1.Caption := 'Minimiert';
    SIZE_RESTORED: Label1.Caption := 'Wiederhergestellt';
  end;
end;
Aber warum nutzt du nicht OnPaint, um festzustellen, ob neu gezeichnet werden muss oder nicht?

Dunkelbunt27 9. Jan 2011 12:26

AW: WM_SIZE Handler Maximize, Minimize,...
 
Zitat:

Aber warum nutzt du nicht OnPaint, um festzustellen, ob neu gezeichnet werden muss oder nicht?
Gute Frage, aber wie sollte ich das denn feststellen?

[edit]
Danke,
die Size Methode funktioniert super!
Warum komm ich von alleine nie auf den richtigen Weg...
Naja, dazu fragt man ja ;)
[/edit]

Luckie 9. Jan 2011 12:28

AW: WM_SIZE Handler Maximize, Minimize,...
 
Schon mal in die Ereignispalette des Objektinspektors deines Formulares geguckt?

Dunkelbunt27 9. Jan 2011 13:20

AW: WM_SIZE Handler Maximize, Minimize,...
 
Ich weiß wo ich OnPaint finde ;D
Aber danke, für den Tipp.

[edit]Ich muss mich leider nochmal melden.
Das:
Delphi-Quellcode:
private
    { Private-Deklarationen }
    procedure WMSize(var Msg: TMessage); message WM_SIZE;
[...]
verträgt sich leider überhaupt nicht mit:
Delphi-Quellcode:
type
[...]
procedure WMExitSizeMove(var Message: TMessage); message WM_EXITSIZEMOVE;
Wenn ich beides schreibe, wirkt das ExitSizeMove nicht mehr, und das Fenster wird nicht neugezeichnet nach dem resizen.
Jemand ne Idee wie ich das lösen könnte?
Oder ob man beides verbinden kann?
[/edit]


[edit2]
Ich hab das ganze jetzt mit folgendem gelöst, jedoch fehlt noch eine Kleinigkeit:
Delphi-Quellcode:
procedure TForm1.FormPaint(Sender: TObject);
begin
case Form1.WindowState of
      wsMaximized:                              //maximiert
      begin
       [...]
      end;

      wsMinimized:                              //minimiert
      begin
        [...]
      end;

      wsNormal:
      begin
        [...]                                       //...
      end;
      else
      begin
        [...]                                       //...
      end;
end;
end;
Was fehlt ist, wenn ich das Fenster maximiere und dann auf Größe wiederherstellen klicke, wird nicht neu gezeichnet!
Weiß jemand was ich dazu machen muss?
[/edit2]

Dunkelbunt27 10. Jan 2011 16:04

AW: WM_SIZE Handler Maximize, Minimize,...
 
(Es sind jetzt mehr als 24h vergangen, also muss ich einen neuen Post schreiben.)

Mir fehlt eine Prozedur oder Eigenschaft die ich benutzen kann um ein Ereignis auszulösen, wnen ich das Programm erst maximiere und dann auf Größe wiederherstellen, Verkleinern, oder wie es sonst noch in den Windows versionen heißt. Es ist die Schaltfläche zwischen maximieren und minimieren.
(Ich hoffe jeder weiß was ich meine)

Es wäre klasse, wenn jemand eine Antwort wüsste!

DeddyH 10. Jan 2011 16:08

AW: WM_SIZE Handler Maximize, Minimize,...
 
Delphi-Quellcode:
type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
    procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
  public
    { Public-Deklarationen }
  end;

...

procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
  inherited;
  if Msg.CmdType = SC_RESTORE then
    ShowMessage('Hallo');
end;

Luckie 10. Jan 2011 16:29

AW: WM_SIZE Handler Maximize, Minimize,...
 
Was willst du eigentlich erreichen? Jedes mal wenn ein neu zeichnen erforderlich ist, wird OnPaint ausgelöst.

Dunkelbunt27 10. Jan 2011 18:11

AW: WM_SIZE Handler Maximize, Minimize,...
 
Danke!
DeddyH :thumb: funktioniert.

Zitat:

Was willst du eigentlich erreichen? Jedes mal wenn ein neu zeichnen erforderlich ist, wird OnPaint ausgelöst.
Richtig, aber beim "Restore" der Größe ist dies aus irgendeinem Grund nicht passiert, deshalb die Frage.

FG Dunkelbunt


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 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