dbgrid sütünunda resim gösterme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
mobilepack
Üye
Mesajlar: 27
Kayıt: 22 Nis 2005 10:32
Konum: antalya

dbgrid sütünunda resim gösterme

Mesaj gönderen mobilepack »

arkadaşlar dbgrid içinde onay diye bir alanım var bu alanın veritabanındaki değerleri 0 ve 1 lacak burda yapmak istediğim dbgridin ilgili kolonunda değer 0 olduğu zaman birinci resim 1 olduğu zaman ikinci resim gibi forumda aradım ama bir türlü sonuca ulaşamadım yardımcı olan ve olmayan arkadaşlara şimdiden teşekkürler
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Kod: Tümünü seç

  Icon:=TBitmap.Create;

if  (Column.index=0 ) then begin // DbGridin ilk Sütunu

    with  DBGrid1.Canvas do begin
      ImageList1.GetBitmap(0,Icon); // imagelistten 0'ncı resim alınıyor..
      TextRect(Rect,Rect.Left+21,Rect.Top,Column.Field.AsString); // Alan yazılıyor..

      // Alan yazılıyor.. buradaki "rect.left+21" değeri ise 16x16 pix. resimden sonra 5 pix
      // daha sağa kayması için.

      Draw(rect.Left+1,Rect.Top,Icon); // Resim Konuyor..
      // buradaki rect.Left+1 değeri resmin grid duvarına yapışmaması için 1 px sağa kay.
    end;
  end;
yukarıdaki kodla o alana resim koyarsınız şarta göre yapacaksanız eğer

Kod: Tümünü seç

if  (Column.index=0 ) then begin // DbGridin ilk Sütunu

bu koddan sona durmuyla ilgili şart koyun bir deneyin bakalım sonuç vercekmi.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
mobilepack
Üye
Mesajlar: 27
Kayıt: 22 Nis 2005 10:32
Konum: antalya

Mesaj gönderen mobilepack »

hocam ilgin için teşekkürler ama icon la başlayan satırda hata veriyor
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

hocam hatayı yazmamışsınız ama icon yerine o zaman başka bir kelime kullanın büyük bir ihtimalle isim çakışması oluyordur.olamzsa hatayla beraber yazın sorunu.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
mobilepack
Üye
Mesajlar: 27
Kayıt: 22 Nis 2005 10:32
Konum: antalya

Mesaj gönderen mobilepack »

[Error] tahlilver.pas(79): Incompatible types: 'TIcon' and 'TBitmap'
[Error] tahlilver.pas(83): Incompatible types: 'TBitmap' and 'TIcon'
[Fatal Error] SENKRON.dpr(12): Could not compile used unit 'tahlilver.pas'
hocam ilgin için teşekkürler hata bunlar
Kullanıcı avatarı
mobilepack
Üye
Mesajlar: 27
Kayıt: 22 Nis 2005 10:32
Konum: antalya

Mesaj gönderen mobilepack »

procedure Ttsonucform.RxDBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
Icon:=Tbitmap.create;
if (Column.index=9 ) then begin // DbGridin ilk Sütunu

with rxDBGrid1.Canvas do begin
ImageList1.GetBitmap(0,Icon); // imagelistten 0'ncı resim alınıyor..
TextRect(Rect,Rect.Left+21,Rect.Top,Column.Field.AsString); // Alan yazılıyor..

// Alan yazılıyor.. buradaki "rect.left+21" değeri ise 16x16 pix. resimden sonra 5 pix
// daha sağa kayması için.

Draw(rect.Left+1,Rect.Top,Icon); // Resim Konuyor..
// buradaki rect.Left+1 değeri resmin grid duvarına yapışmaması için 1 px sağa kay.
end;
end;

end;

end.




kodlar bunlar şimdiden teşekkürler
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

hocam anladığım kadarıyla
icon
değişken olarak tanımlamamışsınız.eğer unitin var bloğunada tanımlamadıysanız procedurenin var bloğuna

Kod: Tümünü seç

icon:Tbitmap;
olarak tanımlayın..kolay gelsin yine olmazsa yine yapmaya çalışırız.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
mobilepack
Üye
Mesajlar: 27
Kayıt: 22 Nis 2005 10:32
Konum: antalya

Mesaj gönderen mobilepack »

hocam yine hata verdi
Icon:TBitmap.create; bu kodda
hata mesajı
[Error] tahlilver.pas(80): ';' expected but '.' found







var
Icon:TBitmap.create;
begin
if (Column.index=5 ) then
begin // DbGridin ilk Sütunu

with DBGrid1.Canvas do begin
ImageList1.GetBitmap(0,Icon); // imagelistten 0'ncı resim alınıyor..
TextRect(Rect,Rect.Left+21,Rect.Top,Column.Field.AsString); // Alan yazılıyor..

// Alan yazılıyor.. buradaki "rect.left+21" değeri ise 16x16 pix. resimden sonra 5 pix
// daha sağa kayması için.

Draw(rect.Left+1,Rect.Top,Icon); // Resim Konuyor..
// buradaki rect.Left+1 değeri resmin grid duvarına yapışmaması için 1 px sağa kay.
end;
end;

Kod: Tümünü seç


ilgin için sağol 
Kullanıcı avatarı
mobilepack
Üye
Mesajlar: 27
Kayıt: 22 Nis 2005 10:32
Konum: antalya

Mesaj gönderen mobilepack »

hocam yanlış oldu kusura

Kod: Tümünü seç

icon:Tbitmap 

olarak hata vermiyor ama iconu gride koymadı acaba ek bir tetikleme gerekirmiydi
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Bir db grid indirin onu daata source ile bağlayın duğmukleyin vs.. db grid çalışır
hale gelsin daha sonra bir imagelist indirin. içerisine kullanacağınız resimleri 16x16
seçin (ben öyle seçtim). hatta çok resim seçtiyseniz indexlerini bir kagıda da yazabilirsiniz. :))

daha sonra DBGrid1DrawColumnCell kısmına aşagıdaki kodları yazın ve çalıştırın

Not: Db grid üzerinde indicator'ı kaldırdım. Eğer illa indicator kullanacaksanız indicator
ın genişliği 12 pix. haberiniz olsun. :))
birde db gridin tüm editable ayarlarını false yaptım ve optionstan rowselect kısmınıda
true yaptım yoksa dbgrid üzerine tıkladığınızda resimler yazılar karışıyor. Eğer
grid üzerinde tüm alanlar editableyapmanız gerekiyorsa bunu yapmayın.
Yani listeleme haricindeki işlerde kullanmayın

Kod: Tümünü seç

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);

    var Icon: TBitmap;

begin

  Icon:=TBitmap.Create;

if  (Column.index=0 ) then begin // DbGridin ilk Sütunu

    with  DBGrid1.Canvas do begin
      ImageList1.GetBitmap(0,Icon); // imagelistten 0'ncı resim alınıyor..
      TextRect(Rect,Rect.Left+21,Rect.Top,Column.Field.AsString); // Alan yazılıyor..

      // Alan yazılıyor.. buradaki "rect.left+21" değeri ise 16x16 pix. resimden sonra 5 pix
      // daha sağa kayması için.

      Draw(rect.Left+1,Rect.Top,Icon); // Resim Konuyor..
      // buradaki rect.Left+1 değeri resmin grid duvarına yapışmaması için 1 px sağa kay.
    end;
  end;

if  (Column.index=1 ) then begin  // DbGridin ikinci Sütunu

    with  DBGrid1.Canvas do begin
      ImageList1.GetBitmap(0,Icon); // imagelistten 1.inci resim alınıyor...

      TextRect(Rect,Rect.Left+21,Rect.Top,Column.Field.AsString);

     // Alan yazılıyor.. buradaki "rect.left+21" değeri ise 16x16 pix. resimden sonra 5 pix
     // daha sağa kayması için.

      Draw(rect.Left+1,Rect.Top,Icon); // Resim Konuyor..
    // buradaki rect.Left+1 değeri resmin grid duvarına yapışmaması için 1 px sağa kay.

   end;
  end;

// resim konacak diğer alanlar vars yukarıdaki işlemleri tekrarlıyoruz.
// Column.index ve imagelist indexini istediğiniz şekilde ayarlayın.


end;
Bütün olayı yeniden verdim..kolay gelsin.

Hocam artı birşey sorcam tahlilver.pas dosyası sizin projeye ait bir dosyamı.eğer size ait dosyaysa o uniti kontrol edin o unitte bir hata olduğunu düşünüyorum.bitmeyen program bloğu olabilir gibi. kolay gelsin.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
mobilepack
Üye
Mesajlar: 27
Kayıt: 22 Nis 2005 10:32
Konum: antalya

Mesaj gönderen mobilepack »

hocam yardımların sayesinde aşağıdaki kodla işi çözdüm ilgin için sağol
allah kodlama zihnini açık etsin teşekkürler

Kod: Tümünü seç

var Icon: TBitmap;

begin

Icon:=TBitmap.Create;

if  (Column.FieldName='BARKODONAY' ) then begin

with  rxDBGrid1.Canvas do begin

Brush.Color:=clwindow;

FillRect(Rect);

if (DM.hastadetail.FieldByName('BARKODONAY').Value=0)

then

ImageList1.GetBitmap(0,Icon)
else

ImageList1.GetBitmap(1,Icon);


Draw(round((Rect.Left+Rect.Right-Icon.Width)/2),Rect.Top,Icon);

end;

end;
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Hocam bende teşekkür ederim ama daha önce rxgrid kullandığınızı söleseydiniz.olmuş ya yinede.kolay gelsin.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
mobilepack
Üye
Mesajlar: 27
Kayıt: 22 Nis 2005 10:32
Konum: antalya

Mesaj gönderen mobilepack »

hocam şimdi şöyle bir sorunum daha var barkodonay field ne default olarak 0 değerini atıyorum database im mysql 4.1 db 1 icon kayıt eklendikce otomatik olarak alınıyor ama query de barkodonay field ne update komutuyla 1 değeri atamak istediğim zaman hata veriyor


  • edatabase error with message'hastadetail you have an error in your sql syntax sytax to use near 'update lbrcikis set barkodonay=null at line 1 processed stop

    ve datalar uçuyor[/code]dm.hastadetail.Close;
    dm.hastadetail.Sql.Add('update lbrcikis set barkodonay=:1');
    dm.hastadetail.ExecSql;
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

hocam orda kullandığınız tek komut bumu sadece yoksa başka bir kod yazımıda varmı.
anladığım kadarıyla syntax hatası veriyor dediğiniz olayı yakında kullanacabileceksiniz gibi .
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
mobilepack
Üye
Mesajlar: 27
Kayıt: 22 Nis 2005 10:32
Konum: antalya

Mesaj gönderen mobilepack »

hocam cok profesyonel yapıda bir programcı değilim farkediyorsunuzdur ama bütün master-detail ilişkileri kurdum form yapıları hesaplamalar herşey tamam but tür görsel şeyler kaldı projemin bitmesi için bu çalışma bir laboratuvar otomasyonu burda iki tablo var master detail durumda ben master tabloda kayıtı seçiyorum detail tablo gride doluyor barkodonay field na default olarak 0 değerini atıyorum yeni kayıt yaparken iconda gözüküyor tablodan kastım query kullanıyorum table değil şimdi bir adet button var buttonun click ine bir kod yazmak istiyorum bu butona tıklayınca gridin barkodonay bölümündeki 0 olan kayıtları veritabanında 1 olarak update etmek istiyorum bu kadar yardımların için sağol
Cevapla