我想用D写一个程序,这个程序不涉及数据库
   
我想实现:给一个窗口输入一些信息,然后关掉程序,再次打开时,刚才输入的信息还在。怎么样实现?
    谢谢各位大虾帮忙(最好有个简单的例子)
-------------------
我的想法是:先把一个可执行文件和一个文本文件(.txt)用流的方法组合在一起。这样执行可执行文件来对文本文件读写,
文本文件专门有来保存输入的信息。
高手们,谢谢了。

解决方案 »

  1.   

    用ini配置文件来存呀
    uses inifiles;    constructor Create(const FileName: string);
        function SectionExists(const Section: string): Boolean;
        function ReadString(const Section, Ident, Default: string): string; virtual; abstract;
        procedure WriteString(const Section, Ident, Value: String); virtual; abstract;
        function ReadInteger(const Section, Ident: string; Default: Longint): Longint; virtual;
        procedure WriteInteger(const Section, Ident: string; Value: Longint); virtual;
        function ReadBool(const Section, Ident: string; Default: Boolean): Boolean; virtual;
        procedure WriteBool(const Section, Ident: string; Value: Boolean); virtual;
        function ReadBinaryStream(const Section, Name: string; Value: TStream): Integer; virtual;
        function ReadDate(const Section, Name: string; Default: TDateTime): TDateTime; virtual;
        function ReadDateTime(const Section, Name: string; Default: TDateTime): TDateTime; virtual;
        function ReadFloat(const Section, Name: string; Default: Double): Double; virtual;
        function ReadTime(const Section, Name: string; Default: TDateTime): TDateTime; virtual;
        procedure WriteBinaryStream(const Section, Name: string; Value: TStream); virtual;
        procedure WriteDate(const Section, Name: string; Value: TDateTime); virtual;
        procedure WriteDateTime(const Section, Name: string; Value: TDateTime); virtual;
        procedure WriteFloat(const Section, Name: string; Value: Double); virtual;
        procedure WriteTime(const Section, Name: string; Value: TDateTime); virtual;
        procedure ReadSection(const Section: string; Strings: TStrings); virtual; abstract;
        procedure ReadSections(Strings: TStrings); virtual; abstract;
        procedure ReadSectionValues(const Section: string; Strings: TStrings); virtual; abstract;
        procedure EraseSection(const Section: string); virtual; abstract;
        procedure DeleteKey(const Section, Ident: String); virtual; abstract;
        procedure UpdateFile; virtual; abstract;
        function ValueExists(const Section, Ident: string): Boolean;
        property FileName: string read FFileName;
      

  2.   

    brightyang  兄,能详细点吗?说说你的方法,谢谢先。。但是如果用 ini 文件的话,使用起来就要两个文件了:可执行文件和ini文件。
    我是想使用时只用一个可执行文件就可以了,这个可执行文件是包含两个文件的:读写文本的程序文件和存放内容的文件。
      

  3.   

    使用流的方式保存
    procedure TForm1.btn2Click(Sender: TObject);
    var
      i:Integer;
    begin
      with TFileStream.Create('c:\derek.dat',fmcreate or fmOpenWrite) do
      begin
        try
           for i:=0 to Screen.FormCount-1 do
           begin
               if Screen.Forms[i]<>Self then
               WriteComponent(Screen.Forms[i]);
           end;
        finally
            Free;
        end;
      end;
    end;procedure TForm1.btn3Click(Sender: TObject);
    begin  with TFileStream.Create('c:\derek.dat',fmOpenread) do
      begin
        try
           while Position<Size do
           begin
             Form2:=TForm2.CreateNew(nil);
             Form2.ParentWindow:=HWND_DESKTOP;
             ReadComponent(Form2);
           end;
        finally
            Free;
        end;
      end;
    end;
      

  4.   

    procedure TForm1.FormCreate(Sender: TObject);
    var AppIni: TIniFile;
    begin
    try
     AppIni := TIniFile.Create(ExtractFilePath(application.ExeName)+'\ID.ini');
       id:=appini.ReadString('id','user','');
      password:=appini.ReadString('id','password','');  finally
       AppIni.Free;
       end;end;
      

  5.   

    myderek  能否解析一下呢,因为我刚学不久的。
    不好意思了
      

  6.   

    其实我要实现的功能很简单:
    比如我现在用D 写了一个小程序,运行时在上面输入一个信息:吴东   26  深圳
    我把这个可执行文件拷给 brightyang 兄,他打开也可以看到这个信息。同时他可以增加一个信息:www   25 北京
    再把这个文件拷给 myderek 兄,操作同上
    嘿嘿。不知道明白不
      

  7.   

    你的方法我在试呢,但是还要把这个INI文件一起拷给其他人才能用,
    能不能把这个INI文件编译进去,这样只拷一个文件(可执行文件)就可以了。
      

  8.   

    这个问题太简单了,几乎不编程就可以搞定,举例方法一:
    在窗体里放一个Memo1控件.uses SysUtils;
    在窗体启动时写代码:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
       if FileExists(ExtractFilePath(Application.ExeName)+'login.ini') then    
       memo1.Lines.LoadFromFile(ExtractFilePath(Application.ExeName)+'你的文件名.txt');
    end;//关闭时写代码
    procedure TFrmOrderform.FormClose(Sender: TObject;
      var Action: TCloseAction);
    begin
      memo1.Lines.SaveToFile(ExtractFilePath(Application.ExeName)+'你的文件名.txt'');
    end;
      

  9.   

    搂主只要一个exe就实现读写功能,楼上的好像都不行吧,等待高手
      

  10.   

    这个问题太简单了,几乎不编程就可以搞定,举例方法一: 
    在窗体里放一个Memo1控件.uses   SysUtils; 
    在窗体启动时写代码: 
    procedure   TForm1.FormCreate(Sender:   TObject); 
    begin 
          if   FileExists(ExtractFilePath(Application.ExeName)+ "你的文件名.txt")   then         
          memo1.Lines.LoadFromFile(ExtractFilePath(Application.ExeName)+ "你的文件名.txt "); 
    end; //关闭时写代码 
    procedure   TFrmOrderform.FormClose(Sender:   TObject; 
        var   Action:   TCloseAction); 
    begin 
        memo1.Lines.SaveToFile(ExtractFilePath(Application.ExeName)+ "你的文件名.txt " "); 
    end; 
      

  11.   

    UPUPLZ的意思应该是可以把信息写入exe并能由本exe读取。
      

  12.   

    application.Hint:='LZ的意思应该是可以把信息写入exe并能由本exe读取。';
      

  13.   

    顶,看有什么好办法,好像用字符流的形式可以,但没有试过,先定义一个字符串,关程序时再将数据写入其中,启动程序时再从里面读出来;大概是这样的样子,不过我也没有试过,只是提供一个参考,var
    str:stringlist:
    {$R *dfm}
    procedure Tform1.formclose(sender:object);
    begin
    str.Creat;
     str:=memo1.text;
     str.free;//不过这里还是要释放,不知能不能将数据保留住
    end;procedure Tform1.formclose(sender:object);
    begin
      str.create;
      memo1.text:=str;
      str.free;
    end;
      

  14.   

    不好意思大概思路应是这样
    var 
    str:stringlist: 
    {$R   *dfm} 
    procedure   Tform1.formclose(sender:object); 
    begin 
    str.Creat; 
      str:=memo1.text; 
      str.free;//不过这里还是要释放,不知能不能将数据保留住 
    end; procedure   Tform1.formshow(sender:tobject);
    begin 
        str.create; 
        memo1.text:=str; 
        str.free; 
    end; 
      

  15.   

    我也一般用ini文件存的,这样可以加密后存,不是很好吗,多个文件有什么关系,关键是功能强就行!
      

  16.   

    ini文件很好用啊,实在不行就用数据库吧。把数据存入数据库,执行过程中把相关的想存的数up入数据表,如果执行完毕后,就删掉。那样子就可以实现执行中突然关掉程序,打开后还是关调前的模样了。
      

  17.   

    就象 taxpayer 说的一样,只要一个EXE可执行文件,然后就可以对其里面的txt文件(可以合并的)操作。wuxiaojie2006,kaesdu  谢谢你的建议,其实我是想试试这样的方法,我是做系统开发的,老用数据库,所以想看看文件操作的方法。在这里先谢谢各位!!
      

  18.   

      大家的方法不是用记事本或ini文件保存数据,程序运行时再从里面读出来。不过好像都不符合要求哦。
    我倒是想到一方法,不知道可行不。找一个可以保存用户输入信息的控件,然后再把这个控件放到窗体里。这样只要程序去行,怎样操作都行,不过不知道有这样的控吗。没有的话就只有自己做了。在程序对这个控件输入的过程,改写它的属性。这只是思路不知道能否实现.