Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2013, 18:57   #1
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию Обновить ListView не снимая выделение

Доброго времени суток.
Собственно, получаю список процессов в ListView таким образом:

Код:
...
  Form1.ListView2.Items.BeginUpdate;
  ListView2.Items.Clear;
  PHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  PEntry.dwSize := SizeOf(PEntry);
  PContinue := Process32First(PHandle, PEntry);
  while Integer(PContinue) <> 0 do
   begin
    with ListView2.Items.Add do
     begin
      Caption := ExtractFileName(PEntry.szExeFile);
      SubItems.Add(PEntry.th32ProcessID);
      ...
     end;
    PContinue := Process32Next(PHandle, PEntry);
   end;
 finally
  CloseHandle(PHandle);
 end;
 Form1.ListView2.Items.EndUpdate;
Скажите, пожалуйста, можно-ли обновить ListView не снимая выделение, или вернуть выделение каким-то образом? Как в Диспетчере задач.
Заранее благодарю.
Xo66um вне форума Ответить с цитированием
Старый 11.05.2013, 19:18   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
...
  if ListView2.Selected<>nil then  s:=ListView2.Selected.Caption else s:='';
  Form1.ListView2.Items.BeginUpdate;
  ListView2.Items.Clear;
  PHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  PEntry.dwSize := SizeOf(PEntry);
  PContinue := Process32First(PHandle, PEntry);
  i:=0;
  while Integer(PContinue) <> 0 do
   begin
    with ListView2.Items.Add do
     begin
      Caption := ExtractFileName(PEntry.szExeFile);
      SubItems.Add(PEntry.th32ProcessID);
      ...
      if (s<>'')and(Caption=s) then i:=Index;
     end;
    PContinue := Process32Next(PHandle, PEntry);
   end;
 finally
  CloseHandle(PHandle);
 end;
 Form1.ListView2.Items.EndUpdate;
 Form1.ListView2.ItemIndex:=i;
Идея понятна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.05.2013, 19:37   #3
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию

Мысль ясна... только непонятно, почему выделение "прыгает" по списку? Как-будто в случайном порядке, и вовсе не опирается на переменную, которая содержит заголовок строки.

Допилил. Теперь выделение в порядке.
Stilet, спасибо, плюсую

Последний раз редактировалось Xo66um; 11.05.2013 в 20:06.
Xo66um вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перетащить элемент ListView в другой ListView? Paul Hindenburg Компоненты Delphi 5 26.01.2013 11:35
ListView выделение нескольких элементов без Ctrl fezilk25 Общие вопросы Delphi 6 01.08.2011 07:16
[C# + WPF] ListView. Узнать выделена ли строка в нём. ListView.View == GridView. Casper-SC WPF, UWP, WinRT, XAML 2 12.08.2010 19:04
Обновить DC liljon Win Api 2 20.04.2010 10:29
Как обновить?? Vremya-Dengy Общие вопросы Delphi 6 17.02.2009 22:44