tanımlı olmayan bir formun içindeki procedure çalıştırmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
loribnaczo54
Üye
Mesajlar: 60
Kayıt: 24 Nis 2006 07:42
Konum: Bahçelievler/İst.

tanımlı olmayan bir formun içindeki procedure çalıştırmak

Mesaj gönderen loribnaczo54 »

arkadaşlar mrb;
bir formül unit' i geliştirdik ve bunu birçok formlardan çağırmak istiyoruz. ama bu unit içindeki fonksiyonlar çağırdığımız formun bir procedure den bilgi alması gerekiyor.
yani kısacası ben bu unit içinden tanımlı olmayan (form adi ni göndereceğim tabiki unite) bir formdaki procedure nasıl ulaşırım.
araştırmalarımda RegisterClass şeklinde forma ulaşabiliyorum fakat formun içindeki bir procedure "ulaşılanform.procedure" nasıl diyebilirim.

şimdilik;

Kod: Tümünü seç

 if tag=1 then form1.bilgiver(); 
 if tag=2 then form2.bilgiver(); 
 
bu şekilde hallediyorum, fakat bunun delphi' de daha profesyonel kullanım şekli olduğuna inanıyorum.

yardımlarınız için şimdiden teşekkür ederim.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: tanımlı olmayan bir formun içindeki procedure çalıştırmak

Mesaj gönderen aslangeri »

s.a.
bu uniti bir class olarak düzenleyin.
class a formdan çağıracağınız metod için bir özellik ekleyin.
ihtiyac duyduğunuz yerde de atama yaptığınız metodu çağırabilirsiniz.
isterseniz başlangıçta metod atama yerine TForm tipinde bir değişken atayın. onu kullanın.
classın constructor una tform tipinde bir parametre geçersiniz böylelikle sadece çağırdığınız formun fonksiyonunu kullanır.
eğer unit hakkında daha detaylı bilgi verebilirseniz (metodlar ,parametreleri ,diğer formlarla ilgili bağlantıları vs. ) class oluşturma konusunda yardımıcı olabilirim.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: tanımlı olmayan bir formun içindeki procedure çalıştırmak

Mesaj gönderen sabanakman »

Sorunun cevabı biraz da istenenin tam olarak ne olduğuna bağlı. Mesela bu ortak forma tıpkı bileşenlerin olaylarında (event) olduğu gibi prosedür tipli değişken tanımlayıp, çalıştırılacak prosedürün buraya atanması ve prosedürü bu değişkenden çalıştırmak sorunu giderebilir.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
loribnaczo54
Üye
Mesajlar: 60
Kayıt: 24 Nis 2006 07:42
Konum: Bahçelievler/İst.

Re: tanımlı olmayan bir formun içindeki procedure çalıştırmak

Mesaj gönderen loribnaczo54 »

aslangeri yazdı:s.a.
eğer unit hakkında daha detaylı bilgi verebilirseniz (metodlar ,parametreleri ,diğer formlarla ilgili bağlantıları vs. ) class oluşturma konusunda yardımıcı olabilirim.
kolay gelsin.
s.a. öncelikle cevaplarınız ve ilginiz için teşekkür ederim. anladığım kadarıyla bir kaç farklı methodla yapılabiliyor. ben uniti ve yapmak istediğimin bir özetini aşağıda sunayım. sizce hangi yolu izleyerek amacıma ulaşmalıyım, ve tabi nasıl yapmalıyım.

F_Recete Formundan formül giriliyor ve yorumlanmak üzere U_FormulHesap unitindeki

Kod: Tümünü seç

function Hesapla(formul:String):double;

fonksiyonunu çağırıyor. Mesela Formülümüz : "if(h001>10,h002,0) * h003" olsun.
Mevzuu burada başlıyor. fonksiyon h001,h002,ve h003 ün değerlerini ancak F_Recete formundan alabilir. bu sefer fonksiyon her h' lı kod bulduğunda gelen ihtiyaç duyulan formdaki F_Recete formundaki hKodSonuclari fonksiyonuna giderek buradan değerini alıyor. dolayısıyla burada atıyorum 10 tane formda formül sistemi için 10 tane if çekmem gerekiyor. buda benim beğendiğim bir yapı değil. daha önce forumda unit olmayan bir formu string olarak aratarak FindClass şeklinde formu create edebilme yolunu bulmuştum, ama create ettiğim formun içindeki bir nesneye veya en önemlisi içindeki bir prosedüre nasıl ulaşacağımı bilmiyorum.

teşekkür ederim.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: tanımlı olmayan bir formun içindeki procedure çalıştırmak

Mesaj gönderen aslangeri »

s.a.
anladığım kadarı ile birden fazla recete formu var.
her formda da h001, h002 gibi fonksiyonlar var ve bizim kullanacağımız fonksiyon çağrıldığı formdan bu değerleri almak durumunda.
belki şöyle bir yapı ilgini çeker.
birtane base form oluştur. base formunda hesapla fonksiyonunu protected olarak oluştur.
(private,public,protected ;)
fonksiyonda kullanacağın h001 h002 h003 içinde ikitane metod oluştur biri private biri protected
protected olanları "virtual;abstract;" olarak tanımla. private olanlardada protected olan metodları çağır.
daha sonra her formda protected olan metodları override et. ve base formdan gelen hesapla fonksiyonunu çağır.
kabaca şöyle olacak.

Kod: Tümünü seç

Type
TBaseForm:TForm
  private 
    function h001:string;
    function h001:string;
  protected
     function geth001:string;virtual;abstract;
     function geth002:string;virtual;abstract;
     function hesapla(formul:string):string;
End;
........
function TbaseForm.h001:string
begin
  result:=geth001;
end;
function TbaseForm.h002:string
begin
  result:=geth002;
end;
function hesapla(formul:string):string;
Begin
.....
//  burda h001 ve h002 fonksiyonları geth00X fonksiyonunu çağırıyorlar. o fonksiyonlarda hangi recete formunu kullanacaksak o formda yazılacaklar ve her form kendi h00X fonksiyonunu kullanacak.
end;
end;
base formumuzun yapısı kabaca bu şekilde olacak. (kodları web de yazdım sintaks hatası olabilir)
Recete formlarınıda base formdan türeteceğiz ve geth00X metodlarını override edeceğiz.

Kod: Tümünü seç

Type
  TF_Recete=class(TBaseForm)
  ......
  protected 
     function geth001:string;override;
     function geth002:string;override;
   ......
  end;

........

function TF_Recete.geth001:string;
begin
  //burda ilgili formun h001 i hespalama kısmı
end;
function TF_Recete.geth002:string;
begin
  //burda ilgili formun h002 i hespalama kısmı
end;
procedure TF_Recete.btnHesaplaClick(sender:TObject);
var
sonuc:string;
Begin  //hesapla metodu baseformda protected olarak tanımlı.
  sonuc:=hesapla('if(h001>10,h002,0) * h003');
  showmessage(sonuc);
End;

kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
loribnaczo54
Üye
Mesajlar: 60
Kayıt: 24 Nis 2006 07:42
Konum: Bahçelievler/İst.

Re: tanımlı olmayan bir formun içindeki procedure çalıştırmak

Mesaj gönderen loribnaczo54 »

s.a.
cevaplarınız için teşekkür ederim. aslangeri arkadaşımızın verdiği mantaletiyi uyguladım ve yapmak istediğimi başardım. class yapısını (master sınıf-çocuk sınıf) şimdi daha güzel anlıyorum. biraz araştırdıktan sonra bu yapıyı basitleştirerek anlatan bir makale buldum. sizlerle paylaşmak istedim.

http://mahirpc.blogcu.com/delphi-bilese ... 49411.html

Teşekkürler...
Cevapla