Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

DeddyH 24. Mär 2018 16:18

AW: Wann wird eine Form angezeigt ?
 
Man könnte das auch mit einer eigenen Message lösen, die man sich selbst schickt (aber nicht SendMessage, sondern PostMessage benutzen). Die wird dann abgearbeitet, wenn alle anderen Messages davor durch sind.

günni0 24. Mär 2018 16:31

AW: Wann wird eine Form angezeigt ?
 
Zitat:

Zitat von H.Bothur (Beitrag 1397162)
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

Irgendwo deklarieren
Delphi-Quellcode:
const
 WM_FORM_VISIBLE = WM_USER + 1;

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

AW: Wann wird eine Form angezeigt ?
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1397164)
Gehen wir davon aus, dass das Formular momentan so aufgerufen wird:
Delphi-Quellcode:
procedure TMainForm.Button1Click(Sender: TObject);
begin
  Form1.Show;
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?

nein - die Form ist ja die Mainform des Programmes - sprich das Programm soll vollautomatisch ablaufen und nur eben während die Daten verarbeitet werden einen Status anzeigen - und sich dann eben auch selber wieder beenden.

Das ist übrigens (fast) der komplette Code, der Rest ist der Delphi-Standard:

Delphi-Quellcode:
unit TestUnit;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormShow(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

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, 9);
      Form1.Label1.Refresh;
    end;
  end;
  ArtikelString.Free;
  Application.Terminate;
end;

end.
Hans

haentschman 24. Mär 2018 16:35

AW: Wann wird eine Form angezeigt ?
 
Moin...:P
Zitat:

Man könnte das auch mit einer eigenen Message lösen
...genau. :wink:
Delphi-Quellcode:
const
  WM_AFTERSHOW = WM_USER + 100;
...
procedure FormAfterShow(var Msg: TMessage); message WM_AFTERSHOW;
...
procedure TfoMain.FormAfterShow(var Msg: TMessage);
begin
  // das ist dann sichtbar...
end;

günni0 24. Mär 2018 16:36

AW: Wann wird eine Form angezeigt ?
 
Zitat:

Zitat von haentschman (Beitrag 1397168)
Moin...:P
Zitat:

Man könnte das auch mit einer eigenen Message lösen
...genau. :wink:
Delphi-Quellcode:
const
  WM_AFTERSHOW = WM_USER + 100;
...
procedure FormAfterShow(var Msg: TMessage); message WM_AFTERSHOW;
...
procedure TfoMain.FormAfterShow(var Msg: TMessage);
begin
  // das ist dann sichtbar...
end;

Genau wie ich oben schon erklärt habe.

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

AW: Wann wird eine Form angezeigt ?
 
Zitat:

Zitat von günni0 (Beitrag 1397166)

Irgendwo deklarieren
Delphi-Quellcode:
const
 WM_FORM_VISIBLE = WM_USER + 1;

Danke - da war ich gerade Blind ... ich dachte das wäre irgendeine feste Systemkonstante aus einer Unit.
Jetzt klappt es wunderbar :_)

Hans

hoika 24. Mär 2018 16:50

AW: Wann wird eine Form angezeigt ?
 
Hallo,
warum nimmst Du nicht FormActivate?

Und dort als letzte Zeile
PostMessage(Handle, WM_CLOSE, 0, 0);

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

AW: Wann wird eine Form angezeigt ?
 
Wenn Form1 das Hauptformular ist, kann man das Problem doch in der DPR lösen:

Man entferne dort die Zeile
Delphi-Quellcode:
Application.Run;
und füge statt dessen dort ein:
Delphi-Quellcode:
  Form1.Show;
  Form1.DoSomething;
Das Close in DoSomething führt dazu, dass das Programm beendet wird. Man muss es dann nicht per Selbstmord über
Delphi-Quellcode:
Application.Terminate;
beenden.
Eventuell vorhandene OnClose-Ereignisse werden dann auch noch korrekt verarbeitet.

H.Bothur 24. Mär 2018 17:30

AW: Wann wird eine Form angezeigt ?
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1397172)
Wenn Form1 das Hauptformular ist, kann man das Problem doch in der DPR lösen:

DANKE !! Das ist imho eine schöne und elegante Lösung !!

Gruß
Hans

KodeZwerg 24. Mär 2018 19:35

AW: Wann wird eine Form angezeigt ?
 
Steig lieber auf eine ProgressBar Anzeige um, ein Panel was sich bei jedem Wechsel umbenennt verzögert die abarbeitung.
Besser eine Anzeige per Bar, das Max ist die Menge der Daten, bei unbekannt viel Daten halt Marquee Effekt und alle paar (10'er/50'er/100'er?) Schritte mal den Anwender informieren das was verarbeitet wurde. Nur so am Rande meine 2 Cent.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 Uhr.
Seite 2 von 3     12 3      

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