Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Aufbau von Forms verstecken (https://www.delphipraxis.net/199990-aufbau-von-forms-verstecken.html)

Int3g3r 8. Mär 2019 08:40

Aufbau von Forms verstecken
 
Guten Tag,

Wie ihr bereits sicher wisst, erstelle ich in einer Scrollbox mehrere Forms.
Dies dauert 2-5 Sekunden. Mein Ziel ist es nun den Aufbau der Forms zu verstecken.
Momentan sieht man wie die Forms aufgebaut werden und dies sieht nicht gerade schön aus.

Am besten wäre es wenn ich die Forms, die erstellt werden, unsichtbar erstellen(.create) könnte.
Ist dies möglich ? Wenn ja wie ?

Mein zweiter Ansatz wäre die Scrollbox auf .visible := false zu setzen.

Feundliche Grüsse
Int3g3r

Der schöne Günther 8. Mär 2019 09:21

AW: Aufbau von Forms verstecken
 
Statt die Wirkung zu bekämpfen könnte man auch an die Ursache gehen. Warum sollte es mehrere Sekunden dauern? Nimm einen Profiler, beim RAD Studio ist ja eine abgespeckte Version von AqTime schon dabei. Da kann er dir anzeigen welche Prozeduren die Zeit fressen.

Stevie 8. Mär 2019 12:17

AW: Aufbau von Forms verstecken
 
Forms erst bauen und dann auf die Scrollbox setzen.

peterbelow 9. Mär 2019 11:31

AW: Aufbau von Forms verstecken
 
Zitat:

Zitat von Int3g3r (Beitrag 1427305)
Guten Tag,

Wie ihr bereits sicher wisst, erstelle ich in einer Scrollbox mehrere Forms.
Dies dauert 2-5 Sekunden. Mein Ziel ist es nun den Aufbau der Forms zu verstecken.
Momentan sieht man wie die Forms aufgebaut werden und dies sieht nicht gerade schön aus.

Am besten wäre es wenn ich die Forms, die erstellt werden, unsichtbar erstellen(.create) könnte.
Ist dies möglich ? Wenn ja wie ?

Mein zweiter Ansatz wäre die Scrollbox auf .visible := false zu setzen.

Feundliche Grüsse
Int3g3r

Für ein Form ist die Visible-Property false by default, das Form wird erst angezeigt, wenn man Show oder showmodal aufruft, oder Visible auf true setzt (Ausnahme: MDI Childforms). Also erzeuge einfach erstmal alle Forms und speichere die Referenzen z. B. in einer TList (oder TList<TForm>). Erst wenn Du alle erzeugt hast gehst Du über die Liste und setzt für jedes Form den Parent auf die Scrollbox und Top und Left wie gewünscht. Wenn Du damit durch bist gehst Du nochmal über die Liste und setzt für die Forms Visible auf true.

Wenn das immer noch visuell unschön aussieht gibt es noch einen fiesen Trick:
Bevor Du die Parents der Forms auf die Scrollbox setzt erzeuge eine TPanel im Code, setze seine ParentBackground property auf false, BoundsRect auf die Boundsrect der Scrollbox, und, als letztes, den Parent auf den Parent der Scrollbox, gefolgt von panel.BringTofront (vermutlich nicht nötig). Dann komplettierst Du die Operationen mit den Forms und als letztes zerstörst Du das Panel. Da das Panel über der scrollbox liegt und sie abdeckt blockiert das alle sichtbaren Updates der scrollbox und deren Inhalt. Wenn aber alles quasi in einem Rutsch passiert (ohne die Möglichkeit, Paint-Messages zu verarbeiten) wird das Panel selbst auch nicht sichtbar gezeichnent.

Andreas L. 9. Mär 2019 11:51

AW: Aufbau von Forms verstecken
 
Zitat:

Zitat von peterbelow (Beitrag 1427378)
Also erzeuge einfach erstmal alle Forms und speichere die Referenzen z. B. in einer TList (oder TList<TForm>).

Vielleicht ist eine eigene Liste gar nicht nötig. TScreen.Forms[] enthält alle Forms der Anwendung. Mit TScreen.FormCount erhält man die Anzahl.

Folgender Code z. B. macht alle Forms sichtbar.

Delphi-Quellcode:
var
  FormIndex: Integer;
begin
  for FormIndex := 0 to Screen.FormCount - 1 do
  begin
    // Wenn nicht alle Forms der Anwendung sichtbar werden sollen,
    // kann man natürlich auch eine Abfrage einbauen:
    if Screen.Forms[FormIndex].Name = 'Form1' then
      Screen.Forms[FormIndex].Show;
    // In diesem Fall würde nur das Formular mit dem Namen
    // Form1 sichtbar werden.
  end;
end;

Bernhard Geyer 9. Mär 2019 12:31

AW: Aufbau von Forms verstecken
 
Erstelle die Formulare doch erst bei bedarf.
Ansonsten bringt DoubleBuffer := True auch öfter mal sehr gute Verbesserungen.

EmWieMichael 9. Mär 2019 17:36

AW: Aufbau von Forms verstecken
 
Ich nehme an, dass Deine SQL-Abfragen noch im OnShow stehen? Wenn ja: Würde ich nicht machen, sondern die Abfragen in eine Public-Routine packen, die dann vor dem Form.Show ausgeführt wird.
Also: Create...DoSQL...Show. Du könntest natürlich auch erstmal auf Show verzichten, bis alle Forms der Scrollbox mit ihrem DoSQL fertig sind, und dann erst Show ausführen.


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