Содержание материала

Автор: 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 - В.О.)).

 

Добавить комментарий

Не использовать не нормативную лексику.

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

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить