AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XE2 ListView - SubItems -> Onklick

Ein Thema von fanavity · begonnen am 9. Apr 2014 · letzter Beitrag vom 13. Apr 2014
Antwort Antwort
fanavity

Registriert seit: 2. Sep 2011
65 Beiträge
 
#1

XE2 ListView - SubItems -> Onklick

  Alt 9. Apr 2014, 15:42
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
  Mit Zitat antworten Zitat
SebastianZ

Registriert seit: 23. Jul 2009
89 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: XE2 ListView - SubItems -> Onklick

  Alt 9. Apr 2014, 17:11
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
  Mit Zitat antworten Zitat
fanavity

Registriert seit: 2. Sep 2011
65 Beiträge
 
#3

AW: XE2 ListView - SubItems -> Onklick

  Alt 9. Apr 2014, 17:30
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

Geändert von fanavity ( 9. Apr 2014 um 17:36 Uhr)
  Mit Zitat antworten Zitat
Kyro

Registriert seit: 16. Aug 2005
Ort: Wien
45 Beiträge
 
Delphi XE2 Professional
 
#4

AW: XE2 ListView - SubItems -> Onklick

  Alt 9. Apr 2014, 19:05
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;
  Mit Zitat antworten Zitat
fanavity

Registriert seit: 2. Sep 2011
65 Beiträge
 
#5

AW: XE2 ListView - SubItems -> Onklick

  Alt 9. Apr 2014, 19:39
Vielen Dank für die schnelle Antwort Das werde ich gleich morgen mal testen.

Wenn ich nun onMouseDown statt OnClick verwende:

procedure TForm.ListView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Dann könnte ich mir folgendes ja sparen:

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
  Mit Zitat antworten Zitat
fanavity

Registriert seit: 2. Sep 2011
65 Beiträge
 
#6

AW: XE2 ListView - SubItems -> Onklick

  Alt 10. Apr 2014, 08:37
Vielen Dank für die Hilfe! Es hat wunderbar geklappt
  Mit Zitat antworten Zitat
fanavity

Registriert seit: 2. Sep 2011
65 Beiträge
 
#7

AW: XE2 ListView - SubItems -> Onklick

  Alt 10. Apr 2014, 15:42
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?
  Mit Zitat antworten Zitat
Kyro

Registriert seit: 16. Aug 2005
Ort: Wien
45 Beiträge
 
Delphi XE2 Professional
 
#8

AW: XE2 ListView - SubItems -> Onklick

  Alt 13. Apr 2014, 10:02
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!(?)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:20 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