Autor Beitrag
Daniel_K
Hält's aus hier
Beiträge: 14


Delphi5
BeitragVerfasst: Mo 07.01.08 20:01 
Hallo,

Ich benötige in Delphi5 eine Ereignisbehandlung beim Umschalten von WindowState=wsMaximized auf wsNormal.

Ich hatte schonmal probiert, mir bei Form1.onRezise eine Variable wegzuspeichern, welcher der letzte Wert von WindowState war um den beim nächsten Form1.onRezise dann vergleichen zu können.
Das Funktioniert aber nicht, da beim onRezise-Ereignis in Form1.WindowState der aktuelle Wert noch nicht enthalten ist wenn das Verkleinern auf Grund einer Benutzereingabe ausgelöst wurde.
Wird das Verkleinern ausgelöst weil Form1.WindowState im Code auf wsNormal gesetzt wurde, ist natürlich der richtige Wert enthalten.

Allerdings gefiel mir der Ansatz ohnehin nicht so gut, aber wenns geklappt hätte...

Gibt es ein Ereignis oder Ähnliches, welches man besser nutzen kann.
Hat irgendwer ne idee?
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mo 07.01.08 23:32 

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Daniel_K Threadstarter
Hält's aus hier
Beiträge: 14


Delphi5
BeitragVerfasst: Di 08.01.08 00:10 
Danke für deine mühe, aber leider komme ich damit nicht weiter.

Das Ereignis onPaint wird beim Umschalten von wsMaximized auf wsNormal nicht ausgelöst.

Wichtig ist mir, daß die Routine nur beim wechseln von wsMaximized auf wsNormal und nicht umgekehrt und auch nicht von wsMinimized auf wsNormal stattfinden soll.
Daniel_K Threadstarter
Hält's aus hier
Beiträge: 14


Delphi5
BeitragVerfasst: Di 08.01.08 02:02 
Sicher nicht die eleganteste lösung, aber funktioniert:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
private
    procedure onReMaximize; 
end;

.
.
.

var
  LastRezizeWindowState : Cardinal;

implementation

.
.
.

procedure TForm1.FormResize(Sender: TObject);
var wp : TWindowPlacement; 
begin

  wp.length := SizeOf (wp);
  GetWindowPlacement (Handle, @wp);  

  if LastRezizeWindowState = SW_SHOWMAXIMIZED then begin
    if wp.showCmd=SW_SHOWNORMAL then begin
      Form1.WindowState:=wsNormal;

      onReMaximize;

    end;
  end;

  LastRezizeWindowState:=wp.showCmd;
  
end;


bin aber für elegantere Lösungen noch offen
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 08.01.08 09:16 
Hallo,

eventuell auch eine Möglichkeit/Ansatz :gruebel: :
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
//...
  public
    procedure WMSize(var Msg: TWMSize); message WM_SIZE;
//...
procedure TForm1.WMSize(var Msg: TWMSize);
begin
  if Msg.SizeType = SIZE_RESTORED then
    if Tag = SIZE_MAXIMIZED then
      showmessage('Hallo');
  Tag := Msg.SizeType;
end;

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Daniel_K Threadstarter
Hält's aus hier
Beiträge: 14


Delphi5
BeitragVerfasst: Mi 09.01.08 23:13 
Hey super, besten dank, ich hab hinter dem begin noch ein

ausblenden Delphi-Quelltext
1:
inherited;					

eingefügt.

ich glaube das bewirk, daß die message normal abgearbeitetwird, oder?

Jetzt läuft es so, wie ich es mir vorgestellt hatte.

Danke