unit MyEdit;interfaceuses
  Windows, Messages, SysUtils, Classes, Controls, StdCtrls,Graphics,INIFiles;type
  TMyEdit = class(TEdit)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    constructor Create(AOwner:TComponent);override;
    destructor Destroy;override;
    { Public declarations }
  published
    { Published declarations }
  end;procedure Register;implementationconstructor TMyEdit.Create(AOwner:TComponent);
var
 tmpINI:TINIFile;
begin
 inherited Create(AOwner);
 tmpINI:=TINIFile.Create('c:\component.ini');
 Text:=tmpINI.ReadString('Label','Name','无标题');
 tmpINI.Free;
end;destructor TMYEdit.Destroy;
var
  tmpINI:TINIFile;
begin
  tmpINI:=TINIFile.Create('c:\component.ini');
  tmpINI.WriteString('Label','Name',self.Text);
  tmpINI.Free;
  inherited Destroy;
end;procedure Register;
begin
  RegisterComponents('Samples', [TMyEdit]);
end;end.

解决方案 »

  1.   

    在你DESTORY的时候,TEXT的内容已经被改为‘’了,用一个全局变量,改成这样:
    unit MyEdit;interfaceuses
      dialogs,Windows, Messages, SysUtils, Classes, Controls, StdCtrls,Graphics,INIFiles;type
      TMyEdit = class(TEdit)
      private
        { Private declarations }
      protected
        { Protected declarations }
      public
        constructor Create(AOwner:TComponent);override;
        destructor Destroy;override;
        procedure onchg(Sender: TObject);
        { Public declarations }
      published
        { Published declarations }
      end;procedure Register;var s : string;
    implementationconstructor TMyEdit.Create(AOwner:TComponent);
    var
     tmpINI:TINIFile;
    begin
     inherited Create(AOwner);
     tmpINI:=TINIFile.Create('c:\component.txt');
     Text:=tmpINI.ReadString('Label','Name','无标题');
     tmpINI.Free;
     onchange:=onchg;
    end;
      procedure TMyEdit.onchg(Sender: TObject);
      begin
       s:=text;
      end;destructor TMYEdit.Destroy;
    var
      tmpINI:TINIFile;
    begin
      tmpINI:=TINIFile.Create('c:\component.ini');
      tmpINI.WriteString('Label','Name',s);
      tmpINI.Free;
      inherited Destroy;
    end;procedure Register;
    begin
      RegisterComponents('Samples', [TMyEdit]);
    end;end.
      

  2.   

    To lxl:
       可是onchg是自己定义的过程,并不是OnChange?
      

  3.   

    我还发现,如果在设计的时候给edit赋值,那么上面的控件就不能调入component.ini中的值.why?
      

  4.   

    unit MyEdit;interfaceuses
      Windows, Messages, SysUtils, Classes, Controls, StdCtrls,Graphics,INIFiles;type
      TMyEdit = class(TEdit)
      private
        { Private declarations }
        IniText:String;                  //增加一私有变量  
      protected
        { Protected declarations }
      public
        constructor Create(AOwner:TComponent);override;
        destructor Destroy;override;
        procedure Change;override;       //重载该过程;
      public
        { Public declarations }
      published
        { Published declarations }
      end;procedure Register;implementationprocedure TMyEdit.Change;      //重载过程,将改变后的值记录下。 
    begin
      inherited;
      IniText:=self.Text;
    end;constructor TMyEdit.Create(AOwner:TComponent);
    var
     tmpINI:TINIFile;
    begin
     inherited Create(AOwner);
     tmpINI:=TINIFile.Create('c:\component.ini');
     Text:=tmpINI.ReadString('Label','Name','无标题');
     tmpINI.Free;
    end;destructor TMYEdit.Destroy;
    var
      tmpINI:TINIFile;
    begin
      tmpINI:=TINIFile.Create('c:\component.ini');
      tmpINI.WriteString('Label','Name',IniText);  //将记录下的值写回Ini文件
      tmpINI.Free;
      inherited Destroy;
    end;procedure Register;
    begin
      RegisterComponents('Samples', [TMyEdit]);
    end;end.