谁知道怎么将运行过程中改动的结果保存下来(50分)

  • 主题发起人 主题发起人 elfgirl
  • 开始时间 开始时间
E

elfgirl

Unregistered / Unconfirmed
GUEST, unregistred user!
谁知道怎么将运行过程中改动的结果保存下来,也就是你想存盘的时候就把这次运行过程中的改动保存下来了,下次运行后的界面是上次运行后的结果.
还有运行的界面能不能点击哪个键的时候保存成图片或其他文档.就像用键盘上的alt+printscreen键实现的功能,可以把界面保存.
 
写Ini呀,下次启动的时候读,修改位置不就行了
 
可是应该怎么写ini文件呢,哪本书上有介绍的?一般的cbuilder书上有吗.你可不可以给我举个例子
 
formcreate中加入:
Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Myini.ini');
try
//设置窗口在屏幕上的位置
Left := Ini.ReadInteger('SearchSet', 'Left', 0);
Top := Ini.ReadInteger('SearchSet', 'Top', 0);
finally
Ini.Free;
end;

formonclose中加入
Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Myini.ini');
try
Ini.WriteInteger('Searchset', 'Left', Left);
Ini.WriteInteger('Searchset', 'Top', Top);
finally
Ini.Free;
end;

书嘛还是看看delphi的帮助吧,别忘了在uses部分加上IniFiles
 
可是,我看不懂dephi语言.你能不能告诉我cbuilder怎么写还有怎么将运行后的界面保存成文件.
 
>>将运行后的界面保存成文件
不明白,有什么用?
你把里边的 . 换成 -> 就差不多了[:D]
:= 是赋值号
 
我改了,根本就不行. 这是FORMCLOSE里的语句,说没定义INI,很多错误
Ini -> TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Myini.ini');
try
Ini.WriteInteger('Searchset', 'Left', Left);
Ini.WriteInteger('Searchset', 'Top', Top);
finally
Ini.Free;
end;
 
不是在FormClose中写入ini文件,要在FormDestroy事件中加入
 
#include "inifiles.hpp"
TIniFile *ini;
try
{
ini= new TIniFile(ExtractFilePath(Application.ExeName)+"AnalyzeComLog.ini");
// Read Run time

strLastRunTime=ini->ReadString("General","LastRunTime","20020914100303");
strBDEAliasName =ini->ReadString("General","BDEAliasName","CSV");
//Read log file type
bRecordAnalyzeTime= ini->ReadBool("General","RecordAnalyzeTime",false);

}
catch(...)
{
delete ini;
return;
}
delete ini;
 
这样写也不对,好像格式就不对.
 
yanghai,这一些代码应该放在哪里?用写try..
 
在create事件中读
在closer或者destory事件中保存
在c++中可以直接使用delphi的单元的
参考如下delphi例子
一些比较专业的软件都有自动保存窗口运行状态的功能,具体的方法都是在窗口关闭前将其状态保存到注册表中或ini文件中,而这些代码一般都是相同的,所以可以将其集中在一起,重复使用。本文将相应的代码用一个控件TPosition来实现,使用时只要将此控件放到相应的Form上即可,不需要增加任何代码,从而实现了“零”代码保存窗口运行状态。
  下面是这个控件的主要实现文件Position.pas的内容,包括相应的注释。为了保持注册表的整洁,这里把信息保存到ini文件中。
  unit Position;
  interface
  uses
  Forms, Classes, SysUtils, Windows, IniFiles;
  type
  //TPosition是不可视控件,由TComponent继承
  TPosition = class(TComponent)
  private
  //用此变量保存父窗口的OnDestroy事件
  FOnDestroy: TNotifyEvent;
  //用此函数替换父窗口的OnDestroy事件
  procedure FormDestroy(Sender: TObject);
  protected
  //在控件加载时恢复父窗口状态
  procedure Loaded;
override;
  end;

  //恢复窗口位置函数
  procedure ReadFormPos(Form:TForm);
  //保存窗口位置函数
  procedure SaveFormPos(Form:TForm);
  //控件注册函数
  procedure Register;
  implementation
  //连接此控件的图标
  {$R Position.Dcr}
  //恢复窗口位置函数,窗口状态存放在ini文件中。
  procedure ReadFormPos(Form : TForm);
  var
  RegFile : TIniFile;
  SectName : string;
  begin

  //ini文件中存放Form信息的节名称
  SectName := Form.Name + ' Position';
  //打开与可执行文件名相同的ini文件
  RegFile := TIniFile.Create(
  ChangeFileExt(Application.ExeName,'.ini'));
  //恢复窗口状态
  with Formdo
begin

  Left := RegFile.ReadInteger(SectName,'Left',Left);
  Top := RegFile.ReadInteger(SectName,'Top',Top);
  Width := RegFile.ReadInteger(SectName,'Width',Width);
  Height := RegFile.ReadInteger(SectName,'Height',Height);
  WindowState := TWindowState(
  RegFile.ReadInteger(SectName,'WindowState',0));
  end;

  //关闭ini文件
  RegFile.Free;
  end;

  //保存窗口位置函数
  procedure SaveFormPos(Form:TForm);
  var
  RegFile : TIniFile;
  SectName : string;
  begin

  SectName := Form.Name + ' Position';
  RegFile := TIniFile.Create(
  ChangeFileExt(Application.ExeName,'.ini'));
  with Formdo
begin

  RegFile.WriteInteger(SectName,'WindowState',
  integer(WindowState));
  //最大化时,不保存窗口位置
  if WindowState <> wsMaximized then
begin

  RegFile.WriteInteger(SectName,'Left',Left);
  RegFile.WriteInteger(SectName,'Top',Top);
  RegFile.WriteInteger(SectName,'Width',Width);
  RegFile.WriteInteger(SectName,'Height',Height);
  end;

  //当要保存状态的窗口是程序主窗口时,要特殊处理。因为主窗口收到最小化消息时,只是把此消息转至Application处理,本身并不最小化。所以我们要判断Application的状态。
  if Form = Application.MainForm then
begin

  if IsIconic(Application.Handle) then
begin

  Reg File.Write Integer(Sect Name,'WindowState',
  Integer(wsMinimized));
  end;

  end;

  end;

  RegFile.Free;
  end;

  //注册控件
  procedure Register;
  begin

  RegisterComponents('XDCtls', [TPosition]);
  end;

  //TPositon类的实现
  //当主窗口Destroy时,调用此函数,此函数又调用保存的OnDestoy事件处理函数
  procedure TPosition.FormDestroy(Sender: TObject);
  begin

  SaveFormPos(Owner as TForm);
  if Assigned(FOnDestroy) then
FOnDestroy(Sender);
  end;

  //控件加载时,恢复父窗口位置,并对父窗口的OnDestroy事件进行替换
  procedure TPosition.Loaded;
  begin

  inherited Loaded;
  //非设计状态才进行处理
  if not (csDesigning in Componentstate) then
begin

  ReadFormPos(Owner as TForm);
  FOnDestroy := (Owner as TForm).OnDestroy;
  (Owner as TForm).OnDestroy := FormDestroy;
  end;

  end;

  end.

  完成此单元后,新建一个Package,将此单元包含在其中,编译、安装即可。资源文件Position.dcr,可自行创建合适的图标。使用时,只要将这个控件放到相应的Form即可。下面是我测试时的窗体代码,不用加任何语句就可以自动保存窗体状态。
  unit Unit1;
  interface
  uses
  Windows, Messages, SysUtils, Classes, Graphics,
  Controls, Forms, Dialogs,Position;
  type
  TForm1 = class(TForm)
  Position1: TPosition;
  private
  public
  end;

  var
  Form1: TForm1;
  implementation
  {$R *.DFM}
  end.

  此程序在PWIN97+Delphi5.0下通过

 
sorry,我还是看不太懂.应该在哪里创建这个新控件,是不是另开一个工程.
CBUILDER里面可以直接用DEPHI吗?
或者你直接告诉我这些代码能不能添到CBUILDER中去,应该添到哪里?
还有你最后试验的个例子在CBULDER中应该怎么写,写到哪里去?
不好意思,我是个初学者,请多多包涵,给你添麻烦了.
 
后退
顶部