Bonjour,
j'ai créé un composant hérité de TComponent et il fonctionne nickel.
Ce compo a un module d'édition spécifique enregistré avec RegisterPropertyEditor en [paDialog].
Pour finir, j'utilise DefineProperties(Filer: TFiler); pour sauvegarder le tout dans le dfm (cf http://delphi.developpez.com/faq/?pa...ableauxdansdfm ).
Tout pourrait être merveilleux mais lorsqu'en Design j'utilise le dialogue pour faire des modifications et que je referme le form et l'unité, Delphi7 ne me demande pas d'enregistrer, donc si j'oublie les modifications se perdent.

Y aurait-il un moyen de dire à l'EDI que l'un des composants du form vient d'être modifié et doit provoquer l'enregistrement ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
  TDesignXYZ = type string;
 
  TDesignXYZProperty = class(TStringProperty)
  public
    function  GetAttributes: TPropertyAttributes; override;
    procedure Edit; override;
  end;
 
  TKxXYZ = class(TComponent)
  private
    FAboutMBT       : string;
    FList           : TObjectList;
    ...
    FDesignXYZ      : TDesignXYZ;      // Edit Property
    FDialDesign     : TDesignXYZForm;  // Design Form
    FDialParams     : TExecXYZForm;    // Exec params Form
    FINIFile        : string;
    FEvtSetup       : TNotifyEvent;
    // Lecture / Ecriture de FList dans le .dfm
    procedure WriteStrData(Writer: TWriter);
    procedure ReadStrData(Reader: TReader);
    //
    procedure SetDesignXYZ(const Value: TDesignXYZ);
    procedure SetAbout(const Value: string);
    procedure DialDesignClose(Sender: TObject; var Action: TCloseAction);
    function  GetOwnerFormName: string;
    procedure DialParamsClose(Sender: TObject; var Action: TCloseAction);
  protected
    procedure Loaded; override;
    procedure ReadINI; // automatique lors de chaque démarrage de l'exe
    procedure WriteINI; // automatique lors de chaque fermeture de l'exe
    procedure DefineProperties(Filer: TFiler); override; // Lecture / Ecriture interne de FList
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure ExecDialParam;
  published            
    property AboutMBT       : string             read FAboutMBT          write SetAbout;
    property INIFile        : string             read FINIFile           write FINIFile;
    property XYZ            : TDesignXYZ         read FDesignXYZ         write SetDesignXYZ;
    property OnSetup        : TNotifyEvent       read FEvtSetup          write FEvtSetup;
  end;
 
procedure Register;
 
implementation
 
procedure Register;
begin                   
  RegisterPropertyEditor(TypeInfo(TDesignXYZ), nil, '', TDesignXYZProperty);
  RegisterComponents('MBT Tools', [TKxXYZ]);
end;