TcxCanvas, ее отличие от TCanvas
Всем привет.
Позволю написать сегодня еще один занимательный вопросик. Делаю перерисовку tcxGrid. На стандартном гриде я делал замену булевых полей таким образом:
procedure TFormClient.DrawGridCheckBox(Canvas: TCanvas; Rect: TRect; Checked: boolean);
var
DrawFlags: Integer;
begin
Canvas.TextRect(Rect, Rect.Left + 1, Rect.Top + 1, ' ');
DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONPUSH or DFCS_ADJUSTRECT);
DrawFlags := DFCS_BUTTONCHECK or DFCS_ADJUSTRECT;// DFCS_BUTTONCHECK
if Checked then
DrawFlags := DrawFlags or DFCS_CHECKED;
DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, DrawFlags);
end;
С учетом того, что TcxCanvas имеет другую природу в отличие от TCanvas, я переписываю таким образом:
procedure TFormClient.DrawGridCheckBox(Canvas: TcxCanvas; Rect: TRect; Checked: boolean);
var
DrawFlags: Integer;
StrCanvas : TCanvas;
MyRect: TRect;
begin
StrCanvas.TextRect(Rect, Rect.Left + 1, Rect.Top + 1, ' ');
Canvas.CopyRect(MyRect, StrCanvas, Rect);
DrawFrameControl(Canvas.Handle, MyRect, DFC_BUTTON, DFCS_BUTTONPUSH or DFCS_ADJUSTRECT);
DrawFlags := DFCS_BUTTONCHECK or DFCS_ADJUSTRECT;// DFCS_BUTTONCHECK
if Checked then
DrawFlags := DrawFlags or DFCS_CHECKED;
DrawFrameControl(Canvas.Handle, MyRect, DFC_BUTTON, DrawFlags);
end;
Однако это не работает, вываливает ошибку памяти. По ассемблеру бегать и искать проблему не хочется. Суть такая, что не могу найти в tcxcanvas что-то подобного TextRect, так как именно с помощью его я перерисовывал некрасивые булевые цифры 1 и 0 и делал вполне пристойную птичку, если значение true в гриде. Документации нету такой подробной, просмотреть модули я тоже почему-то не могу, соответственно теряюсь в догадках, что зашито в эту TextExtend(). Хотелось бы найти что-то подобное TextRect. Кто может дать дельный совет? Есть тут мастера по этим вопросам)?
P.S. Напомню всем, кто забыл, TRect имеет такую структуру:
PRect = ^TRect;
TRect = record
case Integer of
0: (Left, Top, Right, Bottom: Longint);
1: (TopLeft, BottomRight: TPoint);
end;