Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fenster zu langsam (https://www.delphipraxis.net/22004-fenster-zu-langsam.html)

Pseudemys Nelsoni 11. Mai 2004 08:58


Fenster zu langsam
 
Liste der Anhänge anzeigen (Anzahl: 1)
hallöchen,

ich möchte ein mdi-kindfenster erstellen, ist aber ziemlich lahm so wie ich das jetzt hab.

der "code" ist zur zeit so:

Delphi-Quellcode:
Type
  TStatusWindowClass = class(TObject)
  private
    StatusWindow: TForm;
    StatusBox: TRichEdit;
    StatusTextBox: TEdit;
  public
    procedure CreateStatusWindow;
  end;

implementation

procedure TStatusWindowClass.CreateStatusWindow;
begin
  StatusWindow := TForm.Create(nil);
  StatusBox := TRichEdit.Create(StatusWindow);
  StatusTextBox := TEdit.Create(StatusWindow);
  StatusWindow.FormStyle := fsMDIChild;
  StatusWindow.WindowState := wsMaximized;
  with StatusBox do
  begin
    Parent := StatusWindow;
    Left := 0;
    Top := 0;
    Width := StatusWindow.ClientWidth;
    Height := StatusWindow.ClientHeight - 22;
  end;
  with StatusTextBox do
  begin
    Parent := StatusWindow;
    Left := 0;
    Top := StatusBox.Height + 1;
    Width := StatusWindow.ClientWidth;
    Height := 21;
  end;
end;

kann mir jemand sagen wie ichs schneller hinbekomme? ich hab die exe mal im anhang, brauch man nur starten dann sieht man was ich meine...es sollte schon zum start maximiert sein

Pseudemys Nelsoni 12. Mai 2004 20:40

Re: Fenster zu langsam
 
^^^^^^^^

sCrAPt 12. Mai 2004 20:49

Re: Fenster zu langsam
 
EiEiEi... jetzt hab ich den falschen Thread genommen... Sorry... Kann gelöscht werden

:angle:, sCrAPt

Pseudemys Nelsoni 12. Mai 2004 20:53

Re: Fenster zu langsam
 
das is nur ne einmalige sache mit dem +1, das is nämlich die statusboxhöhe, also nur der startwert... darum gehts eigentlich ja nicht *g*. Es geht darum das das fenster(das mdi child) sich erst maximiert wenn das programm bereits offen ist, man siehts ja wie es sich maximiert, ich möchte es aber so haben das es beim start bereits maximiert ist

Pseudemys Nelsoni 12. Jun 2004 15:14

Re: Fenster zu langsam
 
weiss nun jemand eine antwort darauf? :mrgreen: bitte 8)

glkgereon 14. Jun 2004 18:55

Re: Fenster zu langsam
 
haste nicht ma versucht, einen nach dem anderen auszukommentieren, um rauszukriegen, an welchem befehl es liegt???

mach mal :wink:

phXql 14. Jun 2004 18:59

Re: Fenster zu langsam
 
@Pseudemys Nelsoni: bei mir is der code nich langsam. nimm mal das maximieren raus. oder stell bei deinem windows mal das animieren der fenster aus. ich habs aus, und bei mir is der code ncich langsam. ich schätze, dass das proggy solange an dem maximieren hängen bleibt...

Pseudemys Nelsoni 14. Jun 2004 20:55

Re: Fenster zu langsam
 
hallo phXql,

danke fürs testen, jo es liegt am maximieren, da ich nicht weiss wie man es bereits beim start maximiert haben kann :(

Shivan 14. Jun 2004 21:48

Re: Fenster zu langsam
 
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...


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