СтатьиПрограммирование в Delphi

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

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

Специальных средств для настройки центровки текста хотя бы по столбцу не предусмотрено, поэтому делать это необходимо программными средствами, подобно механизму закраски ячеек StringGrid.

Для решения данной задачи воспользуемся процедурой DrawText и одним из ее параметров Format. Параметру Format можно назначить сразу группу значений через оператор “OR”. Для центровки текста в ячейках используются значения DT_CENTER, DT_LEFT и DT_RIGHT, для расположения по центру, по левой стороне и по правой стороне, соответственно.

Выполняется это так же как и окрашивание ячеек StringGrid в процессе срабатывания события OnDrawCell, где условиями определяется какой ячейке какой из значений параметра Format назначить.

procedure TForm1.MyStringGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var
Format: Word;
C: array[0..255] of Char;
begin
if ACol = 0 then
Format := DT_CENTER // первый столбец - положение текста по центру
else if ACol = 1 then
Format := DT_LEFT // второй столбец – положение текста по левому краю
else
Format := DT_RIGHT // остальные – положение текста по правому краю

if ARow = 0 then
Format := DT_CENTER // первая строка – положение текста по центру

MyStringGrid.Canvas.FillRect(Rect); // перерисовка ячейки
StrPCopy(C, MyStringGrid.Cells[ACol, ARow]); // преобразование строки в формат PChar
WinProcs.DrawText(MyStringGrid.Canvas.Handle, C, StrLen(C), Rect, Format); // вывод текста
end;

Для использования функции DrawText, необходимо подключить библиотеку WinProcs.

uses
WinProcs;

Выравнивание текста в ячейках Delphi StringGrid
Рисунок: Выравнивание текста в ячейках StringGrid


Комментарии

08.09.2015 11:18 PWL [гость]
И почему же на рисунке не выполнилось вот это?
// первый столбец - положение текста по центру
// второй столбец – положение текста по левому краю
08.09.2015 11:56 Антон Сенников [администратор]
PWL, добрый день.
Вероятно я не совсем удачно выбрал названия столбцов в примере - "Столбец 1", "Столбец 2". Это и вводит в заблуждение.
Имелось ввиду вот так:
"// первый столбец - положение текста по центру" - это "№ п/п";
"// второй столбец – положение текста по левому краю" - это "Название";
"// остальные – положение текста по правому краю" - это "Столбец 1", "Столбец 2", "Столбец 3".
Имя:
Текст комментария:
* В комментариях запрещено публиковать рекламные объявления. Сообщения, содержащие ссылки на сторонние ресурсы добавляется в скрытом режиме. Они будут открыты, если не нарушают установленных правил, после проверки.
Защита от спам-роботов (* Обязателельно укажите ответ на простой вопрос ниже.)
Под каким номером в алфавите буква «Б»? (цифра)