Merhaba,
Elimde 2 adet form var. Bunlardan bir tanesi diğeri üzerinden açılıyor. Açılan alt form duruma göre Ana formdaki bazı rutinlerini çalıştırıyor. Fakat Ana Form kapatmış olabilir.
Ben alt formdan Ana formun hala kullanılabilir yaşayan bir form ise bu rutini çağırmak istiyorum. Aksi durumda olmayan bir nesne içindeki rutini çağırmış olacağım ve hata alacağım.
Formları dinamik olarak create ediyorum. Herhangi bir değişkende instance tutmuyorum. Açılan her form kendisini biliyor ve varsa Owner ve ParentForm bilgisini biliyor.
Anlatmak adına basit kod örneği aşağıdadır.
Elimde 2 adet form var. Bunlardan bir tanesi diğeri üzerinden açılıyor. Açılan alt form duruma göre Ana formdaki bazı rutinlerini çalıştırıyor. Fakat Ana Form kapatmış olabilir.
Ben alt formdan Ana formun hala kullanılabilir yaşayan bir form ise bu rutini çağırmak istiyorum. Aksi durumda olmayan bir nesne içindeki rutini çağırmış olacağım ve hata alacağım.
Formları dinamik olarak create ediyorum. Herhangi bir değişkende instance tutmuyorum. Açılan her form kendisini biliyor ve varsa Owner ve ParentForm bilgisini biliyor.
Anlatmak adına basit kod örneği aşağıdadır.
unit uFormAna;//main form unit
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls, Unit3;
type
TFormAna = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
public
procedure Msg();
end;
implementation
{$R *.dfm}
procedure TFormAna.Button1Click(Sender: TObject);
begin
TFormAlt.Create(nil, Self).Show; //create child form and show
end;
procedure TFormAna.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree; //destroy main form
end;
procedure TFormAna.Msg;
begin
ShowMessage('Message from Main Form'); //show message in main form
end;
end.
unit uFormAlt; //child form unit
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type
TFormAlt = class(TForm)
procedure FormDestroy(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
public
FParentForm: TForm;
constructor Create(AOwner: TComponent; AParentForm: TForm); reintroduce; overload; virtual;
end;
implementation
uses uFormAna;
{$R *.dfm}
constructor TFormAlt.Create(AOwner: TComponent; AParentForm: TForm);
begin
inherited Create(AOwner);
FParentForm := AParentForm; //main form value
end;
procedure TFormAlt.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree; //destroy child form
end;
procedure TFormAlt.FormDestroy(Sender: TObject);
begin
if Assigned(FParentForm) then //if main form is useable call msg routine
TFormAna(FParentForm).Msg;
end;
end.
PostgreSQL - Linux - Delphi, Poliüretan



