Einzelnen Beitrag anzeigen

Pluto

Registriert seit: 1. Dez 2005
Ort: Dietzenbach
53 Beiträge
 
Delphi 7 Enterprise
 
#1

Callback oder sonstige Methode

  Alt 27. Jul 2008, 10:38
Ich habe ein Object, das in einer Schleife einen Windows Ordner und
Unterordner nach bestimmten Dateien durchsucht und bei den gefundenen
Dateien gewisse Untersuchungen durchführt. Im aufrufenden Form (Unit1)
möchte ich anzeigen, welche Datei gerade bearbeitet wird.
Das wäre einfach, wenn ich in der Unit des Objectes ein "uses Unit1"
einfügen würde, das ist aber nicht möglich, da ich das Object von
verschiedenen Stellen des Programmes aufrufen möchte.

Um nicht den umfangreichen Code des Objectes hier bringen zu müssen,
habe ich das Problem hier auf ein simples Testprogramm reduziert.
Unit1 enthält das aufrufende Form, Unit2 das simplifizierte Object TCBTest.
Statt der Datei Proceduren wird von TCBTest nur eine Liste gefüllt.

Hier das Object TCBTest:
Delphi-Quellcode:
unit Unit2;

interface

uses
  Classes, SysUtils, Controls, Dialogs ;

type
  TCBTest = class(TControl)
  private
    FSList: TStringList;
    procedure FillSL;
  public
    constructor Create; override;
    destructor Destroy; override;
    property SList: TStringList read FSList;
  end;

var
  CBTest: TCBTest;

implementation

constructor TCBTest.Create(AOwner: TComponent);
begin
  inherited;
  FSList := TStringList.Create;
  FSList.Clear;
  FillSL;
end;

destructor TCBTest.Destroy;
begin
  FreeAndNil(FSList);
  inherited Destroy;
end;

procedure TCBTest.FillSL;
var
  i: integer;
begin
  FSList.Clear;
  for i := 0 to 9 do begin
    FSList.Add(IntToStr(i));
    ShowMessage(IntToStr(i) + ' added to list');
    { statt ShowMessage sollte hier die Rückmeldung zum
    aufrufendem Form erfolgen - Anzeige im Edit Feld }

    Sleep(200); // Zeit für Anzeige
  end;
end;

end.
Das Form, welches das Object aufruft hat nur einen Button,
eine Listbox und ein Editfeld.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Messages, SysUtils, Classes, Controls, Forms,
  Dialogs, StdCtrls, Unit2;

type
  TForm1 = class(TForm)
    Button1: TButton;
    lbxSL: TListBox;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  CBTest := TCBTest.Create(Self);
  lbxSL.Items := CBTest.SList;
  FreeAndNil(CBTest);
end;

end.
Ich habe mit Callback Funktionen und auch mit Procedural Types
experimentiert, ohne eine Lösung zu finden.
Kann mir jemand helfen?
begin
if Aufwand > Ergebnis then exit;
end;
  Mit Zitat antworten Zitat