Thema: Delphi Fenster zu langsam

Einzelnen Beitrag anzeigen

Benutzerbild von Shivan
Shivan

Registriert seit: 5. Mär 2003
Ort: Ravensburg
131 Beiträge
 
Delphi 6 Enterprise
 
#9

Re: Fenster zu langsam

  Alt 14. Jun 2004, 22:48
Hi,

genau mit diesem Problem kämpfe ich auch schon eine Weile.

Habe in der Zeit ca. 3 verschiedene Ansätze gefunden, von denen jedoch keiner perfekt ist.
Ein Versuch davon, indem einfach die ClientArea gesperrt wird:
Delphi-Quellcode:
procedure TfrmBase.LockClientArea(lock: Boolean);
begin
  with Application.MainForm do
  begin
    if lock then
      SendMessage(ClientHandle, WM_SETREDRAW, 0, 0)
    else
    begin
      SendMessage(ClientHandle, WM_SETREDRAW, 1, 0);
      RedrawWindow(ClientHandle, nil, 0, RDW_INVALIDATE or RDW_ERASE or RDW_ALLCHILDREN);
    end;
  end;
end;

procedure TfrmBase.WMMDIActivate(var Message: TWMMDIActivate);
begin
  LockClientArea(Message.ActiveWnd <> Handle);
  inherited;
end;

procedure TfrmBase.WMSysCommand(var Message: TWMSysCommand);
begin
  if (Message.CmdType and $FFF0 = SC_MAXIMIZE) then
  begin
    LockClientArea(True);
    inherited;
    LockClientArea(False);
  end
  else
    inherited;
end;
Noch ein Versuch, bei dem die Animation halbwegs deaktiviert wird:
Delphi-Quellcode:
procedure TfrmBase.SetAnimation(Value: Boolean);
var
  Info: TAnimationInfo;
begin
  Info.cbSize := SizeOf(TAnimationInfo);
  BOOL(Info.iMinAnimate) := Value;
  SystemParametersInfo(SPI_SETANIMATION, SizeOf(Info), @Info, 0);
end;
Den 3. Versuch hab ich nicht mehr, der hat auch irgendwie garnicht funktioniert.

Der beste Effekt, den ich damit erzielen konnte war der, dass zuerst das Fenster normal gezeichnet wird, jedoch ohne jeglichen Inhalt (also grau), dann maximiert wird und dann eben wieder gezeichnet. Aber es erscheint dennoch als normales Fenster zuerst, bevor es maximiert dargestellt wird. Das hab ich leider noch nicht wegbekommen.
Vielleicht findet ja noch jemand die Lösung...
Markus Stein
  Mit Zitat antworten Zitat