Hallo,
ich habe meine Komponente brav (nach Jeff Overcash
What ever happened to Proxies.pas?) in ein Design- und Runtime-
Package aufgeteilt, und (fast) alles klappt Wunderbar.
Ich habe 2 Property-Editoren, einmal für einen SaveDialog für Ini-Files und einmal für ein Log-File:
Delphi-Quellcode:
UNIT FlappErrorReg;
TYPE
TLogFileNameProperty =
CLASS(TPropertyEditor)
FUNCTION AllEqual: boolean;
OVERRIDE;
PROCEDURE Edit;
OVERRIDE;
FUNCTION GetAttributes: TPropertyAttributes;
OVERRIDE;
FUNCTION GetValue:
STRING;
OVERRIDE;
PROCEDURE SetValue(
CONST Value:
STRING);
OVERRIDE;
END;
TIniFileNameProperty =
CLASS(TPropertyEditor)
FUNCTION AllEqual: boolean;
OVERRIDE;
PROCEDURE Edit;
OVERRIDE;
FUNCTION GetAttributes: TPropertyAttributes;
OVERRIDE;
FUNCTION GetValue:
STRING;
OVERRIDE;
PROCEDURE SetValue(
CONST Value:
STRING);
OVERRIDE;
END;
ich habe sie registriert:
Delphi-Quellcode:
RegisterPropertyEditor(TypeInfo(STRING), TFlappError, 'LogFileName',
TLogFileNameProperty);
RegisterPropertyEditor(TypeInfo(STRING), TFlappError, 'IniFileName',
TIniFileNameProperty);
wenn ich nun im Objektinspektor auf die jeweilige Eigenschaft klicke, öffnet sich der jeweilige FileSaveDlg.
Nun möchte ich aber in einer Dialog-Prozedur bestimmte Eigenschaften meiner Komponente lesen bzw. schreiben, aber irgendwie habe ich da einen Knoten:
(Beide Klassen sind gleich, nur einmal *.log einmal *.ini)
Delphi-Quellcode:
FUNCTION TLogFileNameProperty.AllEqual: boolean;
VAR
FirstVal : STRING;
i : Integer;
BEGIN
FirstVal := GetStrValue;
Result := True;
i := 1;
WHILE Result AND (i < PropCount) DO
BEGIN
Result := Result AND (GetStrValueAt(i) = FirstVal);
Inc(i);
END;
END;
PROCEDURE TLogFileNameProperty.Edit;
VAR
Dlg : TOpenDialog;
BEGIN
Dlg := TOpenDialog.Create(Application);
TRY
WITH Dlg DO
BEGIN
Dlg.Filter := 'Logfile (*.log)|*.log|Textfile (*.txt)|*.txt|all Files|*.*';
Dlg.DefaultExt := '*.log';
Title := 'Logfile for ' + TComponent(GetComponent(0)).Name;
FileName := Value;
IF Execute THEN Value := FileName;
END;
FINALLY
FreeAndNil(Dlg);
END
END;
FUNCTION TLogFileNameProperty.GetAttributes: TPropertyAttributes;
BEGIN
Result := [paDialog]
END;
FUNCTION TLogFileNameProperty.GetValue: STRING;
BEGIN
Result := GetStrValue;
END;
PROCEDURE TLogFileNameProperty.SetValue(CONST Value: STRING);
BEGIN
SetStrValue(Value);
END;
Ich möchte nun in PROCEDURE TLogFileNameProperty.Edit
1) die Eigenschaft InIFileEnabled (Boolean) von meiner Komponente lesen und
2) die Eigenschaft LogFileName für die es auch einen Propertyeditor (siehe oben) gibt schreiben (nur in bestimmten Fällen, sonst natürlich nur über den eigenen Propertyeditor)
Ich hoffe es kann mir jemand helfen meinen Konten zu lösen