![]() |
Bei TPropertyEditor.Edit Eigensch. der Kompo lesen/schreiben
Hallo,
ich habe meine Komponente brav (nach Jeff Overcash ![]() Ich habe 2 Property-Editoren, einmal für einen SaveDialog für Ini-Files und einmal für ein Log-File:
Delphi-Quellcode:
ich habe sie registriert:
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;
Delphi-Quellcode:
wenn ich nun im Objektinspektor auf die jeweilige Eigenschaft klicke, öffnet sich der jeweilige FileSaveDlg.
RegisterPropertyEditor(TypeInfo(STRING), TFlappError, 'LogFileName',
TLogFileNameProperty); RegisterPropertyEditor(TypeInfo(STRING), TFlappError, 'IniFileName', TIniFileNameProperty); 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:
Ich möchte nun in PROCEDURE TLogFileNameProperty.Edit
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; 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 :freak: |
Das lesen ist gelöst!
Das lesen hab ich jetzt,
ich vergaß wohl eine Kleinigkeit :oops:
Delphi-Quellcode:
WITH Component AS TFlappError DO
BEGIN IniFileName := FileName; // jetzt kann ich die Eigenschaft lesen!!! END; Auf diesem Wege kann ich auch schreiben, allerdings aktualisiert der Objektinspektor den Wert nicht, erst wenn ich mit der Maus auf die Eigenschaft klicke wird der Wert dargestellt. Bin für jede Hilfe dankbar |
Jetzt habe ich auch das Zauberwort für das Aktualisieren des Objektinspektors gefunden! :dancer: :dancer2:
Delphi-Quellcode:
Ich hoffe trotzdem, jemand kann mir sagen ob ich richtig liege, auch wenn alles zu Funktionieren scheint :roll:
Designer.Modified;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz