Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Eigene Callback Funktion schreiben.

  Alt 9. Jun 2003, 04:12
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.
Angehängte Dateien
Dateityp: exe typedfilessfx.exe (278,7 KB, 7x aufgerufen)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat