Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Правое выравнивание ячеек TStringGrid

Delphi , Компоненты и Классы , TStringGrid и TDrawGrid

Правое выравнивание ячеек TStringGrid

Я полагаю, это лучший метод:


procedure TForm1.GridSumaDrawCell(Sender: TObject; ACol, ARow: Longint;
  ARect: TRect; State: TGridDrawState);
var
  dx: integer;
begin
  with (Sender as TStringGrid).Canvas do
  begin
    Font := GridSuma.Font;
    Pen.Color := clBlack;
    if (ACol = 0) or (ARow = 0) then
    begin
      { Рисуем заголовок }
      Brush.Color := clBtnFace;
      FillRect(ARect);
      TextOut(ARect.Left, ARect.Top, GridSuma.Cells[ACol, ARow])
    end
    else
    begin
      { Рисуем ячейку с правым выравниванием }
      Brush.Color := clWhite;
      FillRect(ARect);
      dx := TextWidth(GridSuma.Cells[ACol, ARow]) + 2;
      TextOut(ARect.Right - dx, ARect.Top, GridSuma.Cells[ACol, ARow])
    end
  end
end;

Here's the translation of the content into Russian:

Ваш подход к правому выравниванию ячеек в TStringGrid корректен. Код, который вы предоставили, эффективно рисует содержимое ячеек с правым выравниванием при условии, что индекс столбца ACol не равен 0 (то есть это обычная ячейка, а не заголовок первого столбца).

Вот разбор вашего кода:

  1. Вы доступ yourselves к свойству Canvas объекта отправителя (Sender as TStringGrid) и устанавливаете его шрифт в соответствие с шрифтом грида.
  2. Вы устанавливаете цвет пера в черный для целей рисования.
  3. В случае, когда ACol равен 0 или ARow равен 0, вы рисуете заголовок ячейки, заполняя ее светло-серым цветом (clBtnFace) и записывая содержимое ячейки в верхнем левом углу прямоугольника (ARect). Это предполагает, что первый столбец является заголовком.
  4. Для обычных ячеек (то есть ACol > 0 и ARow > 0), вы заполняете прямоугольник белым цветом (clWhite) и затем записываете содержимое ячейки на правой границе прямоугольника, смещаясь на ширину текста плюс 2 пикселя (dx := TextWidth(GridSuma.Cells[ACol, ARow]) + 2). Это эффективно выравнивает текст по правому краю.

Ваш код эффективен и легко понятен. Однако я хотел бы предложить минимальное улучшение:

Вместо использования TextWidth для расчета смещения dx, вы могли бы использовать метод Canvas.TextWidth, который возвращает ширину текста в пикселях. Это сделает ваш код более компактным и легче для чтения.

Вот обновленный код:

procedure TForm1.GridSumaDrawCell(Sender: TObject; ACol, ARow: Longint;
  ARect: TRect; State: TGridDrawState);
var
  dx: integer;
begin
  with (Sender as TStringGrid).Canvas do
  begin
    Font := GridSuma.Font;
    Pen.Color := clBlack;
    if (ACol = 0) or (ARow = 0) then
    begin
      { Рисуем заголовок }
      Brush.Color := clBtnFace;
      FillRect(ARect);
      TextOut(ARect.Left, ARect.Top, GridSuma.Cells[ACol, ARow])
    end
    else
    begin
      { Рисуем ячейку с правым выравниванием }
      Brush.Color := clWhite;
      FillRect(ARect);
      dx := TextWidth(GridSuma.Cells[ACol, ARow]) + 2;
      TextOut(ARect.Right - dx, ARect.Top, GridSuma.Cells[ACol, ARow])
    end
  end
end;

Данное описание статьи Правое выравнивание ячеек TStringGrid реализовано с помощью процедуры TForm1.GridSumaDrawCell, которая рисует заголовки и ячейки таблицы с правым выравниванием текста.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TStringGrid и TDrawGrid ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 02:49:42/0.0032980442047119/0