Aşağıdaki kod ile veritabanındaki kayıtlara göre buttongroup üzerinde buton oluşturuyorum. Sorunum bu butona tıkladığım zaman oluşturulan butona vermiş olduğum captionı alıp işlem yapmam gerekiyor. Ama nasıl alabileceğimi bulamadım. YArdımcı olacak olan hocalarıma ve arkadaşlarıma şimdiden teşekkür ederim.
With FDQuery1 do
begin
close;
sql.clear;
sql.add('SELECT id,shiftsure FROM pdks_shiftsure');
open;
First;
while not FDQuery1.eof do
begin
with ButtonGroup1 do
begin
BorderStyle := bsNone;
ButtonHeight := 33;
ButtonWidth := 124;
ButtonOptions := [gboAllowReorder,
gboGroupStyle,
gboShowCaptions];
with Items.Add do
begin
Caption := FDQuery1.fieldbyname('shiftsure').AsString;
OnClick := ButtonClick;
end;
end;
next;
end;
end;
procedure TForm1.ButtonClick(Sender: TObject);
begin
ShowMessage(TButton(Sender).Caption);
end;
Button click yaptığın event function un sender olayına
procedure TForm.OnButtonClic1k(Sender: TObject);
var
Baslik:String;
EventTag:Integer;
begin
if Sender is TButton then
Deger:=TButton(Sender).Caption)
EventTagP:=TButton(Sender).Tag;
// Ama Ben Tag olayını tercih ediyorum. Taglara identyleri yükleyip evet vermek daha güzel tabii integer büyüklüğünü geçmeyecek şekilde olması lazım
// Kolay gelsin
end;
Evet eğer buton normal buton olsaydı bu yazdığınız kodlar işe yarayacak fakat benim komponentim Tbuttongroup ve butonlar çalışma anında oluşuyor. Oluşma sırasında verilen caption değeri ile buttonclick olayında atama yapmam gerekiyor. Cevaplar için teşekkür ederim
procedure TForm1.ButtonGroup1ButtonClicked(Sender: TObject; Index: Integer);
begin
ShowMessage(TButtonGroup(Sender).Items[Index].Caption);
end;
Bu kodları denemiştim ama index'ten ötürü argument out of range hatası veriyor. O yüzden çalıştıramadım. ButtonGroup1ButtonClicked olayında ise boş dönüyor.
(05-11-2020, Saat: 15:30)bkantur Adlı Kullanıcıdan Alıntı: [ -> ]Bu kodları denemiştim ama index'ten ötürü argument out of range hatası veriyor. O yüzden çalıştıramadım. ButtonGroup1ButtonClicked olayında ise boş dönüyor.
ben denedim bir sorun görünmüyor çalışıyor.
(05-11-2020, Saat: 15:04)bkantur Adlı Kullanıcıdan Alıntı: [ -> ]Evet eğer buton normal buton olsaydı bu yazdığınız kodlar işe yarayacak fakat benim komponentim Tbuttongroup ve butonlar çalışma anında oluşuyor. Oluşma sırasında verilen caption değeri ile buttonclick olayında atama yapmam gerekiyor. Cevaplar için teşekkür ederim
TButtonGRoup vs.. Fark etmemekte önemli olan Butonu oluşturduğunuz zaman Buton un eventları sırasında vereceğiniz özel işlemlerle birlikte problemsiz bir şekilde sender da özzelikleri aktarmak.
Bu mantıkla itemindex bile kullanmaya gerek kalmadan sorunu çözmenizde herhangi bir sıkıntı olmaz.
Ayrıca
procedure TForm1.ButtonGroup1ButtonClicked(Sender: TObject; Index: Integer);
begin
ShowMessage(TButtonGroup(Sender).Items[Index].Caption);
end;
Eğer kullancaksanız.! OnClick Olayını kullanmaya gerek yok .!
with Items.Add do
begin
Caption := FDQuery1.fieldbyname('shiftsure').AsString;
OnClick := ButtonClick; -> Olayını kullanmaya gerek yok
end;
Ve Kodları Aynı Şekilde Çalışırdığım zaman herhangi bir sıkıntı ile karşılaşmadan çalıştırdım. Ekteki kodlar problemsiz çalışmakta[
attachment=1436]