Çalışma zamanında bir formdan başka bir form türetiyorum. Bu türettiğim forma isim veriyorum.
diğer formlardan, türettiğim bu forma erişim için form adını nasıl register edebilirim.
FOwnerForm := AOwnerForm.Create(Self);
bir değişken sadece bir adres tutabilir.
Tlist kullanabilirsin, yada dinamik array. Pointer tipinde, form olarak erişmek içinde TForm(değişken).xxx şeklinde erişebilirsin.
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak... Zoru başarırım, İmkansız zaman alır FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Merhaba,
İlginiz için teşekkür ederim Sayın Adminim.
Daha önceden pointer ile yapmayı denemiştim. Fakat projeme uygun olmadı.
frmAccounts formunu diyelimki 2 kez create ettim. Pointer ile referans tutunca hangi create ettiğim formun üzerindeki bir componente dışarıdan müdehale etmem gerektiğini bilemiyor ve ikisinede aynı işlemi yapıyor.
formun handle numarasından istediğim formun üzerindeki bileşene ulaşabiliyormuyum. yani handle numarası ... olan formun üzerindeki gridde şu işlemi yap gibi bir şey diyebiliyormuyum.
Mesela ekteki örnekde cari hesaplar browserında 2 kez ekle dedim ve 2 tane form açtım. sonra soldaki resimdeki özel kod butonuna tıklayıp yeni bir pencere açtım ve özel kodu seçtim. sadece ilgili forma yansıdı. dışardan create ettiğim forma müdehale etmekten kastım bu aslında.
En son Okann tarafından 18 Eki 2015 08:28 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Sana bir öneri; özel mesaj ile sormak yerine @freeman35'in söylediklerini örnek bir proje aç ve kodlar ile deneyerek uygula.
Yapamadığın yeri buradan o örnek proje üzerinden yeniden sor.
Yaptım dediğini aslında yapamadığını değerlendiriyorum.
Aşağıdaki kurguyu Dinamik Array ile senin için kurdum. En azından bu proje üzerinden denemelerini yap. Uygulamada başarılı olduğunu düşündüğün an gerçek projene ihtiyacın olanı uygularsın.
Var
xGlobalFormListesi : Array of TForm1;
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
iFormSay : Integer;
begin
iFormSay := High( xGlobalFormListesi ) - Low(xGlobalFormListesi) + 1;
SetLength( xGlobalFormListesi, iFormSay + 1 ); // Yeni form için ARRAY'de rezervasyon...
// zero based yani index 0'dan başlar.
xGlobalFormListesi[iFormSay] := TForm1.Create(nil);
With TForm1( xGlobalFormListesi[iFormSay] ) do
begin
Name := Format('ARMANForm_%.2d', [ iFormSay ]);
Caption := Name;
Show;
end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
Var
i : Integer;
begin
ComboBox1.Items.Clear;
for i := Low(xGlobalFormListesi) to High( xGlobalFormListesi ) do
ComboBox1.Items.Add( TForm1(xGlobalFormListesi[i]).Name );
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
Var
Edit : TEdit;
begin
Edit := TEdit( TForm1( xGlobalFormListesi[ComboBox1.ItemIndex] ).FindComponent('Edit1') );
Edit.Text := Edit.Text + IntToStr( Length( Edit.Text ) );
end;
Pointer(değişken[variable]) ve handle bunları öncelikle öğren. Class larla uğraşacaksan öncelikle ne olduğunu sonrasında yapılarını öğrenmen gerek. Form dediğinde TForm Class ı dır.
TxxxForm a public bir değişken ekle
Public
Tlist_id : Integer;
İster Tlist ten ister formun kendisinden TList teki pointer ına ulaşabilirsin. Yada kendi kurgunu yapabilirsin. Sana önemli tek tiyom, "TList.Delete()" sakın kullanma, yoksa index numaraların karışır, onun yerine "TList.Item[xxxxx] := Nil;" kullan. e tabi bunu yapmadan öncede formu free lemen gerektiğini söylememe gerek yoktur sanırım.
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak... Zoru başarırım, İmkansız zaman alır FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!