Один PopupMenu на два ListView

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Shouldercannon
Сообщения: 74
Зарегистрирован: 08 июн 2008, 15:49

11 сен 2016, 18:12

Хочу привязать один PopupMenu к двум ListView

Код: Выделить всё

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. Как указать, что именно нужно копировать?
Shouldercannon
Сообщения: 74
Зарегистрирован: 08 июн 2008, 15:49

13 сен 2016, 12:27

Код: Выделить всё

procedure TForm4.NCopyClick(Sender: TObject);
var
  LV: TListView;
begin
  LV := TListView(PopupMenu1.Tag);
  if LV.Items[LV.ItemIndex].SubItems[0] = '' then Exit;
  Self.Caption := LV.Selected.SubItems[0];
end;

procedure TForm4.OpenPopupMenu(LV: TListView; Button: TMouseButton; X, Y: Integer);
var
  I: Integer;
  P: TPoint;
begin
  PopupMenu1.Tag := Integer(LV);

  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;
Ответить