Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Listview und Zeile und Spalte einer Zelle (https://www.delphipraxis.net/158327-listview-und-zeile-und-spalte-einer-zelle.html)

Luckie 13. Feb 2011 18:39


Listview und Zeile und Spalte einer Zelle
 
Ich brauche in einem Kontextmenü vom Listview die Zeile und die Spalte einer Zelle in der der Benutzer das Kontextmenü geöffnet hat. Hat da jemand eine Idee, wie ich da drankommen könnte? ich habe da keinen Plan.

Also über
Delphi-Quellcode:
procedure TfrmMain.lvCSVFileMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ShowMessage(IntToStr(x));
end;
bekomme ich ja die Koordinaten relativ zur linken oberen Ecke des Listviews. Aber wie komme ich aus den Koordinaten jetzt an den Spalten- und Zeilenindex?

Luckie 13. Feb 2011 22:46

AW: Listview und Zeile und Spalte einer Zelle
 
Habe es hinbekommen.

Einzelnes Feld:
Delphi-Quellcode:
procedure TfrmMain.lvCSVFileMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbRight then
  begin
    FX := X;
    FY := Y;
    FPopupMenuListItem := lvCSVFile.GetItemAt(X, Y);
  end;
end;

procedure TfrmMain.GetSubItemFromPoint(X, Y: Integer; var SubItem: Integer);
var
  hti: TLVHitTestInfo;
begin
  hti.pt := Point(X, Y);
  SubItem := ListView_SubItemHitTest(lvCSVFile.Handle, @hti);
  if SubItem > 0 then
  begin
    FPopupMenuListItem := lvCSVFile.Items[SubItem];
    SubItem := hti.iSubItem;
  end
  else
    FPopupMenuListItem := nil;
end;

procedure TfrmMain.pmCopyFieldClick(Sender: TObject);
var
  SubItem: Integer;
begin
  GetSubItemFromPoint(FX, FY, SubItem);
  if Assigned(FPopupMenuListItem) then
  begin
    if SubItem > 0 then
      Clipboard.AsText := FPopupMenuListItem.SubItems[SubItem-1];
  end;
end;
Ganze Zeile:
Delphi-Quellcode:
procedure TfrmMain.pmCopyRowClick(Sender: TObject);
var
  s: AnsiString;
  i: Integer;
begin
  if Assigned(FPopupMenuListItem) then
  begin
    for i := 0 to FPopupMenuListItem.SubItems.Count - 1 do
    begin
      s := s +  FPopupMenuListItem.SubItems[i] + FDelimiter;
    end;
    Setlength(s, Length(s) - 1);
    ClipBoard.AsText := s;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz