program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3};
{$R *.res}
procedure SetAsMainForm(aForm:TForm);
var
P:Pointer;
begin
P := @Application.Mainform;
Pointer(P^) := aForm;
end;
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
if Paramstr(1) = 'Param1' then
SetAsMainForm(Form2);
if Paramstr(1) = 'Param2' then
SetAsMainForm(Form3);
Application.Run;
end.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.
Bildiğimiz üzere ana form kapandığı zaman uygulamamız otomatik olarak sonlandırılıyor. Örnekte daha değişik bir amaçta kullanılmış ama ben şöyle bir durumda kullanıyorum. Eğer bir form kapandığı zaman programın sonlanması gerekiyorsa bu şekilde ana formu istediğim form olarak ayarlayıp programın sonlanmasını sağlıyorum. Daha somut bir örnek olarak programın açılışında kullanıcı adı ve şifre sorduğumuz bir formumuz var. Eğer kullanıcı bu pencerede Vazgeç düğmesine basarsa programın sonlanması gerekiyor ama (forma frmLogin diyelim) frmLogin ana form olmadığı için bu formun kapanmasıyla birlikte uygulama sonlanmıyor. Bu işi frmAna (ana formumuz) formunda postmessage gibi yöntemlerle manuel olarak kendimiz yapıyoruz. Bu yöntemle frmLogin ana form haline getiriliyor eğer kullanıcı adı ve şifresi yanlış girilirse veya vazgeç düğmesine tıklanırsa uygulama sonlanıyor aksi takdirde ana form tekrar frmAna yapılıp uygulama normal akışıyla devam ediyor.
Bu tür bir işlem yapmak için çeşitli yollar var ama bu yöntem daha sağlam duruyor gibi bence + bu yöntemin kullanılabileceği bir kaç durum daha geliyor aklıma ama sonuç olarak şöyle özetleyebiliriz. Bazı istisna durumlarda ana formun haricinde her hangi bir formun kapatılmasıyla programın sonlanmasını istiyorsak bu yöntemi kullanabiliriz.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {frmMain},
Unit2 in 'Unit2.pas' {frmLogin};
{$R *.res}
procedure SetAsMainForm(aForm:TForm);
var
P:Pointer;
begin
P := @Application.Mainform;
Pointer(P^) := aForm;
end;
begin
Application.Initialize;
Application.CreateForm(TfrmMain, frmMain);
Application.CreateForm(TfrmLogin, frmLogin);
SetAsMainForm(frmLogin);
if frmLogin.ShowModal = 1(*mrOK*) Then
Application.Run;
end.
procedure TfrmLogin.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if ModalResult = mrOk Then
SetAsMainForm(frmMain);
end;
procedure TfrmLogin.Button1Click(Sender: TObject);
begin
ModalResult := mrOk;
end;
procedure TfrmLogin.Button2Click(Sender: TObject);
begin
ModalResult := mrCancel;
end;
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.
Açııklamaların için sağol hocam ,
daha detaylı yazmanı istememin sebebi ben de şifre formu falan aklıma gelmişti. Şifre formunda ben de Muharrem hocamın dediği gibi yapıyorum.