Автор: Kurt
Организуйте обработчик события сетки OnDrawCell. Создайте код обработчика подобный этому:
Code: |
procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Longint; Rect: TRect; State: TGridDrawState); var Txt: array[0..255] of Char; begin StrPCopy(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; |
Нижеприведенный код выравняет данные компонента по правому краю:
Code: |
procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Longint; Rect: TRect; State: TGridDrawState); var lRow, lCol: Longint; begin lRow := Row; lCol := Col; with Sender as TStringGrid, Canvas do begin if (gdSelected in State) then begin Brush.Color := clHighlight; end else if (gdFixed in State) then begin Brush.Color := FixedColor; end else begin Brush.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 - В.О.)).
- Назад
- Вперёд >>
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!