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

Вниз

ListView с внешним скролом   Найти похожие ветки 

 
Gu   (2010-10-31 17:03) [0]

На форме валяются ListView1 (из вкладки Win32) и ScrollBar1 (из стандартных компонент - вкладка Standart)

ListView заполняется 300и итемами от балды (в режиме просмотра list (с нижним скроллбаром)). Скроллбар отключаю через ShowScrollBar(ListView1.Handle, SB_HORZ, FShowHoriz); на листвиеве он пропадает.

Теперь вопрос: как прикрутить управление внешнего ScrollBar1 к ListView1?
Т.е. если я допустим кладу на форму кнопку и в ее клике пишу listview1.Scroll(-1,0); - то список скролится вверх и listview1.Scroll(1,0); - вниз. А как узнать текущую позицию скрола чтобы привязать к Scrollbar1.position - у Listview"a не вижу свойств про скролинг - типа макс\мин\куррент позитион

Т.е. надо чтобы листвиев скролился этим внешним скролбаром и соблюдались бы проц. отношения его бегунка относительно позиции в листвиеве при перемещении по списку.

Спасибо.


 
clickmaker ©   (2010-10-31 17:55) [1]

http://msdn.microsoft.com/ru-ru/library/bb787583.aspx


 
Gu   (2010-10-31 17:59) [2]

...мм, сложновато.. :_(
можно кусок кода на дельфях в качестве примера?


 
Gu   (2010-10-31 18:14) [3]

так не работает, может не так юзаю?

procedure TForm1.ScrollBar1Change(Sender: TObject);
var LPSCROLLINFO:tSCROLLINFO;
begin
form1.Caption:=inttostr(scrollbar1.Position);
getscrollinfo(scrollbar1.Handle,SB_HORZ,LPSCROLLINFO);
setscrollinfo(listview1.Handle,SB_HORZ,LPSCROLLINFO,true);
end;


 
clickmaker ©   (2010-10-31 18:27) [4]

cbSize
   UINT

   Specifies the size, in bytes, of this structure. The caller must set this to sizeof(SCROLLINFO).


 
Gu   (2010-10-31 18:59) [5]

добавил

FillChar(LPSCROLLINFO,SizeOf(LPSCROLLINFO),0);
LPSCROLLINFO.cbsize:=SizeOf(LPSCROLLINFO);
LPSCROLLINFO.fmask:=SIF_TRACKPOS;
getscrollinfo(listview1.Handle,SB_HORZ,LPSCROLLINFO);
form1.Caption:=inttostr(LPSCROLLINFO.nTrackPos)+" "+inttostr(LPSCROLLINFO.nMin)+" "+inttostr(LPSCROLLINFO.nmax);

nTrackPos отображается верно, а min-max = 0

где нетак?


 
clickmaker ©   (2010-10-31 19:01) [6]

внимательней читай страничку по сцылке


 
Gu   (2010-10-31 19:04) [7]

ааа.. дошло.
LPSCROLLINFO.fmask:=SIF_RANGE; надо ставить для min-max запроса.

блин, а все сразу оно запросить не может?


 
Gu   (2010-10-31 19:04) [8]

ааа.. дошло.
LPSCROLLINFO.fmask:=SIF_RANGE; надо ставить для min-max запроса.

блин, а все сразу оно запросить не может?


 
clickmaker ©   (2010-10-31 19:11) [9]


> а все сразу оно запросить не может?

а про битовые операции слышали?


 
Gu   (2010-10-31 19:16) [10]

угу, зафурычило, спасибо!

Procedure GSi;
var LPSCROLLINFO:tSCROLLINFO;
Begin
FillChar(LPSCROLLINFO,SizeOf(LPSCROLLINFO),0);
LPSCROLLINFO.cbsize:=SizeOf(LPSCROLLINFO);
LPSCROLLINFO.fmask:=SIF_RANGE+SIF_TRACKPOS;
getscrollinfo(form1.listview1.Handle,SB_HORZ,LPSCROLLINFO);
form1.ScrollBar1.Min:=LPSCROLLINFO.nMin;
form1.ScrollBar1.Max:=LPSCROLLINFO.nMax;
form1.ScrollBar1.Position:=LPSCROLLINFO.nTrackPos;
form1.Caption:=inttostr(LPSCROLLINFO.nTrackPos)+" "+inttostr(LPSCROLLINFO.nMin)+" "+inttostr(LPSCROLLINFO.nmax);
End;


 
Gu   (2010-10-31 20:17) [11]

кстати маска может еще быть fmask:=SIF_ALL;

интересна, а почему не работает

setscrollinfo(form1.ScrollBar1.Handle,SB_HORZ,LPSCROLLINFO,true);

если вставить ее вместо

form1.ScrollBar1.Min:=LPSCROLLINFO.nMin;
form1.ScrollBar1.Max:=LPSCROLLINFO.nMax;
form1.ScrollBar1.Position:=LPSCROLLINFO.nTrackPos;

ведь значения правильные передаются?


 
clickmaker ©   (2010-10-31 20:33) [12]


> а почему не работает
>
> setscrollinfo(form1.ScrollBar1.Handle,SB_HORZ,LPSCROLLINFO,
> true);

SB_CTL?


 
Gu   (2010-10-31 22:36) [13]

да, помогло, спасиба

но терь не работает (вернее работает, но не так) обратная:

LPSCROLLINFO.fmask:=SIF_ALL;
getscrollinfo(form1.scrollbar1.Handle,SB_CTL,LPSCROLLINFO);
setscrollinfo(form1.listview1.Handle,SB_HORZ,LPSCROLLINFO,true);

при изменении скролбара1 список не скролится, а если у листвиева не отключать скрол, то при изменении скролбара1 видно, что бегунок у листвиевовского скрола ползает аналогично скролбару1, но при этом скролинга самого списка не происходит.
интересно что при form1.Caption:=..распечатка значений.. при изменении скролбара1 мышкой значение позиции nTrackPos=0, а изменяется только если с клавы вправо-влево двигать кнопками..
как быть?

p.s. вы мне специально по одной идейке подкидываете, чтобы больше думал? ;)


 
Gu   (2010-11-01 19:22) [14]

вот исходник (8кб)
http://files.mail.ru/XRN4WQ

1. заполняем
2. бегаем по списку стрелками - все ок, скролинг изменяется
3. изменяем скролинг маусом - скролин окна изменяется, а скролинг списка не происходит :(

помогите доделать плз!


 
Gu   (2010-11-01 19:23) [15]

зеркало на всякий случай http://rapidshare.com/files/428325009/LvSt.zip



Страницы: 1 вся ветка

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

Наверх





Память: 0.48 MB
Время: 0.004 c
2-1288624179
cyber-pilot
2010-11-01 18:09
2011.01.23
Как перехватить вставку из буфера в комбобокс?


15-1286210774
fen1ks
2010-10-04 20:46
2011.01.23
построение параболы по 3 точкам


2-1288203552
ZV
2010-10-27 22:19
2011.01.23
Как изменить шрифт набираемого кода в Delphi2009


15-1286310553
Юрий
2010-10-06 00:29
2011.01.23
С днем рождения ! 6 октября 2010 среда


2-1288978653
Aleks
2010-11-05 20:37
2011.01.23
Delphi и сканер штрих-кода





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