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 Im ListView OnClick SpaltenIndex heraus finden.... (https://www.delphipraxis.net/85483-im-listview-onclick-spaltenindex-heraus-finden.html)

kingflo 31. Jan 2007 13:48


Im ListView OnClick SpaltenIndex heraus finden....
 
Hallo... ich habe eine frage zur ListView hab schon gesucht aber nichts gefunden. Und zwar bekomme ich mit listView1.ItemIndex ja den Index der aktiven zeile. Kann ich auch irgendwie den Index der aktiven Spalte herausfinden?

Denn ich möchte mit einem Eintrag etwas machen, aber nur wenn der User bei dem Eintrag auf die 4 Spalte klickt, weiß aber nicht wie ich das heraus finden kann....

bitsetter 31. Jan 2007 14:39

Re: Im ListView OnClick SpaltenIndex heraus finden....
 
Delphi-Quellcode:
procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
   links, Spalte: integer;
begin
 links:= 0;
 for Spalte:= 0 to ListView1.Columns.Count- 1 do
 begin
   if (links<= x) and (x < (links+ ListView1.Columns.Items[Spalte].Width)) then
   break;
   inc(links, ListView1.Columns.Items[Spalte].Width);
 end;
 Showmessage('Spalte: '+ inttostr(Spalte));
end;

kingflo 31. Jan 2007 14:42

Re: Im ListView OnClick SpaltenIndex heraus finden....
 
sehr sehr geil... danke... das geht super

marabu 31. Jan 2007 18:25

Re: Im ListView OnClick SpaltenIndex heraus finden....
 
Gut, wenn man sich zu helfen weiß.

Wer mindestens Version 4.70 der Common Controls installiert hat, der kann es auch so angehen:

Delphi-Quellcode:
uses
  CommCtrl; // min. 4.70

function GetItemAt(lv: TListView; X, Y: Integer; var iSubItem: Integer): TListItem;
var
  hti: TLVHitTestInfo;
begin
  hti.pt := Point(X, Y);
  iSubItem := ListView_SubItemHitTest(lv.Handle, @hti);
  if iSubItem >= 0 then
  begin
    Result := lv.Items[iSubItem];
    iSubItem := hti.iSubItem;
  end else Result := nil;
end;
Getestet habe ich so:

Delphi-Quellcode:
procedure TTestForm.ListViewMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
  li: TListItem;
  iItem, iSubItem: Integer;
begin
  li := GetItemAt(Sender as TListView, X, Y, iSubItem);
  if Assigned(li)
    then iItem := li.Index
    else iItem := -1;
  Caption := Format('Item %d SubItem %d', [iItem, iSubItem])
end;
Freundliche Grüße vom marabu


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