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

Вниз

Заколебавший ListView   Найти похожие ветки 

 
Stany   (2002-08-17 15:32) [0]

Привет всем знатокам!Накипела тут тройка вопросов по вине 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;


 
stany ©   (2002-08-17 18:05) [1]

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


 
stany ©   (2002-08-17 21:19) [2]

... ;-(


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

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


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

Как узнать hwndScrollBar?


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

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


 
Diamond Cat ©   (2002-08-19 01:59) [6]

Естественно не получается , т.к. 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;



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

Текущий архив: 2002.10.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
14-8111
DeepProg
2002-09-06 17:20
2002.10.03
Delphi studing


1-8049
Карлсон
2002-09-22 15:05
2002.10.03
преобразование времени.


1-8057
vich
2002-09-22 16:44
2002.10.03
Как сделать чтобы программа отображала русские знаки?


3-7822
Beginner2
2002-09-12 10:09
2002.10.03
DBGrid+ADOTable


3-7874
strahov
2002-09-09 17:40
2002.10.03
Потушите пожар в мозгах !!!!!