Форум: "Начинающим";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];
ВнизОбновление 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.013 c