Einzelnen Beitrag anzeigen

Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

Re: ListView, welches Item unter Cursor

  Alt 17. Feb 2006, 07:00
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;
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat