@savkic
DBGrid ima odvojene Canvas-e
pogotovu ako pises novu vcl komponentu
izvedenu iz TDBGrid-a.
Konkretno je DrawTitleCell metoda
Code:
class PACKAGE MOJDBGRID: public TDBGrid
{
protected:
int __fastcall StringWidth(AnsiString text,TFont *fF);
void __fastcall DrawTitleCell (int ACol, int ARow, const Types::TRect &ARect, ->za title
Grids::TGridDrawState AState);
void __fastcall DrawColumnCell(const TRect &Rect,
int DataCol, TColumn *Column,TGridDrawState State); ->za nizove kolona
};
//---------------------------------------------------------------------------
void __fastcall MOJDBGRID::DrawTitleCell (int ACol, int ARow, const Types::TRect &ARect, Grids::TGridDrawState AState)
{
@nikomak bi izgledalo ovako
int text_length = StringWidth(sText,Columns->Items[nDataCol]->Title->Font);
.............................
@X-Files
isto samo moram da ubacim fake TLabel, new TLabel(this), delete Tlabel etc
deklarisem parent, poziciju etc...
}//---------------------------------------------------------------------------
int __fastcall MOJDBGRID::StringWidth(AnsiString text,TFont *fF)
{
int res = 0;
HDC Dc;
HFONT SFont = 0;
TSize t;
Dc = GetDC(0);
__try
{
SFont = SelectObject(Dc, fF->Handle);
if (GetTextExtentPoint32A(Dc, text.c_str(), text.Length(), &t))
res = t.cx;
}
__finally
{
SelectObject(Dc, SFont);
ReleaseDC(0, Dc);
}
return res;
}
tako da ni u jednom slucaju nisam koristio pogresne metode
Moze i sa X-Files primerom, generalno, probao sam.
Ali u mom slucaju elegantno je zavrsio posao nikomakov primer.
Jednostavno, zbunjen sam bio, jer mi ni na kraj pameti
nije palo da Canvas->TextWidth(Title->Caption) ne vraca
pravu vrednost. Ta metoda doslovce meri samo Regular Font Style
bez obzira da li ste dinamicki promenili u bold ! :(