Eine Möglichkeit wäre, das PopupMenu manuell zu öffnen.
Als einfaches Beispiel kann ich dir das hier bringen. Das PopupMenu brauchst du nicht mehr der Listview zuzuordnen.
Delphi-Quellcode:
procedure TForm1.ListView1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
TrackButton: TMouseButton;
begin
if PopupMenu1.TrackButton = tbRightButton then
TrackButton := mbLeft
else
TrackButton := mbRight;
fLastSender := Sender;
if Button = TrackButton then
PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
end;
Hier wird das PopupMenu direkt in der OnClick-Routine definiert.
Willst du es lieber dynamisch halten, so kannst du folgende Routine verwenden:
Delphi-Quellcode:
procedure TForm1.ListViewMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
TrackButton: TMouseButton;
PopupMenu: TPopupMenu;
begin
PopupMenu := TPopupMenu(FindComponent('PopupMenu'+IntToStr(TListview(Sender).Tag)));
if PopupMenu = nil then
begin
ShowMessage('Oooops...');
Exit;
end;
if PopupMenu.TrackButton = tbRightButton then
TrackButton := mbLeft
else
TrackButton := mbRight;
fLastSender := Sender;
if Button = TrackButton then
PopupMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
end;
Hier wird das PopupMenu über das Tag der Listview angesprochen. Die PopupMenus müssen den Namen 'PopupMenu#' haben, wobei # irgendeine Nummer ist. Diese Nummer wird dann im Tag angegeben. Wird kein PopupMenu gefunden, so wird z.Zt. eine Fehlermeldung ausgegeben, dies kannst du aber sehr einfach ändern. Der Code ist hoffentlich verständlich genug, ich habe ihn außerdem nicht getestet.
Greetz
alcaeus