Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Заколебавший ListView [D5]


Stany ©   (2002-08-17 15:32:00) 

Привет всем знатокам!Накипела тут тройка вопросов по вине ListView.Делаю вот такую штуку:в ListView вывожу список строк в которые можно входить как в "каталоги".При входе первая строка [..],затем другой список строк,а при выходе выбран тот "каталог",в который вошёл.Одна из проблем в том, что если при входе в "каталог" я выбрал элемент,который не вмещается в видимую часть ListView, ес-нно ListView делает скроллинг,то при выходе из "каталога" этот элемент выбран,но не виден пока не прокрутишь список.Пытался исправить это с помощью SetScrollPos, ScrollBox устанавливаеся в нужную позицию,но список не прокручиваеся;с ScrollWindow(),ListView.Scroll()-тоже не получается!
Другая проблема в том,что ListView медленно очищает и прорисовывает свои злементы с картинками.Можно как-то ускорить в этом случае ListView.Items.Clear?Взять к примеру такую рулезную вещь как Win Commander(да простят меня любители Far),так у него с бешеной скоростью обновляется список элементов в его листах, словно на асме написано;если Splitterом изменять размер панелей,то панель которая увеличивается как-то накладыватся на ту, которая уменьшается(но её размеры остаются прежними, потому что не появляется гор-ый ScrollBox).Мож кто знает кроме Christian Ghisler как это осуществить.Ну, ладно завалил тут я вас вопросами,вот привожу фрагмент кода,помогите кто может, please:

var
SelIndex,ScrollPos:integer;

procedure TMainForm.LoadFolders(Index:integer);
begin
ListView.Items.Clear;
ListView.SmallImages:=ImageList1;
...
begin
ListView.Items.BeginUpdate;
{Добавляем список строк}
ListView.Items.EndUpdate;
end;
ListView.Selected := ListView.Items[Index];
ListView.Selected.Focused := True
{Ничего из этого не помогает!}
{SetScrollPos(ListView.Handle,sb_Vert,ScrollPos,true);
ScrollWindow(ListView.Handle,0,ScrollPos,nil,nil);
ListView.Scroll(0,ScrollPos)}
end;

procedure TMainForm.LoadFiles;
var ImageCount:integer;
begin
ListView.Items.Clear;
ListView.Items.Add.Caption:=("[..]");
ListView.Items.Item[0].ImageIndex:=1;{Изображение стрелки наверх}
...
begin
ListView.Items.BeginUpdate;
{Добавляем список строк}
for ImageCount:=1 to ListView.Items.Count-1 do
ListView.Items[ImageCount].ImageIndex:=2;
ListView.Items.EndUpdate;
end;
ListView.Selected := ListView.Items[0];
ListView.Selected.Focused := True
end;

procedure TMainForm.ListViewDblClick(Sender: TObject);
begin
if ListView.Selected <> nil then
begin
if ListView.Selected.Caption="[..]" then
begin
LoadFolders(SelIndex);
end
else
begin
SelIndex:=ListView.Selected.Index;
ScrollPos:=GetScrollPos(ListView.Handle,sb_Vert);
LoadFiles;
end
end
end;

procedure TMainForm.ListViewKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
case key of
VK_Return: ListViewDblClick(Sender);
end
end;


Diamond Cat   (2002-08-19 01:59:00) [1]

Естественно не получается , т.к. Wparam в данном случае имеет более сложную структуру. Хелпы надо читать внимательней

скролируем вниз
procedure TForm1.Button1Click(Sender: TObject);
begin
sendmessage(ListView1.Handle,WM_MOUSEWHEEL,makewparam(0,word(-WHEEL_DELTA)),makelparam(1,1));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
sendmessage(ListView1.Handle,wm_vscroll,MAKEWPARAM(SB_LINEDOWN,0),0);
end;

скролируем вверх
procedure TForm1.Button3Click(Sender: TObject);
begin
sendmessage(ListView1.Handle,WM_MOUSEWHEEL,makewparam(0,WHEEL_DELTA),makelparam(1,1));
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
sendmessage(ListView1.Handle,wm_vscroll,MAKEWPARAM(SB_LINEup,0),0);
end;


stany   (2002-08-18 00:51:00) [2]

делаю так PostMessage(ListView.Handle,Wm_Vscroll,SB_ENDSCROLL,0)-не получается!


stany   (2002-08-18 00:44:00) [3]

Как узнать hwndScrollBar?


Diamond Cat   (2002-08-18 00:20:00) [4]

попробуй скролировать с помощью Wm_Vscroll,wm_mousewheel


stany   (2002-08-17 21:19:00) [5]

... ;-(


stany   (2002-08-17 18:05:00) [6]

Мастера!Помогите,позарез нужно...


Наверх

Титульная страница Поиск, карта сайта Написать письмо