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
Veritabanındaki bilgilere göre dinamik butonlar oluşturmak
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Veritabanındaki bilgilere göre dinamik butonlar oluşturmak
..:En Büyük Başarı Hiç Düşmemek Değil, Her Düşüş Sonunda Kalkıp Yola Devam Edebilmektir:..
Re: Veritabanındaki bilgilere göre dinamik butonlar oluşturmak
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.
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;
Re: Veritabanındaki bilgilere göre dinamik butonlar oluşturmak
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
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:..
Re: Veritabanındaki bilgilere göre dinamik butonlar oluşturm
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.
Resimlere aldırmayın, iki farklı veritabanından olduğundan afişlerle isimler eşleşmediler..
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;
Resimlere aldırmayın, iki farklı veritabanından olduğundan afişlerle isimler eşleşmediler..
Re: Veritabanındaki bilgilere göre dinamik butonlar oluşturmak
Hocam bana örnek uygulama sitesini gönderirmisiniz diğeri iptal olmuş herhalde
Re: Veritabanındaki bilgilere göre dinamik butonlar oluşturmak
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;
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;
Re: Veritabanındaki bilgilere göre dinamik butonlar oluşturmak
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
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