Gegeben ist eine typisierte Datei mit Datensätzen. Alle Operationen mit dieser Datei sind in eine Klasse gekapselt (hinzufügen, löschen, modifizieren, auslesen, etc.). Nun kann es aber auch vorkommen, dass der Benutzer dieser Klasse alle Datensätze braucht. Er könnte nun in einer Schleife alle Datensätze durchgehen und sie mit der "Lesen"-Methode anzeigen. Dies wollte ich dem Benutzer der Klasse allerdings abnehmen und dachte dabei an eine Callback Funktion. Callback deswegen, damit man beispielsweise eine Fortschrittsanzeige implementieren kann oder so.
Mein erster etwas kläglicher Versuch sieht jetzt so aus:
Delphi-Quellcode:
const
TCM_MAXRECORDS = WM_USER+74;
TCM_ENUMRECORDS = WM_USER+75;
function TTypedFile.EnumRecords(hWnd: Cardinal; var Data: TRecord): Boolean;
var
i : Integer;
begin
result := TRUE;
SendMessage(hWnd, TCM_MAXRECORDS, 0, FRecordsCount);
for i := 1 to FRecordsCount-1 do
begin
seek(f, i);
read(f, Data);
SendMessageCallback(hWnd, TCM_ENUMRECORDS, 0, 0, @EnumRecords, 0);
end;
end;
Drei bis vier Probleme:
1. Er kompiliert es mir nicht, weil der 5. Parameter von SendMessageCallback nicht stimmt.
2. Wie rufe ich ich sie im Programm auf?
3. Wie muß die Funktion im Programm aussehen, welche die Nachrichten von meiner Callback empfängt?
4. Wie bekomme ich den Record aus der Callback in die Funktion, die die Nachrichten meiner Callback empfängt, um sie dann irgendwo auszuwerten / anzuzeigen?
Im Anhang mal das Demo zu der TTypedFiles
Unit mit der Klasse zum Arbeiten mit typisierten Dateien.
Edit: Auch wenn es sich eventuell anderes lösen läßt, ich hätte es schon gerne mit einer Callback, weil ich es selbst mal verstehen will.
Später soll noch eine Sortier-Routzine rein und da bräuchte ich dann auch wieder eine Callback Funktion.