Delphi Can
Çalışma anında lisboxitem da oluşturulan nesneye ulaşmak - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Mobil Platform - FireMonkey (FMX) (https://www.delphican.com/forumdisplay.php?fid=7)
+--- Konu Başlığı: Çalışma anında lisboxitem da oluşturulan nesneye ulaşmak (/showthread.php?tid=7004)



Çalışma anında lisboxitem da oluşturulan nesneye ulaşmak - diseqc - 22-10-2022

Merhaba;

   Projemde çalışma anında aşağıda ki kod ile listebox da itemler oluşturup oluşan itemlarda rectangle üzrinde nesneler oluşuyor kullanıcı oluşan nesnelerin Hit test özelliği False olup lşstboxin item clik ile sistem ilerliyor. Kullanıcının tıkladığı item üzerinde ki Rectanglenin tag ını vede textini yakalamam gerekiyor Konu hakkında lisview ile ilgili örnekler mevcut ama listbox ile ilerleyemedim konu hakkında desteği olan herkese şimdiden teşekkürler.

procedure TFrme_rand.ddadditem(ddadi1, ddadi2 :string;ddkod:variant;  BlobField1: TBlobField);
var
rec : TRectangle;
lb : TListBoxItem;
memstream : Tstream;
begin
 try
 lblddadi.Text:=ddadi1;
 lblbddadi2.Text:=ddadi2;
 //resim := '';
 memstream := TMemoryStream.Create();
 TBlobField(BlobField1).SaveToStream(memstream);
 memstream.Position := 0;

 recimage.Fill.Bitmap.Bitmap.LoadFromStream(memstream);

 lb:= TListBoxItem.Create(lstbdd);
 lb.Width:=lstbdd.Width;
 lb.Height:=+30;  
 lb.Tag:=ddkod;
 rec := TRectangle(recddlist.Clone(lb));
 rec.Width:=lb.Width -45;
 rec.Position.X:= 16;
 rec.Position.y:= 5;


 rec.Visible:=True;

 lb.AddObject(rec);
 lstbdd.AddObject(lb);
 finally
     memstream.Free;
 end;
end;



Cvp: Çalışma anında lisboxitem da oluşturulan nesneye ulaşmak - hi_selamlar - 24-10-2022

(22-10-2022, Saat: 12:49)diseqc Adlı Kullanıcıdan Alıntı: Merhaba;

   Projemde çalışma anında aşağıda ki kod ile listebox da itemler oluşturup oluşan itemlarda rectangle üzrinde nesneler oluşuyor kullanıcı oluşan nesnelerin Hit test özelliği False olup lşstboxin item clik ile sistem ilerliyor. Kullanıcının tıkladığı item üzerinde ki Rectanglenin tag ını vede textini yakalamam gerekiyor Konu hakkında lisview ile ilgili örnekler mevcut ama listbox ile ilerleyemedim konu hakkında desteği olan herkese şimdiden teşekkürler.

Kod:
procedure TFrme_rand.ddadditem(ddadi1, ddadi2 :string;ddkod:variant;  BlobField1: TBlobField);
var
rec : TRectangle;
lb : TListBoxItem;
memstream : Tstream;
begin
 try
 lblddadi.Text:=ddadi1;
 lblbddadi2.Text:=ddadi2;
 //resim := '';
 memstream := TMemoryStream.Create();
 TBlobField(BlobField1).SaveToStream(memstream);
 memstream.Position := 0;

 recimage.Fill.Bitmap.Bitmap.LoadFromStream(memstream);

 lb:= TListBoxItem.Create(lstbdd);
 lb.Width:=lstbdd.Width;
 lb.Height:=+30;  
 lb.Tag:=ddkod;
 rec := TRectangle(recddlist.Clone(lb));
 rec.Width:=lb.Width -45;
 rec.Position.X:= 16;
 rec.Position.y:= 5;


 rec.Visible:=True;

 lb.AddObject(rec);
 lstbdd.AddObject(lb);
 finally
     memstream.Free;
 end;
end;

Merhabalar,

http://www.delphican.com/showthread.php?tid=301&pid=1713#pid1713
https://www.delphican.com/showthread.php?tid=3628
https://www.delphican.com/showthread.php?tid=3892
https://www.delphican.com/showthread.php?tid=4853

Linkleri inceleyebilirmisiniz lütfen.

Kolay gelsin.


Cvp: Çalışma anında lisboxitem da oluşturulan nesneye ulaşmak - diseqc - 26-10-2022

(24-10-2022, Saat: 22:28)hi_selamlar Adlı Kullanıcıdan Alıntı:
(22-10-2022, Saat: 12:49)diseqc Adlı Kullanıcıdan Alıntı: Merhaba;

   Projemde çalışma anında aşağıda ki kod ile listebox da itemler oluşturup oluşan itemlarda rectangle üzrinde nesneler oluşuyor kullanıcı oluşan nesnelerin Hit test özelliği False olup lşstboxin item clik ile sistem ilerliyor. Kullanıcının tıkladığı item üzerinde ki Rectanglenin tag ını vede textini yakalamam gerekiyor Konu hakkında lisview ile ilgili örnekler mevcut ama listbox ile ilerleyemedim konu hakkında desteği olan herkese şimdiden teşekkürler.

Kod:
procedure TFrme_rand.ddadditem(ddadi1, ddadi2 :string;ddkod:variant;  BlobField1: TBlobField);
var
rec : TRectangle;
lb : TListBoxItem;
memstream : Tstream;
begin
 try
 lblddadi.Text:=ddadi1;
 lblbddadi2.Text:=ddadi2;
 //resim := '';
 memstream := TMemoryStream.Create();
 TBlobField(BlobField1).SaveToStream(memstream);
 memstream.Position := 0;

 recimage.Fill.Bitmap.Bitmap.LoadFromStream(memstream);

 lb:= TListBoxItem.Create(lstbdd);
 lb.Width:=lstbdd.Width;
 lb.Height:=+30;  
 lb.Tag:=ddkod;
 rec := TRectangle(recddlist.Clone(lb));
 rec.Width:=lb.Width -45;
 rec.Position.X:= 16;
 rec.Position.y:= 5;


 rec.Visible:=True;

 lb.AddObject(rec);
 lstbdd.AddObject(lb);
 finally
     memstream.Free;
 end;
end;

Merhabalar,

http://www.delphican.com/showthread.php?tid=301&pid=1713#pid1713
https://www.delphican.com/showthread.php?tid=3628
https://www.delphican.com/showthread.php?tid=3892
https://www.delphican.com/showthread.php?tid=4853

Linkleri inceleyebilirmisiniz lütfen.

Kolay gelsin.

Desteğiniz için teşekkür ederim ancak yinede istediğime ulaşamadım ilettiğiniz linkleri inceledim çoğunda listview anlatılmış sadece son konuda listboxdan bahsedilmiş o konudan oluşan itemlara ulatım ancak item üstünde ki image nesnesine yinede ulaşamadım.


Çalışma anında lisboxitem da oluşturulan nesneye ulaşmak - berk06 - 26-10-2022

Sanırım böyle bir yöntem arıyorsunuz;

procedure TForm1.ddadditem(ddadi1, ddadi2 :string);
var
rec : TRectangle;
lb : TListBoxItem;
tx : TText;
i: integer;
memstream : Tstream;
begin
ListBox1.BeginUpdate;
try
 i := random(666);

  lb:= TListBoxItem.Create(ListBox1);
  lb.Parent := ListBox1;
  lb.Visible := True;
  lb.Height := 70;
  lb.Tag := i;
  lb.Name := 'lbP'+i.ToString;
  lb.OnClick := ListBoxItem1Click;

  rec := TRectangle.Create(lb);
  rec.Align := TAlignLayout.None;
  rec.Parent := lb;
  rec.Width:= 50;
  rec.Height := 50;
  rec.Position.X:= 16;
  rec.Position.y:= 5;
  rec.Visible := True;
  rec.Tag := i;
  rec.HitTest := False;
  rec.Name := 'rcP'+i.ToString;

  tx := TText.Create(Form1);
  tx.Parent := lb;
  tx.Position.X := rec.Position.X + rec.Height + 20;
  tx.Position.Y := rec.Position.Y;
  tx.Text := 'Bu bir metindir ve kayıtlı tag: '+i.ToString;
  tx.tag := i;
  tx.Width := 100;
  tx.Visible := True;
  rec.HitTest := False;
  tx.Name := 'txP'+i.ToString;
ListBox1.AddObject(lb);

finally
   ListBox1.EndUpdate;
end;
end;

procedure TForm1.ListBoxItem1Click(Sender: TObject);
begin
 if sender is TListBoxItem then
 begin
   ShowMessage(TText(FindComponent('txP'+TListBoxItem(Sender).tag.ToString)).Text);
 end;
end;

Belki bir fikir verir.


Cvp: Çalışma anında lisboxitem da oluşturulan nesneye ulaşmak - diseqc - 30-10-2022

(26-10-2022, Saat: 18:11)berk06 Adlı Kullanıcıdan Alıntı: Sanırım böyle bir yöntem arıyorsunuz;

procedure TForm1.ddadditem(ddadi1, ddadi2 :string);
var
rec : TRectangle;
lb : TListBoxItem;
tx : TText;
i: integer;
memstream : Tstream;
begin
ListBox1.BeginUpdate;
try
 i := random(666);

  lb:= TListBoxItem.Create(ListBox1);
  lb.Parent := ListBox1;
  lb.Visible := True;
  lb.Height := 70;
  lb.Tag := i;
  lb.Name := 'lbP'+i.ToString;
  lb.OnClick := ListBoxItem1Click;

  rec := TRectangle.Create(lb);
  rec.Align := TAlignLayout.None;
  rec.Parent := lb;
  rec.Width:= 50;
  rec.Height := 50;
  rec.Position.X:= 16;
  rec.Position.y:= 5;
  rec.Visible := True;
  rec.Tag := i;
  rec.HitTest := False;
  rec.Name := 'rcP'+i.ToString;

  tx := TText.Create(Form1);
  tx.Parent := lb;
  tx.Position.X := rec.Position.X + rec.Height + 20;
  tx.Position.Y := rec.Position.Y;
  tx.Text := 'Bu bir metindir ve kayıtlı tag: '+i.ToString;
  tx.tag := i;
  tx.Width := 100;
  tx.Visible := True;
  rec.HitTest := False;
  tx.Name := 'txP'+i.ToString;
ListBox1.AddObject(lb);

finally
   ListBox1.EndUpdate;
end;
end;

procedure TForm1.ListBoxItem1Click(Sender: TObject);
begin
 if sender is TListBoxItem then
 begin
   ShowMessage(TText(FindComponent('txP'+TListBoxItem(Sender).tag.ToString)).Text);
 end;
end;

Belki bir fikir verir.

Merhaba cevabınız farklı bir sorunda destek oldu teşekkür ederim. Projenin devamında birde dinamik olarak oluşturduğum butonların onclick eventına ulaşmam gerekiyor. Yaptığım araştırmada type alanının altına procedure tikla(Sender: TObject);
şeklinde bir procedure tanımladım yine aynı döngüde butonu oluştururken btn.onclick=tikla; olarak atadım derlerken hata vermiyor ancak butonlara bastığımda tik yok. nesneler firemonkey frame üzerinde acaba ondan mı ??
Şimdi soru şu : run time oluştırduğum fazlaca butonların onclick olayına nasıl programı tetiklerim tşk

procedure tikla(Sender: TObject);

procedure Tfrmealinanranlar.tikla(Sender: TObject);
begin
  ShowMessage('o')
end;

procedure Tfrmealinanranlar.addalinanranditem(blmadi, dadi,  rsirano,
 tarihisaat: string; BlobField1: TBlobField);
  var
rec : TRectangle;
lb : TListBoxItem;
memstream : Tstream;
btn,btn2 : TButton;
begin
 try
 lblbdi.Text:=blmadi;
 lbldadi.Text:=dadi;
 lbltarihsaat.Text:= tarihisaat;
   memstream := TMemoryStream.Create();
    TBlobField(BlobField1).SaveToStream(memstream);
    memstream.Position := 0;

 circle1.Fill.Bitmap.Bitmap.LoadFromStream(memstream);

 btn := TButton.Create(lstranlarim);
 btn.Parent :=lybtnlar;  //lb;
 btn.Align:=TAlignLayout.Center;
 btn.Margins.Right:=100;
 btn.Text := 'Güncelle'; //'sil '+rsirano;
 btn.tag := StrToInt(rsirano);
 btn.Width := 80;
 btn.Visible := True;

 btn.Name := 'btn'+rsirano;
 btn.OnClick:=tikla;

 btn2 := TButton.Create(lstranlarim);
 btn2.Parent :=lybtnlar;  //lb;
 btn2.Align:=TAlignLayout.Center;
 btn2.Margins.Left:=100;
 btn2.Text := 'İptal Et'; //'sil '+rsirano;
 btn2.tag := StrToInt(rsirano);
 btn2.Width := 80;
 btn2.Visible := True;

 btn2.Name := 'btn2'+rsirano;
 btn2.OnClick:=lstrandevularimClick;

 lb:= TListBoxItem.Create(lstrandevularim);
 lb.Width:=lstranlarim.Width;
 lb.Height:=Recrandevularist.Height +60 ;
 lb.Tag:=StrToInt(rsirano);
 rec := TRectangle(Recrandevularist.Clone(lb));
 rec.Width:=lb.Width-20;
 rec.Position.X:= 8;
 rec.Position.y:= 5;
  rec.HitTest := False;


 rec.Visible:=True;

 lb.AddObject(rec);
 lstranlarim.AddObject(lb);
 finally
     memstream.Free;

 end;
end;



Çalışma anında lisboxitem da oluşturulan nesneye ulaşmak - diseqc - 12-11-2022

Merhaba; Konu hakkında kimsenin fikri yok mu ? dynamic oluşturduğum nesnelerin onClick eventina nasıl ulaşacağım ?


Cvp: Çalışma anında lisboxitem da oluşturulan nesneye ulaşmak - berk06 - 12-11-2022

(12-11-2022, Saat: 10:08)diseqc Adlı Kullanıcıdan Alıntı: Merhaba; Konu hakkında kimsenin fikri yok mu ? dynamic oluşturduğum nesnelerin onClick eventina nasıl ulaşacağım ?

Merhaba,

http://www.delphiturkiye.com/forum/viewtopic.php?t=27829

https://www.thoughtco.com/understanding-sender-parameter-in-delphi-event-handlers-1058223

https://stackoverflow.com/questions/11335829/how-to-use-sender-parameter-with-as-operator-for-more-then-one-class-at-a-ti

https://docwiki.embarcadero.com/RADStudio/Sydney/en/Using_the_Sender_Parameter


Cvp: Çalışma anında lisboxitem da oluşturulan nesneye ulaşmak - diseqc - 19-11-2022

(12-11-2022, Saat: 13:36)berk06 Adlı Kullanıcıdan Alıntı:
(12-11-2022, Saat: 10:08)diseqc Adlı Kullanıcıdan Alıntı: Merhaba; Konu hakkında kimsenin fikri yok mu ? dynamic oluşturduğum nesnelerin onClick eventina nasıl ulaşacağım ?

Merhaba,

http://www.delphiturkiye.com/forum/viewtopic.php?t=27829

https://www.thoughtco.com/understanding-sender-parameter-in-delphi-event-handlers-1058223

https://stackoverflow.com/questions/11335829/how-to-use-sender-parameter-with-as-operator-for-more-then-one-class-at-a-ti

https://docwiki.embarcadero.com/RADStudio/Sydney/en/Using_the_Sender_Parameter
Merhaba konu hakkında desteğinizi için teşekkür ederim ilettiğin linkleri inceledim, sorunu istediğim gibi olmasada çözdüm. aşağıda paylaştığım kodlarda görüelceği üzere run time anında oluşturduğum butonların eventlarını yönlendirmeyi başaramadım ama formun üzerine yerleştirdiğim bir butonu clone layarak itmes ler üzerinde botonlar oluşturdum ve clone butonların on click eventını bu butona yönledirince çalıştı.

procedure TFrme_checkup.paketlerilistele(tabadi: string);
var
reci:TRectangle;
tblar:TTabItem;
ilk:boolean;
button:TCornerButton;
scrol:TVertScrollBox;
begin
  try
      tblar := TABCCheckup.Add( TTabItem ) as TTabItem;
      tblar.Text := Tabadi + IntToStr( TABCCheckup.TabCount );
      tblar.Name := 'TB'+IntToStr( TABCCheckup.TabCount );

      scrol:=TVertScrollBox.Create(self);
      scrol.Parent:=tblar;
      scrol.Align:=TAlignLayout.Client;
      scrol.Visible:=True;

     ilk:=false;
     with formdm do
      begin
       Dsetqrcheckuplar.Close;
      Dsetqrcheckuplar.Open;
      Dsetqrcheckuplar.First;
         while not Dsetqrcheckuplar.Eof do
          begin
          btneklenenpaketler.Text:=DsetqrcGROUP_ADI.Value;
          reci:= TRectangle(Recpaketler.Clone(scrol));
          reci.Parent:=scrol;
          reci.Align:=TAlignLayout.Top;
          reci.Tag:=DsetqrcGRUPNO.AsInteger;
          btneklenenpaketler.Tag:=DsetqrcGRUPNO.AsInteger;
          if not ilk then reci.Margins.Top:=40 else reci.Margins.Top:=5;
          reci.Margins.Left:=10;
          reci.Margins.Right:=10;
          scrol.AddObject(reci);
          tblar.AddObject(scrol);
          button:=TCornerButton(btneklenenpaketler.Clone(reci));
          button.Align:=TAlignLayout.Client;
          button.StyleLookup:='buttonstilgenel';    
          button.Tag:=DsetqrcheckuplarGRUPNO.AsInteger;
          button.OnClick:=btneklenenpaketlerClick;
          reci.AddObject(button);

         reci.Visible:=True;
         ilk:=true;
         Dsetqrcheckuplar.Next;
       end;

     end;
 except

  end;

end;