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...
Ö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.