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
Benutzerbild von haentschman
haentschman

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

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
 
#2

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
 
#3

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
PeterPanino

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

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

  Alt 5. Aug 2012, 22:10
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.
Nein. OnChange wird bei einem Selection-Wechsel aufgerufen. Je nach Anzahl der Items im Listview findet ein Selection-Wechsel nach dem Löschen von Items statt. Nimm aber ein Listview mit nur wenigen Items und lösche das unterste Item (Report-View), sodass kein Selection-Wechsel stattfindet: OnChange wird dann nicht aufgerufen.
  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, 22:23
http://docwiki.embarcadero.com/Libra...TLVChangeEvent

Hier steht nichts von gelöschten Items.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.989 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 5. Aug 2012, 22:25
1. Nimm einfach eine "richtige" Komponente, nämlich z.B. die TVirtualStringTree:
http://www.delphi-gems.com/index.php...rtual-treeview
Dort gibt es das Event OnFreeNode, in dem die Anzahl bereits die neue ist:
Delphi-Quellcode:
procedure TForm236.VirtualStringTree1FreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
begin
  Caption := IntToStr(Sender.RootNode.ChildCount);
end;
Außerdem ist die Komponente auch deutlich schneller (und einfacher zu benutzen sobald man die GUI ordentlich von der Datenhaltung trennt).

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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
PeterPanino

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

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

  Alt 5. Aug 2012, 22:33
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.
Das Programm weiß ja nicht, wie viele Items der Benutzer löscht. Das sollte das Programm NACH dem Löschen ja erfahren. Tut es aber nicht. Deswegen meine Fragestellung.
  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
 
#8

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

  Alt 5. Aug 2012, 22:50
Items.Count wird auch über eine Message abgerufen, zu einem Zeitpunkt zu dem das Messagehandling in dem Fall noch nicht abgeschlossen ist. "Ausbrechen" könnte man in der Art, zum weiterbasteln...
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls,CommCtrl, StdCtrls;

  const
  WM_MyInfoMessage=WM_USER + 777;
type


  TListView=Class(comCtrls.TListView)
       private
    FOnItemDeleted: TNotifyEvent;
        procedure CNNotify(var Message: TWMNotifyLV); message CN_NOTIFY;
        Procedure MyInfomessage(var Message: TWMNotify);message WM_MyInfoMessage;
       published
        Property OnItemDeleted:TNotifyEvent read FOnItemDeleted write FOnItemDeleted;
  End;
  TForm2 = class(TForm)
    ListView1: TListView;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    procedure OnItemDel(sender: TObject);
    { 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) or (Message.NMHdr.code = LVN_DELETEALLITEMS ) then
     if Message.Result=1 then
         begin
            PostMessage(Handle,WM_MyInfoMessage,0,0);
         end;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  Showmessage('Before:'+IntToStr(ListView1.Items.Count));
  ListView1.Items.Delete(0);
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  ListView1.OnItemDeleted := OnItemDel;
end;

Procedure TForm2.OnItemDel(sender:TObject);
begin
   Showmessage('After:' + IntToStr(TListView(Sender).Items.Count));
end;

procedure TListView.MyInfomessage(var Message: TWMNotify);
begin
   if Assigned(FOnItemDeleted) then FOnItemDeleted(Self);


end;

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)

Geändert von Bummi ( 6. Aug 2012 um 09:31 Uhr) Grund: MyInfomessage in TListView verschoben
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.989 Beiträge
 
Delphi 12 Athens
 
#9

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

  Alt 6. Aug 2012, 06:33
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.
Das Programm weiß ja nicht, wie viele Items der Benutzer löscht. Das sollte das Programm NACH dem Löschen ja erfahren. Tut es aber nicht. Deswegen meine Fragestellung.
Naja, du bekommst aber bei jedem gelöschten Item eine solche Message. Das gilt auch z.B. für Clear, wenn du alle löschst...

Wie löschst du denn sonst mehrere auf einmal?

(Nebenbei kann der Benutzer selbst ohnehin nix löschen, sondern nur der Programmierer mit dem passenden Befehl, so dass der Zeitpunkt danach ohnehin feststeht und erreichbar ist...)
Sebastian Jänicke
AppCentral
  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 01:36 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