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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2018, 11:00   #1
XerSon
Форумчанин
 
Аватар для XerSon
 
Регистрация: 21.01.2008
Сообщений: 211
Вопрос TListView+OnDblClick - по выбранному SubItem'у

Всем привет,

Как в ListView отследить по какому сабитему был сделан дабл клик и в последствии скопировать данные в переменную (DFPath) из определенных сабитемов?

По подобию кода ниже ...

Код:
procedure TForm1.LvDataMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  DFPath: String;
  ListItem: TListItem;
  i: Integer;
begin
  ListItem := LvData.GetItemAt(0, Y);
  // получаем item над которым находится курсор
  if (ListItem = nil) or (LvData.Column[0].Width > X) then
    Exit; // если курсор над первой колонкой
  // либо вообще не над итемом то выход
  X := X - LvData.Column[0].Width; // отнимаем размер первой колонки
  for i := 1 to LvData.Columns.Count - 1 do // проходим по цыклу все колонки
  begin
    if LvData.Column[i].Width < X then
      dec(X, LvData.Column[i].Width)
    else
    begin
      DFPath := ListItem.SubItems.Strings[0] + ListItem.SubItems.Strings[1]; // тут в переменную пути, копируем данные из нужных мне сабитемов!!!
      // Если фаил в папке существует
      if FileExists(DFpath) then // то
        // Открываем по указанному пути в проводнике фаил и выделяем его
        ShellExecute(0, nil, 'explorer', PChar(' /select,' + DPpath), nil,
          SW_NORMAL);
      // Очищаем переменную пути
      DFpath := '';
      // если над этой колонкой то выводим ее значение
      break;
    end;
  end;
end;

Последний раз редактировалось XerSon; 31.03.2018 в 11:35.
XerSon вне форума Ответить с цитированием
Старый 31.03.2018, 14:02   #2
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 272
По умолчанию

Код:
procedure TForm1.ListView1DblClick(Sender: TObject);
var
  ListItem: TListItem;
  I, X: Integer;
  Pt: TPoint;
  S: string;
begin
  Pt := ListView1.ScreenToClient(Mouse.CursorPos);
  ListItem := ListView1.GetItemAt(0, Pt.Y);

  if (ListItem = nil) or (ListView1.Column[0].Width > Pt.X) then
    Exit;

  X := ListView1.Columns[0].Width;
  for I := 1 to ListView1.Columns.Count - 1 do
  begin
    Inc(X, ListView1.Columns[I].Width);
    if Pt.X < X then
    begin
      S := ListItem.SubItems[0] + ListItem.SubItems[1];
      ShowMessage(S);
      Break;
    end;
  end;
end;

Последний раз редактировалось Filka; 31.03.2018 в 14:19.
Filka вне форума Ответить с цитированием
Старый 31.03.2018, 15:41   #3
XerSon
Форумчанин
 
Аватар для XerSon
 
Регистрация: 21.01.2008
Сообщений: 211
По умолчанию

@Filka

Спасибо, все ок.
XerSon вне форума Ответить с цитированием
Старый 31.03.2018, 15:41   #4
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 272
По умолчанию

Пожалуйста.
Filka вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
StringGrid - onDBLClick postaveche Компоненты Delphi 11 17.10.2014 11:25
OnDblClick в DBGrid и открытие новой формы haker270 БД в Delphi 12 14.11.2012 20:12
Сортировка ListView по выбранному столбцу lena pryadun C++ Builder 2 28.05.2012 17:53
C# установить иконку выбранному файлу AD286 C# (си шарп) 2 16.11.2010 16:52