AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Nachricht NACH dem Löschen eines ListView.Item erhalten?
Thema durchsuchen
Ansicht
Themen-Optionen

Nachricht NACH dem Löschen eines ListView.Item erhalten?

Ein Thema von PeterPanino · begonnen am 5. Aug 2012 · letzter Beitrag vom 6. Aug 2012
Antwort Antwort
PeterPanino

Registriert seit: 4. Sep 2004
1.472 Beiträge
 
Delphi 10.4 Sydney
 
#1

Nachricht NACH dem Löschen eines ListView.Item erhalten?

  Alt 5. Aug 2012, 19:57
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:
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;
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!

Wie kann man also eine Nachricht NACH dem Löschen eines Items erhalten?

Geändert von PeterPanino ( 5. Aug 2012 um 20:00 Uhr) Grund: Typo
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?

  Alt 5. Aug 2012, 20:09
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.472 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?

  Alt 5. Aug 2012, 21:16
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

Geändert von PeterPanino ( 5. Aug 2012 um 21:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#4

AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?

  Alt 5. Aug 2012, 21:36
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. ... oder ich habe die Anforderung nicht richtig verstanden.
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.472 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?

  Alt 5. Aug 2012, 21:48
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. ... oder ich habe die Anforderung nicht richtig verstanden.
OnDeletion wird genauso VOR der Verminderung der Items ausgelöst. OnChange ist ganz was anderes.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Nachricht NACH dem Löschen eines ListView.Item erhalten?

  Alt 5. Aug 2012, 21:56
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  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 17:45 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