![]() |
XE2 ListView - SubItems -> Onklick
Hallo,
ich habe ein TListView welches Dynamisch aufgebaut wird. Nun bräuchte ich die Information in welcher Reihe und welcher Spalte geklickt wurde. Da ich darauf reagieren will. Bei OnKlick wird mir immer nur der "Hauptpunkt" gegeben, aber keinerlei Info welches Subitem es war. Das selbe passiert mit MouseDown und ListView.GetItemAt(x,Y) Ist das irgendwie möglich? Ich bräuchte Zeile und Spalte ... Gruß fanavity |
AW: XE2 ListView - SubItems -> Onklick
Hallo fanavity,
im TListView existiert das Event "OnSelectItem". Darüber kriegst du raus, welches Item gerade ausgewählt wurde. Oder brauchst du anderen Infos? LG |
AW: XE2 ListView - SubItems -> Onklick
Das habe ich gesehen. Ich habe ein TListView, welches abhängig von den Eingaben des Users 1-n spalten hat.
Ich muss nun auf die Klicks auf die jeweiligen Felder reagieren.. Wenn zum Beispiel in Zeile 5 auf Spalte 4 geklickt wird, bekomme ich als Item die Info Zeile 5. Ich muss aber auch wissen in welcher Spalte das war. Denn darauf muss ich entsprechend reagieren. Hat da jemand eine Idee? Das muss doch möglich sein ;) |
AW: XE2 ListView - SubItems -> Onklick
Vermutlich geht's irgendwie viel schöner - aber ich hätte das hier anzubieten:
Delphi-Quellcode:
function GetSubItem(Listview: TListview; X, Y: Integer): Integer;
// Requires unit "CommCtrl" var HitTest: TLVHitTestInfo; begin result := -1; with HitTest do begin pt.X := X; pt.Y := Y; If (Listview.perform( LVM_SUBITEMHITTEST, 0, lparam(@HitTest)) <> -1) then begin result := HitTest.iSubItem; end; end; end; procedure TSampleForm.ListviewClick(Sender: TObject); var ListViewCursosPos: TPoint; ColumnIndex: Integer; begin ListViewCursosPos := TListView(Sender).ScreenToClient(Mouse.CursorPos); ColumnIndex := GetSubItem(TListView(Sender), ListViewCursosPos.X, ListViewCursosPos.Y); if ColumnIndex>-1 then begin showmessage(TListView(Sender).Column[ColumnIndex].Caption); end; end; |
AW: XE2 ListView - SubItems -> Onklick
Vielen Dank für die schnelle Antwort :) Das werde ich gleich morgen mal testen.
Wenn ich nun onMouseDown statt OnClick verwende:
Delphi-Quellcode:
Dann könnte ich mir folgendes ja sparen:
procedure TForm.ListView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Delphi-Quellcode:
richtig?
ListViewCursosPos := TListView(Sender).ScreenToClient(Mouse.CursorPos);
Das würde dann so aussehen:
Delphi-Quellcode:
So müsste es wohl klappen. Ich werde morgen mal bescheid geben :)
function GetSubItem(Listview: TListview; X, Y: Integer): Integer;
// Requires unit "CommCtrl" var HitTest: TLVHitTestInfo; begin result := -1; with HitTest do begin pt.X := X; pt.Y := Y; If (Listview.perform( LVM_SUBITEMHITTEST, 0, lparam(@HitTest)) <> -1) then begin result := HitTest.iSubItem; end; end; end; procedure TForm.ListView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ColumnIndex: Integer; begin ColumnIndex := GetSubItem(TListView(Sender), X, Y); if ColumnIndex>-1 then begin showmessage(TListView(Sender).Column[ColumnIndex].Caption); end; end; |
AW: XE2 ListView - SubItems -> Onklick
Vielen Dank für die Hilfe! Es hat wunderbar geklappt :)
|
AW: XE2 ListView - SubItems -> Onklick
Hi,
ich habe das ganze nun doch auf Doppelklick umgebaut. Leider klappt das aber mit: ListViewCursosPos := TListView(Sender).ScreenToClient(Mouse.CursorPos); nicht. Ich habe schon wie wild versucht an die Richtigen Koordinaten zu kommen, leider gelingt es mir nicht. Hat da noch jemand eine Idee? |
AW: XE2 ListView - SubItems -> Onklick
Was genau klappt dabei nicht? Poste mal den Code.
Wenn du von meinem ersten Post den Code vom "OnClick" Event in ein "OnDblClick" der Listview packst, funktioniert das doch genauso!(?) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz