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

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

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

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

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

 procedure SetGridColumnWidths(Grid: TStringGrid;
   const Columns: array of Integer);
 { 
  When you double-Click on a Column-Header the Column 
  autosizes to fit its content 

  Bei Doppelklick auf eine fixierte Spalte passt sich 
  die Spaltenbreite der Textgrosse an 
}

   procedure AutoSizeGridColumn(Grid: TStringGrid; column, min, max: Integer);
     { Set for max and min some minimal/maximial Values}
     { Bei max and min kann eine Minimal- resp. Maximalbreite angegeben werden}
   var
     i: Integer;
     temp: Integer;
     tempmax: Integer;
   begin
     tempmax := 0;
     for i := 0 to (Grid.RowCount - 1) do
     begin
       temp := Grid.Canvas.TextWidth(Grid.cells[column, i]);
       if temp > tempmax then tempmax := temp;
       if tempmax > max then
       begin
         tempmax := max;
         break;
       end;
     end;
     if tempmax < min then tempmax := min;
     Grid.ColWidths[column] := tempmax + Grid.GridLineWidth + 3;
   end;

   procedure TForm1.StringGrid1DblClick(Sender: TObject);
   var
     P: TPoint;
     iColumn, iRow: Longint;
   begin
     GetCursorPos(P);
     with StringGrid1 do
     begin
       P := ScreenToClient(P);
       MouseToCell(P.X, P.Y, iColumn, iRow);
       if P.Y < DefaultRowHeight then
         AutoSizeGridColumn(StringGrid1, iColumn, 40, 100);
     end;
   end;

Программный код на Delphi, который автоматически изменяет ширину столбцов в компоненте TStringGrid, основываясь на содержимом ячеек при двойном клике по заголовку столбца. Процедура SetGridColumnWidths принимает массив целых чисел как входной параметр, представляющий индексы столбцов для изменения.

Разбор кода:

  1. Процедура AutoSizeGridColumn принимает три параметра: Grid, column, и min и max. Она рассчитывает оптимальную ширину для указанного столбца, основываясь на содержимом ячеек в этом столбце.
    • Она проходит по каждой строке в grid, измеряет ширину текста каждой ячейки в указанном столбце с помощью метода Canvas.TextWidth и хранит трекинг максимальной ширины найденной.
    • Если максимальная ширина превышает значение max, она устанавливает максимальную ширину в max и выходит из цикла.
    • Если максимальная ширина меньше значения min, она устанавливает максимальную ширину в min.
    • Наконец, она устанавливает ширину столбца в рассчитанной максимальной ширине плюс несколько пикселей для ширины границы grid и дополнительного пространства.
  2. Обработчик события StringGrid1DblClick вызывается при двойном клике по заголовку столбца. Он получает позицию курсора, конвертирует ее в позицию ячейки с помощью методов ScreenToClient и MouseToCell, и проверяет, была ли клика внутри области строк (т.е., не на границе grid).
    • Если клика была внутри области строк, он вызывает процедуру AutoSizeGridColumn для изменения ширины столбца.

Предложения по улучшению:

  • Вместо использования жестких значений min и max, рассмотрите возможность их конфигурирования через свойства или параметры.
  • Вы можете добавить визуальное обратное действие при изменении ширины столбца, например, анимацию изменения ширины или отображение индикатора прогресса.
  • Рассмотрите добавление поддержки изменения высоты строк на основе содержимого строк.
  • Если вы используете этот код в многопоточной среде, убедитесь, что обеспечивает синхронизацию доступа к grid и его столбцам для предотвращения потенциальных проблем.

Автоматическое определение ширины столбцов TStringGrid при двойном клике на заголовок столбца.


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

Получайте свежие новости и обновления по 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:46:18/0.0057661533355713/1