Dbgrid içindeki hücrede resim ve yazı birlikte kullanma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
powertrk
Üye
Mesajlar: 27
Kayıt: 01 Eki 2008 12:02

Dbgrid içindeki hücrede resim ve yazı birlikte kullanma

Mesaj gönderen powertrk »

Öncelikle herkesin bayramını tebrik ederim.
Konuyla alakalı yerli yabancı kaynakları araştırmama rağmen bir sonuç alamadım.
Yapmak istediğim, Dbgrid üzerinde bir hücrede bulunan içerikte aradığım karakterleri bulduğumda yazıyı kaldırarak olduğu konuma bir ikon yada resim yerleştirmek istiyorum.
Örnek olarak : ) kodu yerine :) şeklinde bir ikon göstermek.
omercitir
Üye
Mesajlar: 1
Kayıt: 06 Eyl 2010 07:05

Re: Dbgrid içindeki hücrede resim ve yazı birlikte kullanma

Mesaj gönderen omercitir »

{You can use the OnDrawColumnCell event to to place icons in DBGrid instead
of the values of field. Here's the easy way to do it:}

procedure TForm1.DBGrid1DrawColumnCell(S ender: TObject; const Rect: TRect;

DataCol: Integer; Column: TColumn; State: TGridDrawState);

var Icon: TBitmap;

begin

Icon:=TBitmap.Create;

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

with DBGrid1.Canvas do begin

Brush.Color:=clWhite;

FillRect(Rect);

if (Table1.FieldByName('SHARES'). Value>4500)

then

ImageList1.GetBitmap(1,Icon)
else

ImageList1.GetBitmap(0,Icon);


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

end;

end;
powertrk
Üye
Mesajlar: 27
Kayıt: 01 Eki 2008 12:02

Re: Dbgrid içindeki hücrede resim ve yazı birlikte kullanma

Mesaj gönderen powertrk »

Cevabın için teşekkürler.
Fakat bu istediğimi karşılayacak bir cevap değil.
Verdiğiniz kod hücre renklendirme yada hücrede imagelistte bulunan ikonu göstermeye örnek gösterilebilir.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Dbgrid içindeki hücrede resim ve yazı birlikte kullanma

Mesaj gönderen mrmarman »

Hazır bir yapı piyasada vardır ancak kendi çözümünüzü üretmek için @omercitir'ın belirttiği şekilde aşağıdaki gibi çözüm üretmeniz gerekecektir.

Örnek proje hazırlayıp bu mesaj ekinde sundum, incelersin...

Resim

Örnekteki projede yapıyı aşağıda örneklediğim şekilde kurdum.

Kod: Tümünü seç

procedure TForm1.Edit1Change(Sender: TObject);
Var
  a, b,
  Konum : Integer;
begin
  PaintBox1.Canvas.FillRect( PaintBox1.Canvas.ClipRect );
  Application.ProcessMessages;
  PaintBox1.Canvas.TextOut( 5, 5, Edit1.Text );
  Konum := Pos(':)', Edit1.Text);
  if Konum > 0 then begin
    a := PaintBox1.Canvas.TextWidth( Copy(Edit1.Text, 1, Konum) );
    ImageList1.Draw(PaintBox1.Canvas, a, 5, 0);
  end;
end;

sizin de bu yapıyı, DBGrid'in canvasında kurmanız gerekecektir. Canvas TextWidth ile ekrana bastırdığınız metnin pixel bazında genişliğini elde ediyorsunuz. Yazı karakteri "Courier New" veya benzeri şekilde her harf için eşit genişlik olsayda karakter sayısı çarpı genişlik diyebiliriz ancak kerning değerleri yani karakterler arası boşluklar değişik olduğundan yazıyı bütün olarak değerlendirmelisiniz.


Başarılar.
Dosya ekleri
TextImageKarisik.rar
(159.98 KiB) 112 kere indirildi
En son mrmarman tarafından 01 Nis 2011 08:29 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Resim
Resim ....Resim
powertrk
Üye
Mesajlar: 27
Kayıt: 01 Eki 2008 12:02

Re: Dbgrid içindeki hücrede resim ve yazı birlikte kullanma

Mesaj gönderen powertrk »

Öncelikle cevabınız ve çözümünüz için teşekkürler.
Sizin yönteminizi kullanmak aklıma gelmişti fakat binlerce kayıt için zahmetli ve performanssız bir çözüm olacağı için vazgeçmiştim.
Ama henüz başka bir çözüm geliştiremediğim için çalışmanızı kullanacağım.
Aklıma gelen diğer yöntem hücrelerde html içerik göstermek.
Bu fikirden sonra bir araştırma yaptım bunu yapan bir grid nesnesi mevcut. Aşağıdaki linkten ürün ve özellikleri incelenebilir.
Teşekkürler iyi çalışmalar.

Resim
http://www.tmssoftware.com/site/asg20.asp
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Dbgrid içindeki hücrede resim ve yazı birlikte kullanma

Mesaj gönderen mrmarman »

Merhaba.

HTML Grid çözümü için de kendi içinde aynı şekilde canvas işlemi yaptığını söylememe gerek yok diye düşünüyorum.

Binlerce kayıt için performans kaygınızı dile getirmişsiniz, ancak kayıtların bütünü değil sadece ve sadece ekranda o an görünen kadarıyla değerlendirilecektir. Bunu hesaba katarak değerlendirdiğinizde sanıldığının tersine performans kaybı gibi bir durumla karşılaşılması söz konusu değildir. Bunun garantisini verebilirim. :idea:

Şunu da eklemden edemiycem, canvas işlemlerinde kullanılacak resimlerin hafızada yüklü bir bankadan kullanmaya özen gösterin. Sabit diskten, medyadan, ağdan vs. okuma yapılıyorsa bunlar doğası gereği performans kaybını bırakın kilitlenmelere sebebiyet verecektir. Bunlar için sözüm meclisten dışarıdır. :roll:
Resim
Resim ....Resim
Cevapla