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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2009, 08:45   #1
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию Как узнать индексы выделенных итемов в ListView при OwnerData?

Добрый день.
Как при включенном режиме виртуализации в ListView при выделении итемов АВТОМАТОМ получать их индексы, например, в динамический массив, а при снятии выделения освобождать его? Свойство OnSelectItem работает некорректно (т.е. вообще не работает ) при OwnerData:=True.
Зачем это? Дело в том, что в листвиеве может быть несколько сот тысяч итемов, а выделенные нужно удалить. Вот только перебирать каждый итем в цикле на проверку выделенности и последующего удаления по крайней мере тупо. Думаю, это должно быть приблизительно так:
1. при выделении итемов автоматом формируется дин. массив индексов выделенных итемов.
2. при удалении выделенных итемов прогоняется цикл от конца в начало по созданному дин. массиву, удаляя ТОЛЬКО ВЫДЕЛЕННЫЕ ЭЛЕМЕНТЫ.

Догадываюсь, что решение - перехват событий выделения. Собственно, как это сделать?
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 29.09.2009, 14:27   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Предлагаю такой хитрый способ:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls,Contnrs, StdCtrls;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    Button1: TButton;
    procedure ListView1SelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var      lv:TObjectList;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
begin
  if lv.IndexOf(Item)=-1 then
   lv.Add(Item);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 lv:=TObjectList.Create;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 lv.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 lv.Clear; //Удаляем выделенные
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.10.2009, 09:53   #3
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Stilet, спасибо, попробую
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 02.10.2009, 10:24   #4
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Ваш код НЕ РАБОТАЕТ!
Добавляет при выделении только максимум 2 итема + при выходе из проги пишет AccessViolation. Вопрос остается открытым.
Тут подтвердилось мое подозрение насчет некорректной работы OnSelectItem при OwnerData в True.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перетащить элемент ListView в другой ListView? Paul Hindenburg Компоненты Delphi 5 26.01.2013 11:35
Можно ли узнать количество видимых строк в ListView\ListBox? TwiX Общие вопросы Delphi 7 03.08.2009 13:03
Узнать количество итемов в ListView... TwiX Общие вопросы Delphi 10 02.08.2009 14:31
Как запустить приложение через список выделенных файлов simpolmix Общие вопросы Delphi 3 07.05.2009 23:14
Как узнать скорость при закачке tIdHttp.get? Altera Работа с сетью в Delphi 7 09.04.2009 11:27