网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
零代码保存窗口运行状态
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式

一些比较专业的软件都有自动保存窗口运行状态的功能,具体的方法都是在窗口关闭前将其状态保存到注册表中或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 Form do 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 Form do 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
  RegisterCom
  • 下一篇资讯: Email 服务器的简单实现
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号