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/)
-   -   Delphi ListView, welches Item unter Cursor (https://www.delphipraxis.net/63335-listview-welches-item-unter-cursor.html)

DieHardMan 17. Feb 2006 04:31


ListView, welches Item unter Cursor
 
Lässt sich irgendwie das genaue Item unter der aktuellen Position des Mauscursors bestimmen? Ich kann zwar das ganze Item mit ItemAt auslesen aber müsste noch wissen ob es Caption oder SubItem[x] ist. Um das herauszufinden bräuchte ich noch die Spaltennummer, aber die findet man nur raus wenn man auf den Spaltenkopf klickt. Irgendeine Idee? Hab das schonmal gemacht, aber damals mit der ListView von TMS und da ging das.

chaosben 17. Feb 2006 06:00

Re: ListView, welches Item unter Cursor
 
Möglichkeit 1: Du nimmst ein VirtualStringTree.

Möglichkeit 2: Du nimmst diese meine Funktion. Sie liefert true, wenn sie etwas gültiges findet. Kleiner "Nachteil": Es muss RowSelect angeschalten sein, sonst werden keine Subitems gefunden.

Delphi-Quellcode:
//cut here ------------------------------------------------------------------------
function TForm2.GetHitTestInfoEx(X, Y: Integer; const ListView: TListView;
  var Item: TListItem; var Column: Integer): Boolean;
var
  HT : THitTests;
  OffSet : Integer;
  idx : Integer;
begin
  Result:=false;
  Column:=-1;

  HT:=ListView.GetHitTestInfoAt(X,Y);

  if (not (htAbove in HT)) and (not (htBelow in HT)) and (not (htNoWhere in HT)) then
  begin //ok, we are on an item
    Result:=true;

    Item:=Listview.GetItemAt(X,Y);
    OffSet:=0;
    for idx:=0 to ListView.Columns.Count-1 do
      if (x>=OffSet) and (x<=OffSet+ListView.Columns[idx].Width) then
      begin
        Column:=idx;
        exit;
      end
      else
        Inc(Offset,ListView.Columns[idx].Width);
     
    Result:=false;
  end;
end;
//cut here ------------------------------------------------------------------------

procedure TForm2.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  Item : TListItem;
  col : Integer;
begin
  if GetHitTestInfoEx(x,y,ListView1,Item,col) then
    Self.Caption:=Item.Caption+' - Spalte '+IntToStr(col)
  else
    Self.Caption:='Nischt wird .... nö .... geh weg';
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 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