Всех приветствую!
Ищу решение для смены ширины колонки не только за заголовок, но просто за правую границу колонки (по аналогии с TOIPropertyGrid) - хочется сделать наследника TCustomGrid, обладающего этим функционалом.
В Delphi всё было прозрачно - переопределил CalcSizingState, в Lazarus пока остановился вот на чём:
Модуль $LAZARUS\lcl\grids.pas:
TCustomGrid.MouseMove - из него вызывается HeadersMouseMove, предположительно переключая fGridState в состояние gsColSizing.
Далее вызывается doColSizing(X,Y), который уже меняет курсор мыши и т.д. и т.п.
Пока не могу найти конкретное место, где меняется статус на gsColSizing, т.е. где при движении мыши определяется, располагается ли указатель мыши над "sizeable" областью.
Есть ли у кого идеи?
TCustomGrid: менять ширину колонки не только в заголовке?
Модератор: Модераторы
хочется сделать наследника TCustomGrid, обладающего этим функционалом.
Код: Выделить всё
StringGrid1.Options := StringGrid1.Options + [goColSizing];
StringGrid1.ExtendedColSizing := TRUE;
Добавлено спустя 11 минут 49 секунд:
з.ы. по существу вопроса, грид уходит в goColSizing не в момент движения кнопки, а в момент её нажатия - т.е. начинать раскопки надо с метода TCustomGrid.MouseDown.
yurgel, пристыжён (за незнание готового функционала) и благодарен. Я уже планировал переписывать от TCustomControl посредством копипаста и дальнейшей замены и модификации методов
Относительно MouseDown - не совсем согласен. Я уже смотрел в этот метод, везде встречается проверка возможности менять ширину колонки (goColSizing), но, помимо этого, опять же везде проверяется факт, что resize возможно начать (по факту наличия соответствующего курсора: Cursor=crHSplit). Опять же, форма курсора меняется до нажатия кнопок мыши.
Считаю свой вопрос закрытым, ещё раз спасибо!
Относительно MouseDown - не совсем согласен. Я уже смотрел в этот метод, везде встречается проверка возможности менять ширину колонки (goColSizing), но, помимо этого, опять же везде проверяется факт, что resize возможно начать (по факту наличия соответствующего курсора: Cursor=crHSplit). Опять же, форма курсора меняется до нажатия кнопок мыши.
Считаю свой вопрос закрытым, ещё раз спасибо!
я очепятался, имелось в виду gsColSizing. грид сваливается в него именно на MouseDown, в зависимости от разных настроек и goColSizing.
