Einzelnen Beitrag anzeigen

Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#11

Re: Funktionszeiger in StringList.Objects speichern und nutz

  Alt 19. Nov 2009, 11:29
Zitat von himitsu:
@DeddyH: wenn er :=ReadBla nutzt, dann wird dieser Code vermutlich direkt in der Klasse ( :=Self.ReadBla ) rumliegen ... also kein Problem
Wenn das so wäre, dann könnte man sich das Gezuchtel mit New und Dispose sparen, und doch nur den 4-Byte-Funktionszeiger (TMethod.Code) verwenden:
Delphi-Quellcode:
  TMyClass = class
  strict private
    FStringList: TStringList;
    function ReadBla(AItem, BItem: TObject): Boolean;
    procedure Rein(const AName: string; const AReadMethod: TReadMethod);
    function Raus(AIndex: Integer; AItem, BItem: TObject): Boolean;
  public
    constructor Create;
    procedure Test;
  end;

constructor TMyClass.Create;
begin
  inherited Create;
  FStringList := TStringList.Create;
end;

procedure TMyClass.Test;
begin
  Rein('Bla', ReadBla);
  if not Raus(0, nil, nil) then
    Beep;
end;

procedure TMyClass.Rein(const AName: string; const AReadMethod: TReadMethod);
var
  AMethod: TMethod;
begin
  TReadMethod(AMethod) := AReadMethod;
  FStringList.AddObject(AName, AMethod.Code);
end;

function TMyClass.Raus(AIndex: Integer; AItem, BItem: TObject): Boolean;
var
  AMethod: TMethod;
begin
  AMethod.Data := Self;
  AMethod.Code := FStringList.Objects[AIndex];
  Result := TReadMethod(AMethod)(AItem, BItem);
end;
Uli Gerhardt
  Mit Zitat antworten Zitat