das müsste doch ganz einfach gehen. Du definiest einen Typ mit
Delphi-Quellcode:
type
TTestType = procedure (Sender: TObject; AddedValue: String) of object;
Diesen fügst du im Konstruktor ein und schreibst den entsprechenden Wert in ein private-Member deines Objekts. Beim füllen frägst du dann ab, ob der Wert vorhanden ist (mit Assigned()) und führst bei Erfolg die Prozedur aus. Dann brauchst du auch kein Sleep.
Bernhard
Beispiel:
Plutos Beispiel
Delphi-Quellcode:
unit Unit2;
interface
uses
Classes, SysUtils, Controls;
// Dialogs wirst du auf Grund von ShowMessage nicht mehr brauchen
type
TTest =
procedure (Sender: TObject; AddedValue:
String)
of object;
TCBTest =
class(TControl)
private
fTest: TTEst;
procedure FillSL;
public
constructor Create(AOwner: TComponent; Test: TTest);
property SList: TStringList
read FSList;
end;
implementation
constructor TCBTest.Create(AOwner: TComponent; Test: TTest);
begin
inherited;
fTest := Test;
FSList := TStringList.Create;
FSList.Clear;
FillSL;
end;
procedure TCBTest.FillSL;
var
i: integer;
begin
FSList.Clear;
for i := 0
to 9
do begin
FSList.Add(IntToStr(i));
if Assigned(fTest)
then
fTest(Self, IntToStr(i));
end;
end;
end.
Das Form, welches das Object aufruft hat nur einen Button,
eine Listbox und ein Editfeld.
Delphi-Quellcode:
unit Unit1;
[snip]
procedure TForm1.OnTest(Sender: TObject; AddedValue:
String);
begin
Edit1.Text := AddedValue;
Sleep(200);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CBTest := TCBTest.Create(Self, OnTEst);
lbxSL.Items := CBTest.SList;
FreeAndNil(CBTest);
end;
end.