procedure TForm1.GridSumaDrawCell(Sender: TObject; ACol, ARow: Longint;
ARect: TRect; State: TGridDrawState);
var
dx: integer;
beginwith (Sender as TStringGrid).Canvas dobegin
Font := GridSuma.Font;
Pen.Color := clBlack;
if (ACol = 0) or (ARow = 0) thenbegin{ Рисуем заголовок }
Brush.Color := clBtnFace;
FillRect(ARect);
TextOut(ARect.Left, ARect.Top, GridSuma.Cells[ACol, ARow])
endelsebegin{ Рисуем ячейку с правым выравниванием }
Brush.Color := clWhite;
FillRect(ARect);
dx := TextWidth(GridSuma.Cells[ACol, ARow]) + 2;
TextOut(ARect.Right - dx, ARect.Top, GridSuma.Cells[ACol, ARow])
endendend;
Here's the translation of the content into Russian:
Ваш подход к правому выравниванию ячеек в TStringGrid корректен. Код, который вы предоставили, эффективно рисует содержимое ячеек с правым выравниванием при условии, что индекс столбца ACol не равен 0 (то есть это обычная ячейка, а не заголовок первого столбца).
Вот разбор вашего кода:
Вы доступ yourselves к свойству Canvas объекта отправителя (Sender as TStringGrid) и устанавливаете его шрифт в соответствие с шрифтом грида.
Вы устанавливаете цвет пера в черный для целей рисования.
В случае, когда ACol равен 0 или ARow равен 0, вы рисуете заголовок ячейки, заполняя ее светло-серым цветом (clBtnFace) и записывая содержимое ячейки в верхнем левом углу прямоугольника (ARect). Это предполагает, что первый столбец является заголовком.
Для обычных ячеек (то есть ACol > 0 и ARow > 0), вы заполняете прямоугольник белым цветом (clWhite) и затем записываете содержимое ячейки на правой границе прямоугольника, смещаясь на ширину текста плюс 2 пикселя (dx := TextWidth(GridSuma.Cells[ACol, ARow]) + 2). Это эффективно выравнивает текст по правому краю.
Ваш код эффективен и легко понятен. Однако я хотел бы предложить минимальное улучшение:
Вместо использования TextWidth для расчета смещения dx, вы могли бы использовать метод Canvas.TextWidth, который возвращает ширину текста в пикселях. Это сделает ваш код более компактным и легче для чтения.
Вот обновленный код:
procedureTForm1.GridSumaDrawCell(Sender:TObject;ACol,ARow:Longint;ARect:TRect;State:TGridDrawState);vardx:integer;beginwith(SenderasTStringGrid).CanvasdobeginFont:=GridSuma.Font;Pen.Color:=clBlack;if(ACol=0)or(ARow=0)thenbegin{ Рисуем заголовок }Brush.Color:=clBtnFace;FillRect(ARect);TextOut(ARect.Left,ARect.Top,GridSuma.Cells[ACol,ARow])endelsebegin{ Рисуем ячейку с правым выравниванием }Brush.Color:=clWhite;FillRect(ARect);dx:=TextWidth(GridSuma.Cells[ACol,ARow])+2;TextOut(ARect.Right-dx,ARect.Top,GridSuma.Cells[ACol,ARow])endendend;
Данное описание статьи Правое выравнивание ячеек TStringGrid реализовано с помощью процедуры TForm1.GridSumaDrawCell, которая рисует заголовки и ячейки таблицы с правым выравниванием текста.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.