Runtime da evet atamada sorun

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ssteeltr
Üye
Mesajlar: 135
Kayıt: 08 Nis 2005 03:41
Konum: Kayseri

Runtime da evet atamada sorun

Mesaj gönderen ssteeltr »

Kod: Tümünü seç

  public
    { Public declarations }
    Procedure Clic(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
var
le:array[1..10] of TObject;
i,ii:integer;


procedure TForm1.Button1Click(Sender: TObject);
begin
  for i:=1 to strtoint(edit1.Text) do
  begin
    //le[i]:=TObject.Create;
    le[i]:=TEdit.Create(nil);
    (le[i] as Tedit).Parent:=panel1;
    (le[i] as Tedit).Top:=-20+30*i;
    (le[i] as Tedit).Left:=5;
    (le[i] as Tedit).Text:='deneme';
    (le[i] as Tedit).onClick:=Clic;
  end;
end;



procedure TForm1.Clic(Sender: TObject);
begin
  showmessage('asfasf');
end;

Arkadaşlar yukarıdaki kod sorunsuz çalışıyor edit create edilince onclick olayında sorun olmadan işlem gerçekleşiyor.

ancak benim istediğim şu şekilde bir atama

Kod: Tümünü seç

 Procedure Clic(Sender: TObject;Mesaj:string); //böyle bir procedure atıfta bulunmak

(le[i] as Tedit).onClick:=Clic('Mesajım'); //yazarsam 
[Error] Unit1.pas(49): Incompatible types: 'TObject' and 'String' hatası veriyor

aceba run time da bir nesnenin herhangi bir olayına paramatreli bir procedure nasıl atarım.

saygılarımla.
Süleyman Çelik
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Runtime da evet atamada sorun

Mesaj gönderen unicorn64 »

Clic prosedürünün tanımında sadece Tobject türünden parametre alabileceği tanımlanmış.

Kod: Tümünü seç

Procedure Clic(Sender: TObject;Mesaj:string); //böyle bir procedure atıfta bulunmak
böyle bir tanımlama yokki ortada...


Kod: Tümünü seç

(le[i] as Tedit).onClick:=Clic('Mesajım'); 
burada ise Tobject olarak tanımlanmış olan parametre için string değer göndermeye çalışmışsınız... doğal olarak hata veriyor...

belki Click olayını override ederek bu yapılabilir ama emin değilim.
bu durumda Tedit sınıfından türeyen bir sınıf tanımlayıp OnClick eventini override etmek gerekir ama OnClickin yapısı ona uygun mu bilemiyorum
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
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: Runtime da evet atamada sorun

Mesaj gönderen sabanakman »

onClik TNotifyEvent tiplidir ve bu da Tobject tipli tek değişkeni parametre olarak alır. Bunu TEdit için değiştiremezsin. Hangi edit bileşenine tıklandığını bulmak için aşağıdaki gibi bir kullanıma gidebilirsin.

Kod: Tümünü seç

procedure TForm1.Clic(Sender: TObject);
begin
  if Sender is TEdit then with TEdit(Sender) do begin
    ShowMessage(Name);//<-tıklanan Edit bileşeninin ismi çıkar.
  end;
end;
İyi çalışmalar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla