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.