![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не могу сделать нормальный Resize на KOLListView [Delphi, Windows]
DVK © (2005-12-22 16:43:00)Есть KolListView на форме с выравниванием caClient. В ListView 2 колонки. Форма имеет изменяемые размеры. Захотел сделать, чтобы В ListView никогда не было горизонтального скроллбара. Для этого будем считать первую колонку фиксированной ширины, а вторую - менять размеры в зависимости от размера формы.
Написал такой обработчик на ListView OnResize:
LV.LVColWidth[ 1 ] := lv.ClientWidth-lv.LVColWidth[0]-2;
Работает некорректно - при уменьшении ширины формы (с помощью мыши, разумеется) на ListView мелькает горизонтальный ScrollBar и иногда при остановке Resize'a он остаётся на ListView.
Посоветуйте, что делать?
DVK (2005-12-23 08:55:00) [1]Кажется, более-менее решил проблему - написал в процедуре FormResize:
LV.LVColWidth[ 1 ] := form.ClientWidth-lv.LVColWidth[0]-(lv.Width-lv.ClientWidth);
Все остальные процедуры выкинул.
Теперь, правда при увелицении размера формы мелькает горизонтальный скролл, но хоть на экране не остаётся, и то ладно.
DVK (2005-12-23 08:09:00) [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;
Но опять грабли - у меня не получилось узнать, видим ои вертикальный скролл на экране или нет. Может, кто подскажет, как это узнать.
ECM (2005-12-22 18:16:00) [3]Хлопотное это дело... :) Лучше как-то без этого выкрутиться...(имхо)
Но можно попробовать следующий трюк:
...
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;
Вроде не мелькает и не остается...