新浪首页免费邮件用户注册网站地图
上移动梦网
赢手机大奖

新浪首页 > 科技时代 > 网上学园 > 高级编程 > 正文
看实例学Delphi编程四例

http://www.sina.com.cn 2001/07/11 17:24 中国电脑教育报 胡勇智

  在编程爱好者中流传着这样一句话:“业余的程序员用VB,真正的程序员用VC,聪明的程序员用Delphi”。这当然不尽贴切,但从中不难体会到Delphi作为Windows下的主要编程工具之一,其功能完善、灵活多变且易学易用的特点。

  下面,我们就通过四则具体的实例来学习Delphi编程的一般思路和技巧。

  将程序加入启动

  Windows自启动的信息存放于注册表HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun中,Delphi为程序员提供了专用于注册表操作的类型TRegistry:首先利用它声明一个变量,变量的RootKey属性表明当前是对哪一个根键进行操作;使用变量的OpenKey方法打开子键,使用ReadString方法读子键内容,使用WriteString方法写入子键内容。可以自定义一个过程AutoRun来实现此功能,格式为:AutoRun(任意名称,要自动运行的程序名)。实例如下:

  implementation

  uses Registry; //声明注册表单元

  procedure AutoRun(sCaption,sExeName:string); //sCaption为项目名称,sExeName为程序名

  var

  RegF:Tregistry; //定义变量RegF

  begin

  RegF:=Tregistry.Create; //创建变量

  RegF.RootKey:=HKEY_LOCAL_MACHINE; //指定要操作的根键

  if RegF.Openkey('SoftwareMicrosoft

  WindowsCurrentVersionRun',true) then

  RegF.WriteString(sCaption,sExeName);

  RegF.Free; //释放变量

  end;

  procedure TForm1.Button1Click(Sender:

  TObject);

  begin

  AutoRun('MyAutoRun',Paramstr(0));

  //调用过程,Paramstr(0)函数返回带路径的程序名

  end;

  实现文件拷贝

  在本例中,我们使用数据压缩的API函数LZCopy来实现一个文件拷贝的过程,其调用格式为:CopyFile(源文件名,目标文件名)。

  implementation

  uses LZExpand;

  procedure CopyFile(sFileName,dFileName:String);

  var sFile,dFile:file;

  begin

   AssignFile(sFile,sFileName);

   Reset(sFile);

   AssignFile(dFile,dFileName);

   Rewrite(dFile);

  LZCopy(TFileRec(sFile).Handle,TFileRec

  (dFile).Handle);

  CloseFile(sFile);

  CloseFile(dFile);

  end;

  避免多次打开同一程序

  Windows是一个多任务的操作系统,允许用户同时打开多个实例,但这样做有可能会造成不良后果。例如:自己设计屏幕保护程序时,只要屏保程序已经被打开运行,就不能再运行其第二个实例;如果不加以限制,则可能出现每隔一定时间就运行一个屏保程序的不正常情况。

  要使系统只能打开程序的一个实例,需要对工程文件(*.dpr)进行少许改动,使用API函数FindWindow,其格式为:FindWindow(窗体类名,窗体标题),返回一个窗体的句柄或零(如果没有找到窗体)。假设程序主窗体的标题为MainForm,则工程文件的具体代码如下:

  program Project1;

  uses Forms,Windows, Unit1 in 'Unit1.pas' {Form1};

  var Hwnd:THandle;

  begin

  Hwnd:=FindWindow('TForm1','MainForm'); //查找是否已有窗体MainForm

  if Hwnd<>0 then begin

  SetForegroundWindow(Hwnd); //激活已运行的程序实例,但程序最小化时无效

  Application.Terminate; //终止本次实例

  end

  else begin

  Application.Initialize;

  Application.CreateForm(TForm1, Form1);

  Application.Run;

  //运行本次实例

  end;

  end.

  限制窗体的大小

  当编程者为窗体选择可变化的边框时,用户可以按自己的意愿拖动边框,改变窗体大小。Delphi为窗体和所有控件提供了一个特殊的属性:Constraints。只需为Constraints属性的子属性设置合适的最大值与最小值,就能建立一个大小不超过指定限制的窗体或控件。我们可以将这些语句放在窗体创建事件中(FormCreate):

  procedure TForm1.FormCreate(Sender: TObject);

  begin

  form1.Height:=200;

  form1.Width:=300;

  form1.Constraints.MaxHeight:=400;

  form1.Constraints.MaxWidth:=600;

  form1.Constraints.MinHeight:=100;

  form1.Constraints.MinWidth:=150;

  end;



发表评论】【初学者园地】【科技聊天】【关闭窗口


新 闻 查 询

 相关链接
Delphi趣味编程实例三则 (2001/06/12 14:55)
用Delphi打造RealPlayer播放器 (2001/06/05 17:36)
用Delphi控制Windows的关闭功能 (2001/05/09 17:13)
Delphi全球大裁员11,500名 (2001/03/30 02:29)
利用Delphi开发旅游景点微机售票系统 (2001/02/13 16:25)
CORBA技术及在Delphi中的实现 (2000/10/26 12:07)
DELPHI的中文版安装程序制作大揭密 (2000/10/26 12:00)
Delphi控件的使用经验 (2000/10/18 14:31)
在Delphi中简单实现多重查询 (2000/09/29 11:32)
用Delphi获取当前系统时间 (2000/09/27 13:58)
DELPHI环境中组件的创建技巧 (2000/09/18 11:11)
用Delphi实现远程屏幕抓取 (2000/08/28 14:48)
Delphi 应用编程实例简介 (2000/05/23 11:51)
DELPHI使用15问 (2000/04/13 21:27)
Delphi使用心得两则 (2000/04/13 21:16)


科技时代意见反馈留言板 电话:010-82612286   欢迎批评指正

网站简介 | 用户注册 | 广告服务 | 招聘信息 | 中文阅读 | Richwin | 联系方式 | 帮助信息 | 网站律师

Copyright © 1996 - 2001 SINA.com, Stone Rich Sight. All Rights Reserved

版权所有 四通利方 新浪网