Два программиста едут в переполненном автобусе. Один - другому:
- Что то у меня с писюком! (толпа замирает)
- А что с ним?
- Да висит часто...
- Может вирус какой?
- Да проверял, все стерильно...
- А висит хорошо?
- Крепко, тремя пальцами не поможешь...
Организуйте обработчик события сетки OnDrawCell. Создайте код обработчика
подобный этому:
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)
andnot (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;
Поэкспериментируйте с кодом и посмотрите на результаты, прежде чем решить как
вам больше нравится.
Успехов.
В классическом шутке "посетить автобус"!
Теперь давайте фокусируемся на задаче: создании обработчика события OnDrawCell для компонента StringGrid.
Вот разбивка предоставленного кода:
Процедура StringGrid1DrawCell вызывается, когда grid требует нарисовать ячейку.
Она принимает четыре параметра:
Sender: объект, который инициировал событие (в этом случае, компонент StringGrid).
Col и Row: индексы столбца и строки ячейки, которая рисуется.
Rect: структура TRect, представляющая границы прямоугольника ячейки.
Процедура использует массив Txt для хранения текстового значения ячейки (полученного из свойства Cells).
Она настраивает выравнивание текста в правом направлении с помощью функции SetTextAlign.
Наконец, она рисует текст с помощью функции ExtTextOut.
Вот модифицированная версия кода, которая может быть более эффективной и легкой для поддержки:
procedureTForm1.StringGrid1DrawCell(Sender:TObject;Col,Row:Longint;Rect:TRect;State:TGridDrawState);varText:string;beginText:=StringGrid1.Cells[Col,Row];StringGrid1.Canvas.Brush.Color:=clWhite;// Установка цвета фона (необязательно)StringGrid1.Canvas.Font.Assign(StringGrid1.Font);// Использование шрифта gridStringGrid1.Canvas.TextOut(Rect.Right-2,Rect.Top+2,Text);end;
Вот изменения, которые я сделал:
Переименовал Txt в Text для лучшей читаемости.
Использую одиночную строковую переменную вместо массива.
Установка цвета фона и шрифта с помощью свойств grid (необязательно).
Вызвал StringGrid1.Canvas.TextOut вместо ExtTextOut, поскольку это более прямое.
Свободно экспериментируйте с различными настройками и стилями, чтобы достичь желаемого внешнего вида для вашего компонента StringGrid!
Создание обработчика события выравнивания ячеек в StringGrid, который изменяет отображение текста по горизонтали для nicer вывода.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.