Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.01.23;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.012 c
15-1286569751
Юрий
2010-10-09 00:29
2011.01.23
С днем рождения ! 9 октября 2010 суббота


15-1286483351
Юрий
2010-10-08 00:29
2011.01.23
С днем рождения ! 8 октября 2010 пятница


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


15-1286517291
oxffff
2010-10-08 09:54
2011.01.23
Нужен совет. Скачать контент с Microsoft.


2-1288876929
Кирей
2010-11-04 16:22
2011.01.23
Недостаточно сведений из основной таблицы для обновления