Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];

Вниз

Не могу сделать нормальный 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 вся ветка

Форум: "KOL";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.052 c
2-1159355584
TakTak
2006-09-27 15:13
2006.10.15
вызов функции из DLL динамически.


15-1158684060
GanibalLector
2006-09-19 20:41
2006.10.15
Джеф Раскин "Интерфейс"


2-1159379107
dreamse
2006-09-27 21:45
2006.10.15
Как вытащить имя файла из пусти без расширения ?


5-1140943637
Reset
2006-02-26 11:47
2006.10.15
Default - значения свойств


15-1158777078
ArtemESC
2006-09-20 22:31
2006.10.15
BC_31, как откомпилить следующее...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский