![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ListView с внешним скролом
Gu © (2010-10-31 17:03:00)На форме валяются 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 не вижу свойств про скролинг - типа макс\мин\куррент позитион
Т.е. надо чтобы листвиев скролился этим внешним скролбаром и соблюдались бы проц. отношения его бегунка относительно позиции в листвиеве при перемещении по списку.
Спасибо.
Gu (2010-11-01 19:23:00) [1]зеркало на всякий случай http://rapidshare.com/files/428325009/LvSt.zip
Gu (2010-11-01 19:22:00) [2]вот исходник (8кб)
http://files.mail.ru/XRN4WQ
1. заполняем
2. бегаем по списку стрелками - все ок, скролинг изменяется
3. изменяем скролинг маусом - скролин окна изменяется, а скролинг списка не происходит :(
помогите доделать плз!
Gu (2010-10-31 22:36:00) [3]да, помогло, спасиба
но терь не работает (вернее работает, но не так) обратная:
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. вы мне специально по одной идейке подкидываете, чтобы больше думал? ;)
clickmaker (2010-10-31 20:33:00) [4]
> а почему не работает
>
> setscrollinfo(form1.ScrollBar1.Handle,SB_HORZ,LPSCROLLINFO,
> true);
SB_CTL?
Gu (2010-10-31 20:17:00) [5]кстати маска может еще быть 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;
ведь значения правильные передаются?
Gu (2010-10-31 19:16:00) [6]угу, зафурычило, спасибо!
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;
clickmaker (2010-10-31 19:11:00) [7]
> а все сразу оно запросить не может?
а про битовые операции слышали?
Gu (2010-10-31 19:04:00) [8]ааа.. дошло.
LPSCROLLINFO.fmask:=SIF_RANGE; надо ставить для min-max запроса.
блин, а все сразу оно запросить не может?
Gu (2010-10-31 19:04:00) [9]ааа.. дошло.
LPSCROLLINFO.fmask:=SIF_RANGE; надо ставить для min-max запроса.
блин, а все сразу оно запросить не может?
clickmaker (2010-10-31 19:01:00) [10]внимательней читай страничку по сцылке
Gu (2010-10-31 18:59:00) [11]добавил
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 18:27:00) [12]cbSize
UINT
Specifies the size, in bytes, of this structure. The caller must set this to sizeof(SCROLLINFO).
Gu (2010-10-31 18:14:00) [13]так не работает, может не так юзаю?
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;
Gu (2010-10-31 17:59:00) [14]...мм, сложновато.. :_(
можно кусок кода на дельфях в качестве примера?
clickmaker (2010-10-31 17:55:00) [15]http://msdn.microsoft.com/ru-ru/library/bb787583.aspx