Конференция "Начинающим" » резиновый stringgrid
 
  • валя © (11.01.19 22:18) [0]
    Здравствуйте. Подскажите как сделать  stringgrid чтобы ширина всех столбцов выравнивалась по ширине компонента в процентом соотношении и при смене ширины стриргрида столбцы бы маштабировались автоматически. Вообщем ситуация с появлениям горизонтального скрола крайне не приемлема. Также это нужно и при ресайзе любого из столбцов. Может есть и не stringgrid уже с готовым функционалом?
  • Сапёр (12.01.19 15:47) [1]
    эм... Может возьмите TListView в режиме vsReport и всё?
  • Германн © (13.01.19 02:35) [2]

    > Сапёр   (12.01.19 15:47) [1]

    TListView в режиме vsReport конечно выглядит гораздо "красивше", чем stringgrid. Но автоматическое масштабирование ширины колонок он точно также не поддерживает.
  • ВладОшин © (13.01.19 12:07) [3]
    TForm1 = class(TForm)
       pnl1: TPanel;
       sg1: TStringGrid;
       spl1: TSplitter;
       procedure FormCreate(Sender: TObject);
     private     { Private declarations }
       FOldSGWnd: TWndMethod;
       procedure FNewSGWnd(var Msg: TMessage);
     public
       { Public declarations }
     end;

    var
     Form1: TForm1;

    implementation
    {$R *.dfm}

    procedure TForm1.FNewSGWnd(var Msg: TMessage);
    begin
     if MSg.Msg = CM_INVALIDATE then
     begin
       Sleep(0); // равняем как надо
     end;
     FOldSGWnd(Msg);
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
     FOldSGWnd := sg1.WindowProc;
     sg1.WindowProc := FNewSGWnd;
    end;
  • Сапёр (13.01.19 12:31) [4]
    > не поддерживает

    А это что?:
    TListColumn.AutoSize:=True;
    С:
  • Германн © (14.01.19 02:10) [5]

    > А это что?:

    Из справки:
    "Specifies whether the list column automatically sizes itself to the width of its text.

    property AutoSize: Boolean;

    Description

    Use AutoSize to get or set whether the list column automatically sizes itself to the width of its text."
    Перевести на русский или сами справитесь?
  • Сапёр (15.01.19 07:31) [6]
    По ширине текста? Значит в вашей справке ошибка.
    Никогда оно себя так не вело. Ни в семёрке ни в Токио.
    Можете проверить, работает почти как хотел ТС, только без процентных - фиксированные не трогаются, остальные пропорционально.
  • Сапёр (15.01.19 07:54) [7]
    http://docwiki.embarcadero.com/Libraries/Rio/en/Vcl.ComCtrls.TListColumn.AutoSize

    > Use AutoSize to specify whether the column width should
    > automatically be adjusted when the width of the TListView
    > changes. All columns with the AutoSize property set to True
    > get resized proportionally when the TListView is resized.
  • KSergey © (16.01.19 11:37) [8]
    Просто написать обработчик на изменение ширины, в котором менять ширины столбцов как хочется
    Одна беда: написать алгоритм такого обработчика несколько не просто, т.к. изменение (пересчет) идёт при изменении ширины на каждый пиксель, а потому понятие "текущие пропорции ширин столбцов" внезапно сильно размазывается, т.к. сами ширины могут быть только дискретными, в 1 пиксель тоже.

    Потому даже когда мы поймём, что ширины (пропорции) надо хранить в double, всё равно останется вопрос: что брать за исходные пропорции ширин? как узнать "пользователь перестал изменять ширину", чтобы такие пропорции сохранить?

    А, понял
    Сохранять пропорции столбцов надо
    - изначально
    - после того как пользователь изменял ширины столбцов, не формы

    И всё будет очугей
 
Конференция "Начинающим" » резиновый stringgrid
Есть новые Нет новых   [134427   +34][b:0][p:0]