Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.47 MB
Время: 0.053 c
1-1157096899
NiGGa
2006-09-01 11:48
2006.10.15
Переход D5 -> D7


1-1156821234
trackbar
2006-08-29 07:13
2006.10.15
Smooth ScrollBox :)


15-1158903145
Ega23
2006-09-22 09:32
2006.10.15
С Днём рождения! 22 сентября


2-1159342059
AdminSKBZ
2006-09-27 11:27
2006.10.15
MDI - сохранение и востановления


4-1148854024
Nickie
2006-05-29 02:07
2006.10.15
Работа с файлами в асинхронном режиме