Veritabanındaki bilgilere göre dinamik butonlar oluşturmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
micoteam
Üye
Mesajlar: 66
Kayıt: 07 Tem 2004 09:12
Konum: İstanbul

Veritabanındaki bilgilere göre dinamik butonlar oluşturmak

Mesaj gönderen micoteam »

Merhaba arkadaşlar, bir uygulama ile uğraşiyorum şöyle bir konuda takıldım.Dinamik olarak bir panel üzerine veritabanındaki ürünleri cekip butonların caption ları ürün isimleri olacak şekilde dinamik oluşturmak ve normal vebde olduğu gibi sayfa sayfa cekeceğim her sayfada 50 ürün olacak şekilde toplamda kaç ürün varsa onları panele dinamik oluşturmam lazım. birer buton olcak altta her ileri ve geri gibi tıkladıkça panele dinamik oluşan ürünler arasında gezinilecek. sorum biraz garip gelebirir ama bu uygulama touchpad uygulaması olduğundan dolayı böyle istiyorlar..
bu konu hakkında bir uygulama yapan veya bunu nasıl yapabilirim bileniniz varmı?

ilginize teşekkürler
..:En Büyük Başarı Hiç Düşmemek Değil, Her Düşüş Sonunda Kalkıp Yola Devam Edebilmektir:..
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Veritabanındaki bilgilere göre dinamik butonlar oluşturmak

Mesaj gönderen mrmarman »

Merhaba.

Eğer butonlar ile birlikte aşağı yukarı SCROLL edecek şekilde bir ayarlama ile başını şişirmek istemiyorsan şunu önericem.

TDBCtrlGrid diye bir yapı mevcut. Bu ne işe yarıyor ? Merak edenler için açayım; veritabanına bağlı olarak kayıt sayısı kadar satırı olan bir TDBGrid, ancak her bir satırın müstakil birer TPanel olan çok faydalı bir yapıdır. Yani her panel bir kayda aittir.

Bu panele bir örnek bir TButton koy diycem ama TControl sınıfından bir unsur koymaya müsade etmiyor. Onun için göz yanıltmaca bir çözüm önericem. Hoşuna giderse uygularsın.

Bir butonu bir panel ile nasıl emule edersin. Mouse basıldığı sürece yani OnMouseDown olayında Panel1.BevelOuter := bvLowered;, aksi halde mouse basılma işe sona erdiğinde yani OnMouseUp olayında ise Panel1.BevelOuter := bvRaised; koyduğunda bir panelden bir buton üretmiş oluruz. OnClik olayını anlatmama gerek yok, bir butona bastığında ne yapılıyorsa o yapılır. Örneğin ShowMessage(TPanel(Sender).Caption);

Konumuza dönersek, panelden bir buton yaptın. Sen bunu TCtrlGrid'in referans paneline koyacaksın. Veritabanı sorgusu ile dönen sonuçlardan kaç kayıt varsa o kadar aynı panelden kendiliğinden üreyecektir. Senin hiçbir ayarlama yapmana gerek kalmaz.

Her kayıtta bu panelden ürettiğimiz butonun captionunun güncellemesi yaparsan, o kadar sayıda bir buton dizisi ve detay elde edersin. Bence seveceksin.

Veritabanı ile proje örneği şu linkten indirebilirsin.
http://www.armantr.com/web/download?fil ... anelButton

Kaynak kodlar şu şekilde.

Kod: Tümünü seç

procedure TForm1.FormCreate(Sender: TObject);
Var
  VeriTabani : TFileName;
begin
  VeriTabani := ExtractFilePath(Application.Exename) + 'DivXTurk.mdb';
  AdoConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ Veritabani + ';Persist Security Info=False';
  DataSource1.DataSet := ADOQuery1;
  With AdoQuery1 do begin
    SQL.Text := 'SELECT * FROM DivXTurk';
    Active := True;
  end;
  DBCtrlGrid1.DataSource := DataSource1;
  DBCtrlGrid1.RowCount := 6;
end;

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Panel1.BevelOuter := bvLowered;
end;

procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Panel1.BevelOuter := bvRaised;
end;

procedure TForm1.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid; Index: Integer);
begin
  Panel1.Caption := Format( '%.2d - %s', [ AdoQuery1.RecNo, AdoQuery1.FieldByName('M_Name').AsString]);
end;

procedure TForm1.Panel1Click(Sender: TObject);
begin
  ShowMessage(TPanel(Sender).Caption);
end;
Resim
Resim ....Resim
Kullanıcı avatarı
micoteam
Üye
Mesajlar: 66
Kayıt: 07 Tem 2004 09:12
Konum: İstanbul

Re: Veritabanındaki bilgilere göre dinamik butonlar oluşturmak

Mesaj gönderen micoteam »

Muharrem hocam cok teşekkür ederim.
deneyeceğım. anlattıklarınızla işi cözerim gibime geliyor. bu kayıtları cekerken birde bunlara resimde basacam acaba resim olayını kabul edermi bilmiyorum.
yani her tpanel de bir caption birde resim imagebutton gibi resimli buton olacak panelin üzerine döşenir diye düşünüyorum..
Teşekkür ederim
..:En Büyük Başarı Hiç Düşmemek Değil, Her Düşüş Sonunda Kalkıp Yola Devam Edebilmektir:..
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Veritabanındaki bilgilere göre dinamik butonlar oluşturm

Mesaj gönderen mrmarman »

Tabii ki . Artık sana özel bir panelin var. O panelde ne koyarsan o olur.

Bir tane TImage ve TLabel ekleyip aşağıdaki gibi bir kurgu ile eğer veritabanı ile ilişkilendirilmiş resim dosyası varsa görüntülenir.

Kod: Tümünü seç

procedure TForm1.DBCtrlGrid1PaintPanel(DBCtrlGrid: TDBCtrlGrid; Index: Integer);
Var
  Resim : TFileName;
begin
  Resim := ExtractFilePath(Application.Exename) + 'DATA\'+ AdoQuery1.FieldByName('M_ID').AsString + '.JPG';
  if FileExists(Resim) then Image1.Picture.LoadFromFile(Resim);
  Label1.Caption := Format( '%.2d - %s', [ AdoQuery1.RecNo, AdoQuery1.FieldByName('M_Name').AsString]);
  Panel1.Caption := AdoQuery1.FieldByName('M_Name').AsString;
end;
Resim
Resimlere aldırmayın, iki farklı veritabanından olduğundan afişlerle isimler eşleşmediler.. :lol:
Resim
Resim ....Resim
mbahar27
Üye
Mesajlar: 1
Kayıt: 14 Nis 2018 11:03

Re: Veritabanındaki bilgilere göre dinamik butonlar oluşturmak

Mesaj gönderen mbahar27 »

Hocam bana örnek uygulama sitesini gönderirmisiniz diğeri iptal olmuş herhalde
muratsoft
Üye
Mesajlar: 5
Kayıt: 30 Nis 2005 10:54

Re: Veritabanındaki bilgilere göre dinamik butonlar oluşturmak

Mesaj gönderen muratsoft »

Kendi Kullandığım Hızlı satış Ekranına ait kodlar inşallah işini görür. TAdvGlowButton kullanmıştım sen normal buton vs. kullanabilirsin.

procedure Thizlisatisform.hizlibutonlar;
var

a,i:integer;
sag,ust:integer;
begin
a:=0;
i:=1;
sag:=10;
ust:=10;



with dm.islemquery do
begin
close;
sql.clear;
sql.add('Select * from stokkartlar where silindi=0 and hizliurun=1 order by id desc');
open;
end;



if dm.islemquery.RecordCount>0 then
begin

dm.islemquery.First;
while not dm.islemquery.Eof do
begin

btn:= TAdvGlowButton.Create(Self);
with btn do
begin
if i=1 then
begin
Parent := AdvOfficePager21;
btn.left:=sag;
btn.Top:=ust;
btn.Width := 80;
btn.Height := 40;
btn.Caption:=dm.islemquery['stok_adi'];
btn.Tag:= dm.islemquery['id'];
btn.OnClick:=TusClick;





sag:=sag+90;

end else begin

Parent := AdvOfficePager21;
btn.left:=sag;
btn.Top:=ust;
btn.Width := 80;
btn.Height := 40;
btn.Caption:=dm.islemquery['stok_adi'];
btn.Tag:= dm.islemquery['id'];
btn.OnClick:=TusClick;



if i mod 4 = 0 then
begin
sag:=10;
ust:=ust+50;
end else begin
sag:=sag+90;
end;
end;

end;


i:=i+1;
dm.islemquery.Next;
end;

end;



end;
Kullanıcı avatarı
KoPilot
Üye
Mesajlar: 185
Kayıt: 05 Eki 2007 08:02

Re: Veritabanındaki bilgilere göre dinamik butonlar oluşturmak

Mesaj gönderen KoPilot »

Merhaba;
Bu konuyla ilgili birazcık daha bilgi verebilir misiniz lütfen.
Hızlı satış formunda butonları veritabanına göre oluşturmak için yardım eder misiniz
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk
Eyvallah..
Cevapla