Sender parametresi ile ilgili

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
kahraman1285
Üye
Mesajlar: 360
Kayıt: 10 Nis 2006 09:07

Sender parametresi ile ilgili

Mesaj gönderen kahraman1285 »

Mrb arkadaşlar.

Run time oluşturduğum label'ların hepsine aynı onclick özelliği verdim.label'ların birine tıklandığında onclick eventine hangisinden tıklama yapıldığını nasıl anlarım?

Kod: Tümünü seç

var metin:tlabel;
sira:integer;

metin:=tlabel.create(self);
metin.onclick:=Benim_onclick;

Kod: Tümünü seç

 var burdangeldi:string;
BurdanGeldi:= (sender as tlabel).name; ///burda hata veriyor
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Denediğin kodu tam yazsaydın hatanı söyleyebilirdik...

- En basit hali aşağıdaki şekildedir.

Kod: Tümünü seç

procedure TForm1.FormCreate(Sender: TObject);
Var
  sira  : integer;
  metin : tlabel; // Uses StdCtrls
begin
  for sira := 0 to 9 do begin
    metin  := tlabel.create(self);
    metin.Parent := Self;
    metin.Left := 10;
    metin.Top  := 15 * sira;
    metin.Caption := 'metin-' + IntToStr( sira );
    metin.Name    := 'metin_' + IntToStr( sira );
    metin.onclick := Benim_onclick;
  end;
end;

Kod: Tümünü seç

procedure TForm1.Benim_OnClick(Sender:TObject);
var
  burdangeldi:string;
begin
  BurdanGeldi:= (sender as tlabel).name; ///burda hata veriyor
  ShowMessage(BurdanGeldi);
end;
Resim
Resim ....Resim
kahraman1285
Üye
Mesajlar: 360
Kayıt: 10 Nis 2006 09:07

Mesaj gönderen kahraman1285 »

kullandığım kod tam olarak şöyle;

Kod: Tümünü seç

procedure TAnaSayfa.MetinEkleCreate(sender:tobject);
var
Metin:TcxLabel;
Adi:String;
begin
adi:='Metin'+inttostr(metinsira);
metin:=Tcxlabel.Create(self);
metin.Parent:=anasayfa;
metin.Name:=adi;
metin.AutoSize:=false;
metin.Left:=basx;
metin.Top:=basy;
metin.Width:=bitx;
metin.Height:=bity;
metin.Visible:=true;
metin.Tag:=MetinSira;
metinsira:=metinsira+1;
metinyaz:=false;
metin.OnClick:=MetinOnClick;
metin.Style.Color:=clWhite;
anasayfa.Cursor:=crDefault;
SeciliMetinAdi:=Metin.Name;
AnaSayfa.Cursor:=crDefault;

Kod: Tümünü seç

procedure TAnaSayfa.MetinOnClick(sender: tobject);
var secilimetinadi:string;(global değişken)
begin

SeciliMetinAdi:=(sender as tcxlabel).Name;;
soldan:=(sender as tcxlabel).Left;
Yukardan:=(sender as tcxlabel).Top;
Yukseklik:=(sender as tcxlabel).Height;
Genislik:=(sender as tcxlabel).Width;

cxlabel2.Caption:=SeciliMetinAdi;
end;

Kod: Tümünü seç

"invalid class typecast hatası" alıyorum şu satırda
SeciliMetinAdi:=(sender as tcxlabel).Name;;
bi türlü işin içinden çıkamadım
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

SeciliMetinAdi:=(sender as tcxlabel).Name; kodundan önce şunu yazarak sender'in tipini görmen gerek. Sender anlaşılan TcxLabel değil:

Kod: Tümünü seç

ShowMessage(Sender.ClassName);
İyi çalışmalar.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

kahraman1285 yazdı:var secilimetinadi:string;(global değişken)
Muhtemelen aynı secilimetinadi isminde form üzerinde bir bileşen var ve sen bu atamayı yapınca ona atama yaptığını sanarak bu hata oluşuyor. Düzeltmesi ise pas dosyanın ilk satırındaki unit adını kullanmak. Mesela unit Unit1;isimli unitin olsun o zaman:

Kod: Tümünü seç

unit1.SeciliMetinAdi:=(sender as tcxlabel).Name;
şeklinde kullanırsan sorun halledilebilir.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla