Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
[ÇÖZÜLDÜ - SOLVED] Owner - Parent Form nasıl kullanılmalı?
#11
Destroy metodu çağrılmış bir formun propertylerine erişmek büyük riskler barındırır bence. kontrol edilen değerlerin her zaman beklenen değerleri verme garantisi olmayabilir. Bu nedenle daha sağlıklı bir yöntem bulunsa iyi olur düşüncesindeyim.
WWW
Cevapla
#12
Bu yöntem destroy edilmiş bir nesnenin özelliğine erişmediği için daha güvenli bir yol olabilir.


unit UnitBirincil;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TfrmBirinci = class(TForm)
    Label1: TLabel;
    btnShowIkinciForm: TButton;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btnShowIkinciFormClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
  procedure setMsg();
    { Public declarations }
  end;

var
  frmBirinci: TfrmBirinci;

implementation

uses UnitIkincil;

{$R *.dfm}

procedure TfrmBirinci.btnShowIkinciFormClick(Sender: TObject);
var
instanceIkinciForm:TfrmIkinci;
begin
instanceIkinciForm             := TfrmIkinci.Create(nil);
instanceIkinciForm.pFrmBirinci := self;
instanceIkinciForm.Show;
end;

procedure TfrmBirinci.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;

procedure TfrmBirinci.FormDestroy(Sender: TObject);
var
  I: Integer;
begin
for I := 0 to Screen.FormCount - 1 do
begin
  if (Screen.Forms[i] is TfrmIkinci) then
     if TfrmIkinci(Screen.Forms[i]).pFrmBirinci = self then
        TfrmIkinci(Screen.Forms[i]).pFrmBirinci := nil;
end;
end;

procedure TfrmBirinci.setMsg;
begin
Caption := DateTimeToStr(now);
end;

end.



unit UnitIkincil;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,UnitBirincil;

type
  TfrmIkinci = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
  pFrmBirinci : Pointer;
    { Public declarations }
  end;

var
  frmIkinci: TfrmIkinci;

implementation

{$R *.dfm}

procedure TfrmIkinci.Button1Click(Sender: TObject);
begin
close
end;

procedure TfrmIkinci.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action := caFree;
end;

procedure TfrmIkinci.FormDestroy(Sender: TObject);
begin
  if (Assigned(pFrmBirinci)) and (pFrmBirinci <> nil) then
  begin
    TfrmBirinci(pFrmBirinci).setMsg;
  end;
end;

end.

WWW
Cevapla
#13
@sadettinpolat,  @Tuğrul HELVACI üstadın da bildirdiği şekilde; anaformdan "ben yok oldum" bilgisini mevcut create edilmiş alt forumlara bildirme şekli evet oldukça güvenli.

@3ddark'ın da bildirdiği handleallocated metodu da geçerli ve iş görüyor. 

Sadece herşeyin yazılımcıjın kontrolünde ve bilgisi altında olması ilkesi açısından sizinkilere kesinlikle katılıyorum.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  AdoQuery ile ilgili bir sorun. (Çözüldü) Bay_Y 4 77 Dün, Saat: 10:58
Son Yorum: Bay_Y
  Fastreport İçindekiler Sayfası Oluşturma [ÇÖZÜLDÜ] bydelphi 1 236 18-03-2024, Saat: 12:11
Son Yorum: bydelphi
  Çok Satırlı Filtreleme [Çözüldü] bünyamin68 12 1.351 14-02-2024, Saat: 22:42
Son Yorum: mustafaozpinar
  [ÇÖZÜLDÜ] macos işletim sistemine program yazmak shooterman 5 512 02-02-2024, Saat: 09:54
Son Yorum: shooterman
  COZULDU veritabani prg yerine ne kullanabilirim. sadikacar60 8 773 29-01-2024, Saat: 18:41
Son Yorum: sadikacar60



Konuyu Okuyanlar: 1 Ziyaretçi