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

Автоматический подбор ширины колонок для TStringGrid или TDrawGrid

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

Автоматический подбор ширины колонок для TStringGrid или TDrawGrid

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{   This will resize the columns of a TStringGrid / TDrawGrid (text 
    only!) so the text is completely visble. To save some time, 
    it uses the first 10 rows only, but that should be easy to fix, 
    if you need more. }

 // we need this to access protected methods 
type
   TGridHack = class(TCustomGrid);

 procedure ResizeStringGrid(_Grid: TCustomGrid);
 var
   Col, Row: integer;
   Grid: TGridHack;
   MaxWidth: integer;
   ColWidth: integer;
   ColText: string;
   MaxRow: integer;
   ColWidths: array of integer;
 begin
   Grid := TGridHack(_Grid);
   SetLength(ColWidths, Grid.ColCount);
   MaxRow := 10;
   if MaxRow > Grid.RowCount then
     MaxRow := Grid.RowCount;
   for Col := 0 to Grid.ColCount - 1 do
   begin
     MaxWidth := 0;
     for Row := 0 to MaxRow - 1 do
     begin
       ColText  := Grid.GetEditText(Col, Row);
       ColWidth := Grid.Canvas.TextWidth(ColText);
       if ColWidth > MaxWidth then
         MaxWidth := ColWidth;
     end;
     if goVertLine in Grid.Options then
       Inc(MaxWidth, Grid.GridLineWidth);
     ColWidths[Col]      := MaxWidth + 4;
     Grid.ColWidths[Col] := ColWidths[Col];
   end;
 end;

Перевод контента на русский язык:

Код Delphi, который изменяет размеры столбцов TStringGrid или TDrawGrid для полного отображения текста в каждом столбце, использует хак для доступа к защищенным методам контроля grid.

Рассмотрим шаги кода:

  1. Определяется тип TGridHack, который наследуется от TCustomGrid. Это используется для доступа к защищенным методам контроля grid.
  2. Процедура ResizeStringGrid принимает объект TCustomGrid в качестве входного параметра и изменяет размеры столбцов grid на основе текста в каждом столбце.
  3. Код проходит по каждому столбцу grid и рассчитывает максимальную ширину, необходимую для этого столбца, путем исследования первых 10 строк (либо меньше, если grid имеет менее 10 строк).
  4. Для каждого столбца код получает текст ячеек в первых 10 строках с помощью GetEditText, рассчитывает ширину текста с помощью TextWidth и хранит максимальную ширину.
  5. Если в grid включен вертикальный линейный опция (goVertLine), код добавляет ширину линии grid к максимальной ширине.
  6. Код затем устанавливает ширину столбца для каждого столбца в расчетную максимальную ширину плюс 4 (для некоторых отступов).
  7. Наконец, код вызывает свойство ColWidths контроля grid для установки новых размеров столбцов.

Код использует хак для доступа к защищенным методам, создавая экземпляр TGridHack и кастинг входного объекта grid в него. Это позволяет коду вызывать защищенные методы, такие как GetEditText и Canvas.TextWidth.

В целом, этот код полезен для динамического изменения размеров столбцов TStringGrid или TDrawGrid на основе содержимого текста в каждом столбце.

Альтернативное решение без хака:

procedure ResizeStringGrid(_Grid: TCustomGrid);
  var
    Col, Row: integer;
    GridInfo: TGridInfo;
    MaxWidth: integer;
    ColText: string;
begin
  for Col := 0 to _Grid.ColCount - 1 do
  begin
    MaxWidth := 0;
    for Row := 0 to _Grid.RowCount - 1 do
    begin
      GridInfo := _Grid.GetCellText(Col, Row);
      ColText := GridInfo.Text;
      if GridInfo.Canvas.TextWidth(ColText) > MaxWidth then
        MaxWidth := GridInfo.Canvas.TextWidth(ColText);
    end;
    if goVertLine in _Grid.Options then
      Inc(MaxWidth, _Grid.GridLineWidth);
    _Grid.ColWidths[Col] := MaxWidth + 4;
  end;
end;

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

Автоматический подбор ширины колонок для TStringGrid или TDrawGrid позволяет обеспечить полную видимость текста, используя только первые 10 строк.


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

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




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


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


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:48:44/0.0059719085693359/1