Einzelnen Beitrag anzeigen

Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#5

Re: Callback oder sonstige Methode

  Alt 27. Jul 2008, 13:16
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.
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat