Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Scroll Bar


Автор: HappyLife 11.6.2008, 10:58
Приветсвую вас уважаемые форумчане. Возник у меня вопрос, следующего характера. Каким образом я могу определить ширину scroll bar'а появляющемся в TDBGrid и, а также, отловить этот самый момент появления. Это крайне важно, для автоматического резайзинга столбцов, при изменении размеров TDBGrid.

С Уважением Игорь.

Автор: Palladin 12.6.2008, 05:54
Ну сам DBGrid появляется во время FormCreate, а ширина его DBGrid->Width. Вообще делай так, узнавай ширину а при FormActive формы на которой DBGrid ставь обработчик , в котором узнавай ширину уже появившегося DBGrid, изменяй ширину столбцов, вот и все smile 

Автор: SerK 12.6.2008, 09:00
У формы есть свойство OnResize, там и нужно отлавливать.

Автор: Palladin 12.6.2008, 16:54
Цитата(SerK @  12.6.2008,  09:00 Найти цитируемый пост)
У формы есть свойство OnResize, там и нужно отлавливать
 Он вроде про DBGrid спрашивал smile 

Автор: Rrader 12.6.2008, 17:36
HappyLife, поигрался с компонентом. Вертикальный скролл у него всегда есть. Отследить появление горизонтального скролла проблематично. Сам факт наличия определяется кодом:
Код

return (GetWindowLong(Form1->DBGrid1->Handle, GWL_STYLE) & WS_HSCROLL); // True - если есть

Однако событие WM_STYLECHANGED не срабатывает из-за тупой специфики некоторых API-функций smile  (а там в шоколаде можно было бы проверить).

А поэтому вешать код проверки оптимально не на что. Могу советовать только на WM_PAINT в оконную процедуру + флаговая система.

Автор: HappyLife 14.6.2008, 13:19
Rrader, 
Однако и этот подход мне кажется крайне грамотным. Спасибо, буду пробовать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)