Форум: "Начинающим";
Текущий архив: 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