Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - ListView-Eigenschaften Delphi vs. C#: SubItems auslesen


Gerhard_S - So 30.09.12 01:33
Titel: ListView-Eigenschaften Delphi vs. C#: SubItems auslesen
Hallo,
um die SubItems eines ListView editierbar zu machen, habe ich dank Google eine Anleitung gefunden, wie es mit C# geht:
http://codezentrale.bplaced.net/dcz/?p=879
Ich will versuchen, das nach Delphi zu übertragen, komme aber schon an dieser Stelle nicht weiter:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
// Event des ListViews
// zum Merken des zuletzt angeklickten ListViewItems
    private void ListView1_MouseUp(object sender, MouseEventArgs e)
    {
        ListViewHitTestInfo htInfo = ListView1.HitTest(e.X, e.Y);
        if (htInfo != null)
        {
            if (htInfo.Item != null && htInfo.SubItem != null)
            {
                _lvSubItemEdit = htInfo.SubItem;
            }
        }
    }

In Delphi kann ich nur so schreiben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var hts : THitTests; ListViewCursPos : TPoint; SelectedItem : TListItem;
begin
   hts := ListView1.GetHitTestInfoAt(ListViewCursPos.X, ListViewCursosPos.Y) ;
   if hts = [htOnLabel] then  //htOnItem bleibt ohne Ergebnis
   begin
     SelectedItem := ListView1.Selected;
     Label1.Caption := SelectedItem.Caption;
   end;
end;

Davon ausgehend könnte ich jetzt die SubItems auslesen und alle vorhandenen SubItems zum Editieren anbieten. Das ist aber nicht Sinn der Übung.
Gibt es eine Möglichkeit, die Eigenschaft htOnItem so wie in C# auszuwerten?


bummi - So 30.09.12 08:56


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
uses CommCtrl;
{$R *.dfm}



procedure TForm3.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  // 2012 by Thomas Wassermann
  var
   ht:TLVHitTestInfo;
begin
    ht.pt := Point(x,y);
    SendMessage(ListView1.Handle, LVM_HITTEST, 0, Longint(@ht));
    if ht.flags=1 then
        SendMessage(ListView1.Handle, LVM_SUBITEMHITTEST, 0, Longint(@ht));

   Showmessage(BoolToStr((ht.flags and LVHT_ONITEMLABEL) = LVHT_ONITEMLABEL) + #13#10 + Format('Item: %d  SubItem: %d Group: %d',[ht.iItem,ht.iSubItem,ht.iGroup]));
end;


jaenicke - So 30.09.12 10:28

Du kannst auch einfach die VirtualTreeView benutzen, dann kannst du dir das ganze sparen, weil die das schon alles unterstützt...