Главная страница
    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.041 c
8-1142592661
Noby
2006-03-17 13:51
2006.10.15
Фильтры в DirectShow?


15-1158921694
Aust
2006-09-22 14:41
2006.10.15
сканер


15-1158874125
Cardinal
2006-09-22 01:28
2006.10.15
Забавная штучка


2-1159374810
ice321i
2006-09-27 20:33
2006.10.15
таблица не переходит в режим редактирования


15-1158838499
StriderMan
2006-09-21 15:34
2006.10.15
Софт для управления проектами





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский