-
Forum: Win32/Win64 API (native code)
Delphi
by PeterPanino,
6. Aug 2012
Bei mir sieht der Quelltext ganz anders aus ... ;-)
Und ich verwende ja in meinem Code auch nicht TListView, sondern eine davon abgeleitete Klasse. Dass wir hier bei der Diskussion TListView nennen, ist ja nur eine Abstraktion.
-
Forum: Win32/Win64 API (native code)
Delphi
by PeterPanino,
6. Aug 2012
Wenn der Anwender etwas will, dann heißt das nicht, dass das Programm das auch tut. Deshalb ist es bei einer "Vorhersage" gut möglich, dass die Anzeige vorschnell eine falsche Änderung anzeigt, diese aber aus irgendeinem Grund nicht durchgeführt werden konnte. Das kann dann zu einem Programm-, Anwendungs- oder Daten-Fehler führen. Auch ist denkbar, dass neben dem Anwender und dem Programm eine...
-
Forum: Win32/Win64 API (native code)
Delphi
by PeterPanino,
6. Aug 2012
Korrektur: Oder in von ListView abgeleiteten Klassen könnte es für den Programmierer andere Möglichkeiten geben, dem Anwender die Löschung eines Items zu ermöglichen.
-
Forum: Win32/Win64 API (native code)
Delphi
by PeterPanino,
6. Aug 2012
Oder in von ListView abgeleiteten Klassen könnte es andere Möglichkeiten geben, ein Item zu löschen.
-
Forum: Win32/Win64 API (native code)
Delphi
by PeterPanino,
6. Aug 2012
Ja, du hast Recht, vielen Dank!
-
Forum: Win32/Win64 API (native code)
Delphi
by PeterPanino,
6. Aug 2012
@Bummi: Wenn es nun aber mehrere Instanzen der so modifizierten TListView im Programm gibt: Wie könnte man erfahren, welche Instanz die Message gesendet hat? Wie würdest du diese Information so in PostMessage kodieren, dass sie in MyInfomessage wieder dekodiert werden kann? Und wie kann CNNotify erfahren, von welcher Instanz die Nachricht kommt?
-
Forum: Win32/Win64 API (native code)
Delphi
by PeterPanino,
6. Aug 2012
Naja, streng genommen ist es - vom Zeitpunkt der Nachricht her - eine Vorhersage (z.B. bei OnDeletion). Mit der Methode von Bummi wird der Nachrichtenzeitpunkt auf die Zeit NACH der Aktion verschoben. Das ist vom Standpunkt des Benutzers aus überzeugender.
-
Forum: Win32/Win64 API (native code)
Delphi
by PeterPanino,
6. Aug 2012
Weil PostMessage wartet, bis die Nachricht verarbeitet wurde, und deshalb das das Delete-Ereignis dann schon abgearbeitet ist?
Du meinst, dass die User-Message nicht an das Fenster, sondern an die eigene ListView gesendet wird?
VIELEN, VIELEN HERZLICHEN DANK!!! Ich spendiere dir hiermit ein frisches, kühles virtuelles Lager-Pils!
-
Forum: Win32/Win64 API (native code)
Delphi
by PeterPanino,
6. Aug 2012
Phantastisch, es scheint zu funktionieren!!!
Es ist mir aber noch nicht ganz klar, wieso. Du schickst beim Erhalt der LVN_DELETEITEM message einfach nochmals eine User-Message an das eigene Fenster. Wieso wird die dann erst NACH dem eigentlichen Delete-Ereignis verarbeitet, wenn die LVN_DELETEITEM Message noch VOR dem Delete gesendet wird? Hat das vielleicht etwas mit der Message-Warteschlange...
-
Forum: Win32/Win64 API (native code)
Delphi
by PeterPanino,
5. Aug 2012
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.
-
Forum: Win32/Win64 API (native code)
Delphi
by PeterPanino,
5. Aug 2012
http://docwiki.embarcadero.com/Libraries/en/Vcl.ComCtrls.TLVChangeEvent
Hier steht nichts von gelöschten Items.
-
Forum: Win32/Win64 API (native code)
Delphi
by PeterPanino,
5. Aug 2012
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.
-
Forum: Win32/Win64 API (native code)
Delphi
by PeterPanino,
5. Aug 2012
OnDeletion wird genauso VOR der Verminderung der Items ausgelöst. OnChange ist ganz was anderes.
-
Forum: Win32/Win64 API (native code)
Delphi
by PeterPanino,
5. Aug 2012
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...
-
Forum: Win32/Win64 API (native code)
Delphi
by PeterPanino,
5. Aug 2012
Hallo! Ich möchte eine Nachricht von einem Listview erhalten, NACHDEM ein Item aus der Listview gelöscht wurde. Ich habe folgenden Code probiert:
private
{ Private-Deklarationen }
OriginalListViewWindowProc: TWndMethod;
procedure ListViewWindowProcEx(var Message: TMessage);
procedure TForm1.FormCreate(Sender: TObject);
begin
OriginalListViewWindowProc :=...