Hallo,
ich habe in einem Projekt einen eigenartigen Fehler. Beim Programmstart wird ein About-Fenster angezeigt, im OnShow-Ereignis des Hauptformulars Daten ausgewertet und das Ergebis in einem Dialog-Formular angezeigt. Dieses wird aber zusammen mit dem About-Fenster wieder geschlossen.
Zur Verdeutlichung hier folgender Beispielcode:
Delphi-Quellcode:
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit4 in 'Unit4.pas' {Form4};
{$R *.res}
begin
Form4 := TForm4.Create(Application);
Form4.Show;
Form4.Update;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Hauptformular:
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 =
class(TForm)
Button1: TButton;
procedure FormShow(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
Showmessage('
Test');
// wird zusammen mit Form4 beendet !?!? Wieso?
end;
end.
About-Formular:
Delphi-Quellcode:
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm4 =
class(TForm)
Timer1: TTimer;
// schliesst nach 1 sek. das Formular wieder.
Label1: TLabel;
procedure Timer1Timer(Sender: TObject);
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form4: TForm4;
implementation
{$R *.dfm}
procedure TForm4.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TForm4.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
close;
end;
end.
Warum wird ShowMessage in TForm1 beim Schliessen von TForm4 auch geschlossen?
Wenn "Action := caFree; " in TForm4 auskommentiert wird, funktioniert es wie gewünscht.
Aber das Formular muß doch freigegeben werden! Oder?
Kann mir das jemand erklären?
Gruß Klaus