Kaygılarını anlıyorum, aslında ShowModal ile çağıran procedure sonlanana kadar FREE edilecek formdaki değerler korunacaktır ama şöyle başka bir alternatif önereyim o zaman.
Form2 kapandığında istediğiniz değerler topluca Form1'e taşınsın... Siz dilediğiniz zaman kullanın, form2 zaten kendini imha etmiştir.
Örneği şöyle çeşitlendirdik, formu direkt kapatırsanız hiçbir değer istenmeyecek, Onaylı Kapat butonuna basınca CLOSE edilirse bu değerler aktarılacak.
Örnek proje ekte...
Form1'de
tDegerler diye bir record tanımladım, Form2 içindeki veriler geri bununla dönecek...
Kod: Tümünü seç
var
Form1: TForm1;
Type
tDegerler = Record
aDeger,
bDeger : String;
cDeger : Integer;
end;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
YeniDeger : tDegerler;
begin
if NOT Assigned(Form2) then
Application.CreateForm( TForm2, Form2 );
Case Form2.ShowModal of
mrOk : begin
YeniDeger := Form2Degerler;
With YeniDeger do
ShowMessageFmt('OK ile kapandı...'#13'aDeger=%s, bDeger=%s, cDeger=%d', [ aDeger, bDeger, cDeger ]);
end;
mrCancel : ShowMessage('Cancel ile kapandı...');
End;
end;
From2'de ise şöyle gerçekleşiyor...( ana USES satırına Unit1 eklendi...)
Kod: Tümünü seç
var
Form2: TForm2;
Form2Degerler : tDegerler;
implementation
{$R *.dfm}
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
Close;
With Form2Degerler do begin
aDeger := 'Muharrem';
bDeger := 'ARMAN';
cDeger := 1234;
end;
Self.ModalResult := mrOk;
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action := caFree;
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
Form2 := Nil;
end;