Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wann wird eine Form angezeigt ? (https://www.delphipraxis.net/195775-wann-wird-eine-form-angezeigt.html)

H.Bothur 24. Mär 2018 13:15

Delphi-Version: 10.1 Berlin

Wann wird eine Form angezeigt ?
 
Moin,

ich stehe mal wieder vollkommen auf dem Schlauch:

Ich habe ein Programm das automatisch - also ohne Start-Button oä. - bei Form.Show abläuft. Wann bzw. wie kann ich denn während des Programmlaufes die Form anzeigen ??

Ich habe mal ein Textprogramm erstellt - nur die Form, darauf ein Label und eine Textdatei mit 20.000 Zeilen.
Ich merke auch das das Programm ausgeführt wird, es ist aber nicht sichtbar.

Gruss
Hans

Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var
  ArtikelString: TStringList;
  Zeile: String;
  i, j: Integer;
begin
  ArtikelString := TStringList.Create;
  ArtikelString.LoadFromFile('d:\temp\test\artikelliste.csv');
  for j := 1 to 10 do
  begin
    for i := 0 to ArtikelString.Count -1 do
    begin
      Zeile := ArtikelString.Strings[i];
      Form1.Label1.Caption := Copy(Zeile, 1, 12);
      Form1.Label1.Refresh;
    end;
  end;
  ArtikelString.Free;
  Application.Terminate;
end;

end.

mkinzler 24. Mär 2018 13:19

AW: Wann wird eine Form angezeigt ?
 
Nach Vorbereitung -> Selbstmord

Zitat:

Delphi-Quellcode:
  Application.Terminate;


H.Bothur 24. Mär 2018 13:27

AW: Wann wird eine Form angezeigt ?
 
Zitat:

Zitat von mkinzler (Beitrag 1397155)
Nach Vorbereitung -> Selbstmord

Zitat:

Delphi-Quellcode:
  Application.Terminate;


Ist es - erklärt aber nicht warum in der Zwischenzeit nichts angezeigt wird. :_(

mkinzler 24. Mär 2018 13:38

AW: Wann wird eine Form angezeigt ?
 
Weil Form.Show vor dem Anzeigen ausgeführt wird.

Und auch wenn die Form sichtbar wäre, wäre ja wenig sichtbar

günni0 24. Mär 2018 13:56

AW: Wann wird eine Form angezeigt ?
 
Dein Problem kann man schön mit WMFormVisible lösen

Delphi-Quellcode:
const
 WM_FORM_VISIBLE = WM_USER + 1;

private
 FormInitialised: Boolean;
 procedure WMFormVisible(var msg: TMessage); message WM_FORM_VISIBLE;
end;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
 FormInitialised := False;
end;

procedure TForm1.WMFormVisible(var msg: TMessage);
begin
 if not FormInitialised then
  begin
   FormInitialised := True;
   
   Code hier rein
  end;
end;

Bernhard Geyer 24. Mär 2018 14:51

AW: Wann wird eine Form angezeigt ?
 
Zitat:

Zitat von mkinzler (Beitrag 1397157)
Weil Form.Show vor dem Anzeigen ausgeführt wird.

Könnte man evtl. auch sagen das das OnShow-Event die letzte Aktion vor dem Anzeigen des Formulares ist.

mkinzler 24. Mär 2018 14:54

AW: Wann wird eine Form angezeigt ?
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1397159)
Zitat:

Zitat von mkinzler (Beitrag 1397157)
Weil Form.Show vor dem Anzeigen ausgeführt wird.

Könnte man evtl. auch sagen das das OnShow-Event die letzte Aktion vor dem Anzeigen des Formulares ist.

Das wollte ich damit ausdrücken

H.Bothur 24. Mär 2018 16:01

AW: Wann wird eine Form angezeigt ?
 
Zitat:

Zitat von günni0 (Beitrag 1397158)
Dein Problem kann man schön mit WMFormVisible lösen

Das bekomme ich komischerweise nicht kompiliert ... Delphi (10.1) meckert bei

"message WM_FORM_VISIBLE;"
Undeklarierter Bezeichner "WM_FORM_VISIBLE"

Gruß
Hans

H.Bothur 24. Mär 2018 16:04

AW: Wann wird eine Form angezeigt ?
 
Zitat:

Zitat von mkinzler (Beitrag 1397157)
Weil Form.Show vor dem Anzeigen ausgeführt wird.

Aber ... welches Ereignis kommt den wenn die Form wirklich zum ersten Mal sichtbar ist ?

Zitat:

Und auch wenn die Form sichtbar wäre, wäre ja wenig sichtbar
In dem Beispiel nicht viel - das stimmt :-D

Hans

Delphi.Narium 24. Mär 2018 16:15

AW: Wann wird eine Form angezeigt ?
 
Gehen wir davon aus, dass das Formular momentan so aufgerufen wird:
Delphi-Quellcode:
procedure TMainForm.Button1Click(Sender: TObject);
begin
  Form1.Show;
end;
Dann könnte man den Aufruf dahingehend ändern:
Delphi-Quellcode:
procedure TMainForm.Button1Click(Sender: TObject);
begin
  Form1.Show;
  Form1.DoSomething; // Diese Methode enthält den Inhalt des jetzigen OnShow-Ereignisses.
  Close;
end;
Delphi-Quellcode:
procedure TForm1.DoSomething;
var
  ArtikelString: TStringList;
  Zeile: String;
  i, j: Integer;
begin
  ArtikelString := TStringList.Create;
  ArtikelString.LoadFromFile('d:\temp\test\artikelliste.csv');
  for j := 1 to 10 do
  begin
    for i := 0 to ArtikelString.Count -1 do
    begin
      Zeile := ArtikelString.Strings[i];
      Form1.Label1.Caption := Copy(Zeile, 1, 12);
      Form1.Label1.Refresh;
    end;
  end;
  ArtikelString.Free;
  Close;
end;
Eventuell könntest Du uns aber auch mal die Stelle in Deinem Quelltext zeigen, an der Form1 angezeigt werden soll. Was passiert da vorher noch so alles?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:01 Uhr.
Seite 1 von 3  1 23      

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