Canvas draw on DBGrid

2 отговора 0 прегледа
#1

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);
но тогава всичо се разбърква самият грид направо полудява всичко се премества кой кадето си иска ??
Дали някой се е срещнал с този проблем ?

Благодаря предварително !

Отговор
в отговор на Любo #2

Поправка на въпроса ...

Чак като прочотех се осазнах че не сам описал правилно проблема

Това чертане ми подравнява всичко на ляво дори по default да е на дястно а бих искал аз да си определя продравняването !

Отговор
в отговор на Любo #3

Подравняването се помни в tFields...

Подравняването се помни в tFields, на което текста ти го извеждаш в DBGrid.
Значи: вземаш подрвняването от филда, изчискяваш размера на текста, определяш ширината на колоната, определяш началото на текста, за да е ляво, централно или дясно изравнен текста и извеждаш текста:
Ето как е написано в делфи:

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);

Отговор