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

Вниз

Обновление ListView   Найти похожие ветки 

 
psa247 ©   (2005-08-13 18:49) [0]

Всем привет!
Есть таймер, по таймеру обновляется содержимое ListView.
Если выделить строку, то после обновления фокус с этой строки пропадает. Кто знает, как это лечить?


 
Ученик   (2005-08-13 20:35) [1]


procedure TForm1.Timer1Timer(Sender: TObject);
var
 i, iSelected: Integer;
begin
 if ListView1.Selected <> nil then
   iSelected := ListView1.Selected.Index
 else
   iSelected := 0;
 ListView1.Items.BeginUpdate;
 try
   ListView1.Clear;
   for i := 0 to 10 do
     ListView1.Items.Add.Caption := IntToStr(i);
   if iSelected < ListView1.Items.Count then
     ListView1.Selected := ListView1.Items[iSelected]
 finally
   ListView1.Items.EndUpdate
 end
end;


 
tazik ©   (2005-08-13 22:17) [2]

А если так: прописать процедуру или ф-ю, как там вам надо, которая будет обновлять ListView. И просто запоминать индекс в глобальную переменную.


var idx: integer; // переменная в которую сохраняем индекс

procedure...updt...
begin
...
listview1.itemindex := idx;
end;


 
psa247 ©   (2005-08-14 11:07) [3]

Содержимое ListView может быть разным. К примеру, взять Task Manager со списком процессов. Выделяем строку, и пусть даже, если добавлена новая строка с новым процессом (независимо - до выделенной строки или после) при передачи фокуса - ListView выделит нужную (указанную до изменения) строку. Придумать свой алгоритм или можно все-таки КАК-НИБУДь?


 
Наиль ©   (2005-08-15 23:12) [4]

Если использовать Add, Delete, Insert для обновления, то выглядеть это будет так:
it:=ListView1.Selected;
...обновление...
if уничтожение_it then it:=nil;
...обновление...
if it<>nil then it.Selected:=true;

Иначе запоминание какого-нибудь значения из ListView1.Selected, а потом поиск этого значения в ListView.


 
psa247 ©   (2005-08-17 13:43) [5]


> Наиль ©   (15.08.05 23:12) [4]

Именно...
А как быть с прокруткой?
Есть, вроде бы, св-во Scroll(m,n)?


 
alex_***   (2005-08-17 16:13) [6]

усть у ListView шайтан-свойство OwnerData. В хелпе по нему все расписано. Очень удобно пользовать и не надо заморачиваться на обновление.


 
psa247 ©   (2005-08-31 10:01) [7]


> alex_***   (17.08.05 16:13) [6]

Каким образом все это связано с установкой фокуса на нужную строку. Если кол-во строк больше рабочей области?
Через Scroll получается, но криво...


 
Наиль ©   (2005-09-01 02:12) [8]

Рядышком с it.Selected:=true пишется it.Focused:=true. Хотелось бы в одном флаконе, но к сожалению это едиственный, известный мне, способ.


 
psa247 ©   (2005-09-01 10:59) [9]


> Наиль ©

Уже башку сломал. Все селектитца и фокусируется нормально, только зримая область после Item.Clear и перепостроении содержимого - выставляется в левый верхний угол. Как заставить показать другие области? Может, тогда, перезаписывать содержимое, а лишнее, естесственно просто удалять?


 
dreamse   (2005-09-01 15:31) [10]

Установи ListView1.HideSelection в False

Точно блин раздел для новичков :)

Удачи


 
psa247 ©   (2005-09-01 17:03) [11]


> dreamse

Спецом для тебя, умник.

> зримая область после Item.Clear и перепостроении содержимого
> - выставляется в левый верхний угол

Т.е. если ты выделил 205-ю, к примеру, строчку, то после обновления информации она и будет у тебя в фокусе. Только видеть ты будешь начиная с первой по счету строчке до - (насколько хватит рабочей области). Понты колотить будешь в другом месте...


 
psa247 ©   (2005-09-01 20:08) [12]

Как вариант - можно сделать так: Алгоритм работает отлично.
1.  Проверка - пустое ли содержимое?
1.1 "Да" - тогда содержимое пополняется с помощью Item.Add
1.2 "Нет" - переписать содержимое через Item[i].Caption и
           Item[i].SubItem
2.  Делать фокус на желаемый элемент
----
P.S. Глючит, если включено SortType (кроме stText);
    Нельзя использовать Items.Clear


 
psa247 ©   (2005-09-02 12:25) [13]

Еще вопрос: Какое сообщение послать ListView чтобы спрятать ScrollBar(ы)?



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

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

Наверх




Память: 0.49 MB
Время: 0.055 c
14-1126787890
stone
2005-09-15 16:38
2005.10.09
Откуда пошел компьютерный сленг


2-1125237595
Profi
2005-08-28 17:59
2005.10.09
Глюк TreeView?


4-1124021579
webpauk
2005-08-14 16:12
2005.10.09
Сообщение при прерывании процесса


4-1123407155
Sphinx
2005-08-07 13:32
2005.10.09
Код создания окна не работает в dll


4-1123743511
Ботвин Дмитрий
2005-08-11 10:58
2005.10.09
Раздел импорта ехе-файла