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 XE2 ListView - SubItems -> Onklick (https://www.delphipraxis.net/179897-xe2-listview-subitems-onklick.html)

fanavity 9. Apr 2014 15:42

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

SebastianZ 9. Apr 2014 17:11

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

fanavity 9. Apr 2014 17:30

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 ;)

Kyro 9. Apr 2014 19:05

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;

fanavity 9. Apr 2014 19:39

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:
procedure TForm.ListView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Dann könnte ich mir folgendes ja sparen:

Delphi-Quellcode:
ListViewCursosPos := TListView(Sender).ScreenToClient(Mouse.CursorPos);
richtig?

Das würde dann so aussehen:

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 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;
So müsste es wohl klappen. Ich werde morgen mal bescheid geben :)

fanavity 10. Apr 2014 08:37

AW: XE2 ListView - SubItems -> Onklick
 
Vielen Dank für die Hilfe! Es hat wunderbar geklappt :)

fanavity 10. Apr 2014 15:42

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?

Kyro 13. Apr 2014 10:02

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 15:00 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