Компонент Delphi StringGrid









                                           ГЛАВНАЯ           СВОЙСТВА           СОБЫТИЯ           ПРИЁМЫ  ПРОГРАММИРОВАНИЯ



StringGrid Delphi

Выравнивание текста в ячейке




   При выводе текста в ячейку компонента StringGrid Delphi:

  StringGrid1.Cells[i, j]:='Текст выводится слева';

по умолчанию текст располагается у левого края ячейки. Однако, во многих случаях необходимо, чтобы текст располагался справа или по центру ячейки. Например, нумерация строк в нулевой колонке таблицы естественнее выглядит справа, а оглавление столбцов в нулевой строке - по центру.

   Для достижения такого эффекта можно воспользоваться свойством Canvas таблицы StringGrid. Дело в том, что текст нарисованный на "холсте" таблицы, и текст напечатанный, имеют одинаковые размеры, конечно при условии, что свойства, в том числе размеры, шрифтов одинаковы:

  StringGrid1.Canvas.Font.Size=StringGrid1.Font.Size;

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

  WCells:=StringGrid1.Cols[i];

и ширину "нарисованного" текста:

  var Text: String;

  WText:=StringGrid1.Canvas.TextWidth(Text);

   Теперь для вывода текста справа нужно в цикле добавлять по пробелу перед текстом до тех пор, пока размеры WCells и WText не сравняются. Для вывода текста по центру необходимо добавлять по пробелу и перед и после текста.

   Вот процедура, осуществляющая вывод текста в нужное положение - слева, по центру, или справа, использующая описанный метод:

// Тип переменной, задающий положение текста:
type
  Position=(_left, center, right);

implementation

{$R *.dfm}

function GridTextAlign(Grid: TStringGrid; Text: String;    i: Integer; where: Position): String;
var WCells: Integer;
begin
WCells:=Grid.ColWidths[i]-7;
//7 - корректировка для более точного вывода текста
Result:=Text;
with Grid, Grid.Canvas do
case where of
  center: while TextWidth(Result)<WCells do
            Result:=' '+Result+' ';
  right:  while TextWidth(Result)<WCells do
            Result:=' '+Result;
  _left:  ;
end;
end;

Конечно, без последней строчки:

  _left:  ;

можно и обойтись. Она использована для того, чтобы подчеркнуть тот факт, что при значении переменной:

where = _left

делать ничего не нужно, так как по умолчанию текст в ячейке компонента StringGrid Delphi и сам по себе располагается именно у левого края.
   Примечание: Знак подчёркивания в константе _left использован чтобы избежать её ассоциации со свойством StringGrid1.Left.

   Теперь, используя эту функцию, вывод, например, заголовков столбцов таблицы (глобальный массив var Capt: array of String) в центр ячеек можно сделать так:

procedure TForm1.GridTitle;
var i: Integer;
begin
with StringGrid1 do
 for i:=1 to ColCount-1 do
  Cells[i, 0]:=GridTextAlign(StringGrid1, Capt[i-1], i, center);
end;


Читайте также:
  • Как выделить несколько ячеек StringGrid Delphi

    Сайт из коллекции Компоненты Delphi    

    Карта сайта