Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Один PopupMenu на два ListView  (Прочитано 6416 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Shouldercannon
Помогающий

ru
Offline Offline

« : 11-09-2016 15:14 » 

Хочу привязать один PopupMenu к двум ListView
Код: (Delphi)
procedure TForm4.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  OpenPopupMenu(ListView1, Button, X, Y);
end;

procedure TForm4.ListView2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  OpenPopupMenu(ListView2, Button, X, Y);
end;

procedure TForm4.OpenPopupMenu(LV: TListView; Button: TMouseButton; X, Y: Integer);
var
  I: Integer;
  P: TPoint;
begin
  if mbLeft = Button then Exit;
  if LV.GetItemAt(X, Y) = nil then Exit;

  I := LV.GetItemAt(X, Y).Index;
  // Если курсор на одной из строк
  if I >= 0 then
  begin
    LV.ItemIndex := I;
    // И ручной вызов меню
    P := LV.ClientToScreen(Point(X, Y));
    PopupMenu1.Popup(P.X, P.Y);
  end;
end;

procedure TForm4.NCopyClick(Sender: TObject);
begin
  {if ListView1.Items[ListView1.ItemIndex].SubItems[0] = '' then Exit;
  Clipboard.AsText := ListView1.Selected.SubItems[0];}

  // За что тут зацепиться?
end;
Проблема в том, что не за что зацепиться в NCopyClick. Как указать, что именно нужно копировать?
Записан
zubr
Гость
« Ответ #1 : 12-09-2016 08:01 » 

ListView1.Items [ListView1.GetItemAt ScreenToClient PopupMenu1.PopupPoint  ]
« Последнее редактирование: 12-09-2016 08:03 от zubr » Записан
Shouldercannon
Помогающий

ru
Offline Offline

« Ответ #2 : 12-09-2016 17:03 » 

Код: (Delphi)
procedure TForm4.NCopyClick(Sender: TObject);
Не знает из какого ListView из двух имеющихся что копировать. Получается нужно куда-то запомнить ListView из которого было вызвано OpenPopupMenu и дальше с этим что-то работать как с ListView
« Последнее редактирование: 12-09-2016 17:07 от Shouldercannon » Записан
zubr
Гость
« Ответ #3 : 12-09-2016 20:58 » 

У компонентов Delphi есть очень хорошее свойство Tag:
Код:
procedure TForm4.OpenPopupMenu(LV: TListView; Button: TMouseButton; X, Y: Integer);
var
  I: Integer;
  P: TPoint;
begin
  PopupMenu1.Tag := Integer(LV);
  ...

procedure TForm4.NCopyClick(Sender: TObject);
var
  LV: TListView;
begin
  LV := TListView(PopupMenu1.Tag);
  ...
Записан
Shouldercannon
Помогающий

ru
Offline Offline

« Ответ #4 : 13-09-2016 09:23 » new

Просто фантастишь Улыбаюсь Благодарю
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines