Советы по Delphi

       

Выравнивание колонок StringGrid I


Организуйте обработчик события сетки OnDrawCell. Создайте код обработчика подобный этому:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Longint;Rect: TRect; State: TGridDrawState);varTxt: array [0..255] of Char;beginStrPCopy(Txt, StringGrid1.Cells[Col, Row]);SetTextAlign(StringGrid1.Canvas.Handle,GetTextAlign(StringGrid1.Canvas.Handle)and not(TA_LEFT OR TA_CENTER) or TA_RIGHT);ExtTextOut(StringGrid1.Canvas.Handle, Rect.Right - 2, Rect.Top + 2,ETO_CLIPPED or ETO_OPAQUE, @Rect, Txt, StrLen(Txt), nil);end;

Поэкспериментируйте с кодом и посмотрите на результаты, прежде чем решить как вам больше нравится.

Успехов.

Kurt [000647]


Нижеприведенный код выравняет данные компонента по правому краю:

procedure TForm1.StringGrid1DrawCell (Sender: TObject; Col, Row: Longint; Rect: TRect; State: TGridDrawState);var lRow, lCol : Longint;beginlRow := Row;lCol := Col;with Sender as TStringGrid, Canvas do beginif (gdSelected in State) then beginBrush.Color := clHighlight;endelse if (gdFixed in State) then beginBrush.Color := FixedColor;endelse beginBrush.Color := Color;end;FillRect(Rect);SetBkMode(Handle, TRANSPARENT);SetTextAlign(Handle, TA_RIGHT);TextOut(Rect.Right-2, Rect.Top+2, Cells[lCol, lRow]);end;end;

Хитрость заключается в установке выравнивания текста TA_RIGHT, позволяющей осуществлять вывод текста, начиная с правой стороны (от правой границы). Не бойтесь, текст не будет напечатан задом наперед!

Вы наверное уже обратили внимание на объявление локальных переменных lCol и lRow. На входе я присваиваю им значения параметров Col и Row (имя, которое дало мне Delphi IDE). Дело в том, что объект TStringGrid имеет свойства с именами Col и Row. Эти свойства будут доступны в теле блока "with Sender as TStringGrid", но они не являются параметрами для всех обявленных в шапке блока объектов ((речь идет об объекте Canvas, у которого нет свойств с именами Col и Row - В.О.)). [000678]



Содержание раздела