Delphi Can
Dinamik butonlarda event tanımı - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: Dinamik butonlarda event tanımı (/showthread.php?tid=8016)

Sayfalar: 1 2


Cvp: Dinamik butonlarda event tanımı - mnk - 31-01-2025

Tekrar Merhabalar,

dinamik olarak oluşturduğum butonlara denemeler yaparken programda farklı bir yerde takıldım. Drag Drop ile dosya listesi oluşturan bir kodun içinde sorun yaşıyorum. Kod içindeki ilgili bölüm şöyle:

procedure TForm1.CreateWnd;
begin
 inherited;
 DragAcceptFiles(WindowHandle, True);
end;

procedure TForm1.DestroyWnd;
begin
 DragAcceptFiles(WindowHandle, false);
 inherited;
end;

procedure TForm1.WMDROPFILES(var msg: TWMDropFiles);
var
 i, fileCount: integer;
 fileName: array[0..MAX_PATH] of char;
begin
 fileCount:=DragQueryFile(msg.Drop, $FFFFFFFF, fileName, MAX_PATH);
 for i := 0 to fileCount - 1 do
 begin
   DragQueryFile(msg.Drop, i, fileName, MAX_PATH);
   Form1.DosyaListesiMEMO.Lines.Add(fileName); // burası sorunsuz çalışıyor.

   Form1.DosyaListesiMEMO.OnChange(sender); // onCreate sırasında çalışan aynı satır burada sender undefined hatası veriyor.
 end;
 DragFinish(msg.Drop);
end;

procedure TForm1.FormCreate(Sender: TObject);
var k:integer;
begin
 PARAMETRE_Dinamik_Objelerini_YAP; // burası sorunsuz çalışıyor.
 DosyaSAYISI := 0;
 ParametreOKU_mod; // burada da basit okumalar var. Sorun yok.

 Form1.DosyaListesiMEMO.OnChange(sender); // onChange prosedürü burada sorunsuz çalışıyor.
end;

DosyaListesiMEMO objesindeki onChange prosedürü Form onCreate sırasında düzgün çalışırken drag drop sırasında neden "sender undefined" hatası veriyor? DosyaListesiMEMO objesi dinamik bir obje değil. İçeriği elle değişince onChange içine yazdığım kodlar sorunsuz çalışıyor. Drag-drop prosedürü içinden çağıramadım. Sorunlu satırı devreden çıkarınca drag drop prosedüründe de sorun yok.


Dinamik butonlarda event tanımı - mrmarman - 31-01-2025

Açtığınız başlıktaki dinamik butonlar konusu sorununuzla alakalı değil. Öyle olduğunu düşünerek sorduysanız yanlışınız var.

Projeniz aynı olabilir ama açtığınız başlık projenize özel gibi değerlendirirseniz benzer sorunu olanlar için çözümün aranır, bulunabilir olmasını olumsuz etkiler.

Farklı bir başlık açarak sormak isteyebilirsiniz. Sorarken gerekiyorsa bu başlığı link olarak verip referans gösterebilirsiniz.

EK - bu arada kayıtsız kalamadım, "sender" ifadesi "self" gibi sınıf bazında global bir ifade değildir. Daha açık ifade edeyim, parametre listesinde sender yoksa karşılığı yoktur, bulunamaması doğaldır. Form1.DosyaListesiMEMOChange( Form1.DosyaListesiMEMO ); şeklinde denerseniz ilgili MEMO'daki değişimi kendisine yönlendirmiş olursunuz.