Einzelnen Beitrag anzeigen

silver-moon-2000

Registriert seit: 18. Feb 2007
Ort: Schweinfurt
170 Beiträge
 
Delphi XE Professional
 
#1

Auf Elemente der übergeordneten Klasse zugreifen

  Alt 8. Mai 2008, 16:47
Hallo zusammen,

sorry, dass ich schon wieder nerve, und mir auch kein SO aussagekräftiger Name eingefallen ist. Am liebsten hätte ich schreiben wollen: "Bin verwirrt, helft mir"

Sorry, der Thread wird etwas länger...

Ich will ein kleines Progtramm schreiben, das mir die CRC32 Checksummen von Dateien berechnet. Das Berechnen ist nicht das Problem.

Ich will das Berechnen in einen Thread auslagern, folgender Code:
Delphi-Quellcode:
type TCRCThread = class(TThread)
  protected
    procedure Execute; override;
  public
    constructor Create;
end;


type TCRCList = class(TObject)
  private
    fOL : TCRCObjectList;
    fThread : TCRCThread;
    fInList : TListBox;
    fOutList : TMemo;
  public
    constructor Create;
    destructor Destroy; override;
    procedure getFiles;
    procedure StartCRC;
    procedure StopCRC;
    procedure DisplayCRC;
    property InList : TListBox read fInList write fInList;
    property OutList : TMemo read fOutList write fOutList;
end;
TCRCList.GetFiles schreibt die DateiNamen und Sonstige Informationen in die gecastete ObjectList fOL.
TCRCList.StartCRC erzeugt und startet den Thread namens fThread.
TCRCList.DisplayCRC soll unter anderem die berechneten Checksummen in das Memo fOutList schreiben.
TCRCThread.Execute soll der Reihe nach die CRC32 aller in der ObjectList vorhandenen Dateien berechnen und diese im Memo fOutList ausgeben.

Problem: Wie kann ich im Thread auf die Elemente meiner ObjectListe der Klasse TCRCList zugreifen?

Zweites Problem: Wie kann ich im thread, wenn er einen for-Durchgang beendet hat, die Methode DisplayCRC der Klasse TCRClist aufrufen?

Delphi-Quellcode:
procedure TCRCThread.Execute;
var i : integer;
begin
  for i := 0 to fOL.Count-1 do <-- ?
  begin
    //ComputeChecksum
    //Display CheckSum in Memo <-- ?
  end;
end;
Das blöde ist, ich brauche Methode und ObjectList auch, bevor ich den Thread createt und nachdem ich ihn zerstört habe. Sonst hätte ich ja einfach dem Thread die Methode und die ObjectList geben können.

Meine einzige Idee ist es, dem Thread eine eigene ObjectList und eigene Display-Methode zu spendieren und dann die ObjectList einfach zu kopieren...

Delphi-Quellcode:
type TCRCThread = class(TThread)
  private
    fOL : TCRCObjectList;
    procedure DisplayCRC;
  protected
    procedure Execute; override;
  public
    constructor Create;
end;

procedure TCRCList.StartCRC;
begin
  fThread := TCRCThread.create;
  fThread.fOL := fOL;
  [...]
end;
Ich hoffe, ich konnte mein Problem halbwegs verständlich machen
Gibt es eine Möglichkeit, vom Thread fThread aus auf die ObjectList fOL der Klasse TCRCList zuzugreifen?
Tobias
Bitte nicht hauen , ich weiß es nicht besser
  Mit Zitat antworten Zitat