Canvas draw on DBGrid
2 отговора
0 прегледа
Canvas draw on DBGrid
Здравейте !
Като променям цвета на дадена колона или на отделна клетка в DBGrid текста ми не подравнява на ляво като оригиналното подравняване е на дястно :
Ето как променям цвета
if AViewInfo.Item.Caption = 'Status' then
begin
ATextToDraw := AViewInfo.GridRecord.Values[AViewInfo.Item.Index];
ARec := AViewInfo.Bounds;
ACanvas.Canvas.Font.Color := clBlack;
ACanvas.Canvas.Brush.Color := clMoneyGreen;
ACanvas.Canvas.FillRect( ARec );
SetBkMode(ACanvas.Canvas.Handle, TRANSPARENT);
ACanvas.DrawText(ATextToDraw, AViewInfo.Bounds, 0);
ADone := True;
end;
пробвах да подравянавам с следната функция :
SetTextAlign(ACanvas.Canvas, TA_RIGHT);
но тогава всичо се разбърква самият грид направо полудява всичко се премества кой кадето си иска ??
Дали някой се е срещнал с този проблем ?
Благодаря предварително !
Като променям цвета на дадена колона или на отделна клетка в DBGrid текста ми не подравнява на ляво като оригиналното подравняване е на дястно :
Ето как променям цвета
if AViewInfo.Item.Caption = 'Status' then
begin
ATextToDraw := AViewInfo.GridRecord.Values[AViewInfo.Item.Index];
ARec := AViewInfo.Bounds;
ACanvas.Canvas.Font.Color := clBlack;
ACanvas.Canvas.Brush.Color := clMoneyGreen;
ACanvas.Canvas.FillRect( ARec );
SetBkMode(ACanvas.Canvas.Handle, TRANSPARENT);
ACanvas.DrawText(ATextToDraw, AViewInfo.Bounds, 0);
ADone := True;
end;
пробвах да подравянавам с следната функция :
SetTextAlign(ACanvas.Canvas, TA_RIGHT);
но тогава всичо се разбърква самият грид направо полудява всичко се премества кой кадето си иска ??
Дали някой се е срещнал с този проблем ?
Благодаря предварително !
Поправка на въпроса ...
Чак като прочотех се осазнах че не сам описал правилно проблема
Това чертане ми подравнява всичко на ляво дори по default да е на дястно а бих искал аз да си определя продравняването !
Това чертане ми подравнява всичко на ляво дори по default да е на дястно а бих искал аз да си определя продравняването !
Подравняването се помни в tFields...
Подравняването се помни в tFields, на което текста ти го извеждаш в DBGrid.
Значи: вземаш подрвняването от филда, изчискяваш размера на текста, определяш ширината на колоната, определяш началото на текста, за да е ляво, централно или дясно изравнен текста и извеждаш текста:
Ето как е написано в делфи:
а в юнита DBGrids има една дълга процедура (разгледай я)
procedure WriteText(ACanvas: TCanvas; ARect: TRect; DX, DY: Integer;
const Text: string; Alignment: TAlignment; ARightToLeft: Boolean);
Значи: вземаш подрвняването от филда, изчискяваш размера на текста, определяш ширината на колоната, определяш началото на текста, за да е ляво, централно или дясно изравнен текста и извеждаш текста:
Ето как е написано в делфи:
procedure TCustomDBGrid.DefaultDrawDataCell(const Rect: TRect; Field: TField;
State: TGridDrawState);
var
Alignment: TAlignment;
Value: string;
begin
Alignment := taLeftJustify;
Value := '';
if Assigned(Field) then
begin
Alignment := Field.Alignment;
Value := Field.DisplayText;
end;
WriteText(Canvas, Rect, 2, 2, Value, Alignment,
UseRightToLeftAlignmentForField(Field, Alignment));
end;
а в юнита DBGrids има една дълга процедура (разгледай я)
procedure WriteText(ACanvas: TCanvas; ARect: TRect; DX, DY: Integer;
const Text: string; Alignment: TAlignment; ARightToLeft: Boolean);