Текущий архив: 2006.10.15;
Скачать: CL | DM;
ВнизНе могу сделать нормальный Resize на KOLListView Найти похожие ветки
← →
DVK (2005-12-22 16:43) [0]Есть KolListView на форме с выравниванием caClient. В ListView 2 колонки. Форма имеет изменяемые размеры. Захотел сделать, чтобы В ListView никогда не было горизонтального скроллбара. Для этого будем считать первую колонку фиксированной ширины, а вторую - менять размеры в зависимости от размера формы.
Написал такой обработчик на ListView OnResize:
LV.LVColWidth[ 1 ] := lv.ClientWidth-lv.LVColWidth[0]-2;
Работает некорректно - при уменьшении ширины формы (с помощью мыши, разумеется) на ListView мелькает горизонтальный ScrollBar и иногда при остановке Resize"a он остаётся на ListView.
Посоветуйте, что делать?
← →
ECM © (2005-12-22 18:16) [1]Хлопотное это дело... :) Лучше как-то без этого выкрутиться...(имхо)
Но можно попробовать следующий трюк:
...
Timer1 := NewTimer( 200 );
Timer1.OnTimer := Timer1Timer;
...
procedure TForm1.Timer1Timer(Sender: PObj);
begin
Timer1.Enabled := FALSE;
LV.LVColWidth[ 1 ] := LV.ClientWidth-LV.LVColWidth[0];
LV.LVOptions := LV.LVOptions - [lvoNoScroll];
end;
procedure TForm1.LVResize(Sender: PObj);
begin
LV.LVOptions := LV.LVOptions + [lvoNoScroll];
Timer1.Enabled := TRUE;
end;
Вроде не мелькает и не остается...
← →
DVK (2005-12-23 08:09) [2]Что-то не совсем так работает Ваш вариант. Во-первых, не прорисовывается Header у ListView (точнее, не прорисовывается та часть, которая добавилась после Resize"a формы. Во-вторых, скроллбара теперь нет вовсе - даже при переполнении списка. Я посмотрел - программа теперь постоянно крутится между процедурами LVResize и Timer1Timer? а всё потому, что в kol.SetLVOptions стоит посылка WM_SIZE в ListView.
Пробовал подойти к решению проблемы сдругой стороны - определить, есть ли у ListView вертикальный скроллбар и, если есть, вычислить:
if bVertScrollPresent then w:=GetSystemMetrics(SM_CXVSCROLL) else w:=0;
LV.LVColWidth[ 1 ] := Form.ClientWidth-lv.LVColWidth[0]-w-1;
Но опять грабли - у меня не получилось узнать, видим ои вертикальный скролл на экране или нет. Может, кто подскажет, как это узнать.
← →
DVK (2005-12-23 08:55) [3]Кажется, более-менее решил проблему - написал в процедуре FormResize:
LV.LVColWidth[ 1 ] := form.ClientWidth-lv.LVColWidth[0]-(lv.Width-lv.ClientWidth);
Все остальные процедуры выкинул.
Теперь, правда при увелицении размера формы мелькает горизонтальный скролл, но хоть на экране не остаётся, и то ладно.
Страницы: 1 вся ветка
Текущий архив: 2006.10.15;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.048 c