Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.014 c
2-1125681874
pathfinder
2005-09-02 21:24
2005.10.09
Посмотрите пожалуйста свежим взглядом!


2-1125629460
-=snoop=-
2005-09-02 06:51
2005.10.09
не могу написать запрос!


1-1126774221
CaptainAlex
2005-09-15 12:50
2005.10.09
Хранение пароля


2-1125455507
Дырчик
2005-08-31 06:31
2005.10.09
Криптография


2-1125623439
OldNaum
2005-09-02 05:10
2005.10.09
Подскажите компонент





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский