Einzelnen Beitrag anzeigen

bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Austausch von Funktionalität , Interfaces ?

  Alt 21. Jan 2017, 23:23
ich möchte die Myregistry: IRegistryAccess; nicht in meinen Mainform haben, geht dies technisch ?
Meine aktuelle Code Version funktioniert nicht mehr, ich müsste den Wert der Boolschen Variable in der initialization jeweils Berücksichtigen und neu Anpassen. Die erste Version oben hatte korrekt funktioniert.



Delphi-Quellcode:
type
  TForm1 = class(TForm)
    btn_GO: TButton;
    CheckBox1: TCheckBox;
    Memo1: TMemo;
    CheckBox2: TCheckBox;
    procedure btn_GOClick(Sender: TObject);
    procedure CheckBox2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }

  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.btn_GOClick(Sender: TObject);
begin

  /// ich will die Klasse nicht im Hauptprogramm haben !
  Memo1.lines.add(IntToStr(Myregistry.ReadInteger(1)));


  /// Zielversion -> im code sieht man nicht mehr welche implementierung
  /// ausgerufen wird
  Memo1.lines.add(IntToStr(ReadInteger(1)));
end;

procedure TForm1.CheckBox2Click(Sender: TObject);
begin
     useregistryClass := CheckBox2.Checked;
end;

end
.



Delphi-Quellcode:
unit Unit_interface;

interface

uses classes, types;

type
  IRegistryAccess = interface
    ['{257E3C2E-3601-4FB3-B57C-A7E671EC1B7E}']
    function ReadInteger(IntegerName: Integer): Integer;
  end;

type
  TRegistryReader = class(TInterfacedObject, IRegistryAccess)
    function ReadInteger(IntegerName: Integer): Integer;
  end;

type
  TRegistryFileReader = class(TInterfacedObject, IRegistryAccess)
    function ReadInteger(IntegerName: Integer): Integer;
  end;

var
  Myregistry: IRegistryAccess;
  useregistryClass: Boolean;

function ReadInteger(index: Integer): Integer;

implementation

function ReadInteger(index: Integer): Integer;
begin
  Result := Myregistry.ReadInteger(1);
end;

{ TRegistryReader }

function TRegistryReader.ReadInteger(IntegerName: Integer): Integer;
begin
  Result := -1;
end;

{ TRegistryFileReader }

function TRegistryFileReader.ReadInteger(IntegerName: Integer): Integer;
begin
  Result := 333;
end;

initialization

begin
  if useregistryClass then
  begin
    Myregistry := TRegistryReader.Create;
  end
  else
  begin
    Myregistry := TRegistryFileReader.Create;
  end;
end;

end.
  Mit Zitat antworten Zitat