Fonksiyonların form kontrollerine erişmesi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
RC1
Üye
Mesajlar: 9
Kayıt: 30 Eyl 2007 10:31

Fonksiyonların form kontrollerine erişmesi

Mesaj gönderen RC1 »

Mehaba arkadaşlar;

Delphi'de diğer dillerdeki gibi (bkz. Vb.net) fonksiyonlardan direk olarak form
kontrollerine erişemiyorum

örneğin;

Kod: Tümünü seç

function listele(kategori:string):string;
begin
listbox.items.add('blablabla');
return blabla
end;
gibi bir fonksiyon (form'un var kısmında tanıtılmış) bu şekilde çalıştırılmaya kalkıldığında delphi hata verip çalıştırmıyor.Bunun için şöyle bişi buldum

Kod: Tümünü seç

function Tformadi.listele(kategori:string):string;
begin
listbox.items.add('blablabla');
return blabla
end;
fonksyion adını bu şekilde yazınca vede üsteki var tanımlamasında

Kod: Tümünü seç

function listele(kategori:string):string;
şeklinde tanıtınca çalıştırabiliyorum fakat sorun şurda başlıyor.Örneğin başka bir unit deki fonksiyonlardan yada başka bir unitin içinde tutulan class'dan erişim işine gelince bunu yapamıyorum.

Bu sorunu çözmek için bir yöntem varmı ?
Kullanıcı avatarı
macicek
Üye
Mesajlar: 13
Kayıt: 04 Eki 2007 11:44
Konum: K.K.T.C

Mesaj gönderen macicek »

Varsayalim bir formun olsun.bu formunda da bir butonun.biz baska bir unitteki
classtan bu formdaki butona erisip Caption degerini geri dondurecegiz.Diyelimki formun unitinin ismi UntFrom,form classin TMyForm ve formun butonuna ulasacagimiz classin bulundugu unitin ismide UntMyClass olsun.oncelikle UntMyClass'in uses kismina UntForm yani formun bulundugu uniti yazmalisin..Ornek TMyClass kodu:

Kod: Tümünü seç

type 
TMyClass = class
   function ButonaEris(frm:TMyForm):string;   
end;

function TMyClass.ButonaEris(frm: TMyForm): string;
begin
  result :=  frm.Button1.Caption;
end;
Daha sonra UntForm unitinin uses kismina UntMyClass ekledikten sonra
asagidaki kod gibi botonun captionina ulasabilirsin

Kod: Tümünü seç

procedure TMyForm.Button1Click(Sender: TObject);
var
  myClass : TMyClass;
begin
  myClass := TMyClass.Create;
  ShowMessage(myClass.ButonaEris(Self));
  FreeAndNil(myClass); 
end;
umarim anlatabilmisimdir.iyi calismalar
Ne yüksek bir zeka ne büyük hayal gücü Her ikisi de insani dahi yapamaz.Deha'nın ruhu sevgidir,sevgidir ve yine sevgidir.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
arkadaşım senin problemin yazdığın prosedür/fonksiyonda ulaşmak istediğin formu belirtmemen.
bir unit te fonksiyon tanımladığın zaman nerde tanımladığına dikkat et..

Kod: Tümünü seç

procedure hebelehubele;
Begin
   listbox1.....//bu şekilde ulaşamazsın..
   form1.listbox1.....//bu şekilde ulaşırsın
End;
bu prosedürü private veya public bir yerde tanımlarsan kod şu şekilde olur

Kod: Tümünü seç

procedure tform1.hebelehubele;
begin
  listbox1....//bu sefer çalışır
  form1.listbox1..../buda çalışır
end;
başka bi formdaki nesneye erişmek istersen implementation kısmından sonraki uses kısmına o formun bulunduğu unitin adını yazman lazım

Kod: Tümünü seç

implementation
uses unit2;
//bu procedure private yada publicde tanıtılmış
procedure TForm1.hebelehubele;
begin
  listbox1.....//private yada publicde tanıtıldığı için çalışır
  Form1.listbox1....//private yada publicde tanıtılmasada çalışır
  Form2.listbox1...//uses satırına unit2 yazdığımız için çalışır... eğer uses e unit 2 yazmadıysak burda (büyük ihtimalle) form2 yi kullanmışsın o unit2nin içinde usese ekleyimmi tarzında bi soru sorar yes dersen kendisi uses kısmına unit2 yi ekler...
end;
kolay gelsin.
end;
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
RC1
Üye
Mesajlar: 9
Kayıt: 30 Eyl 2007 10:31

Mesaj gönderen RC1 »

Teşekkürler arkadaşlar

implementation'dan önceki uses ile sonrdaki uses arasında ne fark var ?

örneğin a formundan b formunu implementation dan önceki uses'de belirtebilirken b formundan a formunuda implementation'dan önceki uses'de belirtince hata veriyor delphi bu yüzden implementation'dan sonraki uses'de belirtiyordum.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
projende kullandığın unitleri implementation dan sonraki uses e ekle.
delphinin kendi unitlerini, yüklediğin comp. lerin unitlerinide interface den sonraki uses e ekle.
sebebi derleme ile alakalı...
derleme sırasında uses satırındaki unitleri kontorl ediyor. birbirinii çağıran iki unit olduğu zaman sonsuz döngüye girer. onun için iki adet uses var. birinde derlenmiş dosyaya bakıyor birindekini derliyor..
yanlış veya eksik varsa arkadaşlar düzeltirler.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla