![]() |
Nachricht NACH dem Löschen eines ListView.Item erhalten?
Hallo! Ich möchte eine Nachricht von einem Listview erhalten, NACHDEM ein Item aus der Listview gelöscht wurde. Ich habe folgenden Code probiert:
Delphi-Quellcode:
Es sollte die Anzahl der Items NACH dem Löschen angezeigt werden. Mit dem obigen Code wird aber die Anzahl der Items VOR dem Löschen des Items angezeigt!
private
{ Private-Deklarationen } OriginalListViewWindowProc: TWndMethod; procedure ListViewWindowProcEx(var Message: TMessage); procedure TForm1.FormCreate(Sender: TObject); begin OriginalListViewWindowProc := MyListView1.WindowProc; MyListView1.WindowProc := ListViewWindowProcEx; end; procedure TForm1.ListViewWindowProcEx(var Message: TMessage); begin if Message.Msg = CN_NOTIFY then begin if PNMHdr(Message.LParam)^.Code = LVN_DELETEITEM then begin // Funktioniert nicht, da das Item gelöscht wird, // NACHDEM die Nachricht gesendet wurde: Self.Caption := IntToStr(MyListView1.Items.Count); end; end; OriginalListViewWindowProc(Message); end; Wie kann man also eine Nachricht NACH dem Löschen eines Items erhalten? |
AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?
Delphi-Quellcode:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls,CommCtrl, StdCtrls; type TListView=Class(comCtrls.TListView) procedure CNNotify(var Message: TWMNotifyLV); message CN_NOTIFY; End; TForm2 = class(TForm) ListView1: TListView; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} { TListView } procedure TListView.CNNotify(var Message: TWMNotifyLV); begin inherited; if Message.NMHdr.code=LVN_DELETEITEM then if Message.Result=1 then Showmessage('Deleted'); end; |
AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?
Hallo Bummi, vielen Dank für den Code. Aber leider ist das Problem damit nicht gelöst: Die Anzahl der Items ist beim Erhalt der Nachricht gleich groß wie vorher. Sie müsste aber um die Zahl des gelöschten Items vermindert sein, in dieser Reihenfolge:
1. Anzahl der Items vorher ist n 2. 1 Item wird gelöscht 3. Nachricht sagt, Anzahl der Items ist nun n - 1 Es müsste also eine Nachricht sein, die NACH dem Löschen des Items die verminderte Zahl der Items zurückgibt. Oder, wenn mehrere Items auf einmal gelöscht werden: 1. Anzahl der Items vorher ist n 2. x Items werden gelöscht 3. Nachricht sagt, Anzahl der Items ist nun n - x |
AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?
Mache dir doch ein eigenes Event was dir nach dem Löschen Befehl den neuen Count liefert. Was ist mit OnChange, OnDeletion des Listviews. Nach jedem Ändern bzw. Löschen wird es ausgelöst. Kannst du damit was anfangen ?
Irgendwie habe ich den Eindruck daß zu kompliziert gedacht wird. :gruebel: ... oder ich habe die Anforderung nicht richtig verstanden. |
AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?
Zitat:
|
AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?
Wenn du die Anzahl der Items nach dem Löschen ausgeben möchtest, dann ist OnChange genau das Event, was du suchst. Dieses Ereignis wird nach jeder Änderung am ListView aufgerufen.
Du kannst also auch Items hinzufügen, alle Items auf einmal löschen, whatever, das Event wird anschließend abgefeuert. |
AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?
Zitat:
|
AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?
|
AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?
1. Nimm einfach eine "richtige" Komponente, nämlich z.B. die TVirtualStringTree:
![]() Dort gibt es das Event OnFreeNode, in dem die Anzahl bereits die neue ist:
Delphi-Quellcode:
Außerdem ist die Komponente auch deutlich schneller (und einfacher zu benutzen sobald man die GUI ordentlich von der Datenhaltung trennt).
procedure TForm236.VirtualStringTree1FreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
begin Caption := IntToStr(Sender.RootNode.ChildCount); end; 2. Da du an der Stelle weißt, dass das Item gelöscht werden wird, kannst du doch auch einfach eins von der Anzahl abziehen. |
AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 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-2025 by Thomas Breitkreuz