Delphi编程俱乐部

Author: Date: 2000年 第4期

  大家好delphi(http://www.gislab.ecnu.edu.cn/delphibbs)编程俱乐部又和大家见面了,大富翁论坛在和电脑报密切合作下《Delphi网络论坛精华2000》(250页书+1光盘)终于要上市了。我们计划一年之久的“大富翁B计划”也要告一段落了,首先要感谢delphi大富翁论坛7000多个会员,你们一年来对论坛的参与使我们的这本书有了非常丰富的内容,其次要感谢这本书的志愿编辑们,你们用专业的知识和辛勤的劳动整理出了十几万条问题的精华,最后还要感谢电脑报全体编辑对这件公益事业的支持,并为这本书放进苦丁香价值48元的《快学即用delphi》教程使初学者能从这本书上得到更多的帮助。我们将按照原定的方案:10%捐献给希望工程,30%为所有访问者购买本书,30%为编辑工作费用,30%支持大富翁论坛的运作来支配这次我们销售的收益,因此请delphi爱好者继续支持我们,网上订购(http://www.hoyodo.com/Home/news/news-delphi.htm),还忘了说这次的问题就是从书上摘下来的。
  问题1:Installshield(delphi 4.0 自带)  作了一个分发工具,遇到两个问题:数据库是foxbase,(1) 虽然选择了包含卸载程序uninstallshied,但最后没有uninstall !(2) 安装后,以前的大富翁离线浏览程序不能运行。
  回答:DAO是微软的软件,BDE提供了通过BDE可以再去访问DAO,然后再去访问数据库的能力,你做的安装程序一定是在本机运行过了,而你的BDE在安装后又把DAO的文件破坏或覆盖掉了。访问MS Access 97数据库要用DAO 3.5,BDE中MSACCESS的DLL32应设置为IDDA3532.DLL,访问MS Access 95数据库要用DAO 3.0,BDE中MSACCESS的DLL32应设置为IDDAO32.DLL。
  问题2:有不通过BDE就能直接访问DBF(FoxPro)数据库的构件吗?最好能够直接设定索引,要对数据进行排序,还能够运行Locate等方法。
  回答:这里有两个比较酷的给你:http://www.nease.net/~bozhi/apollo4.zip ----for d3用于访问xbase的数据库,297K,含源码。http://www.nease.net/~bozhi/hcn6.zip---Halcyon V6.0(440k)直接存取Clipper、Foxpro、Dbase系列的数据库。以上两个控件均符合你的要求,能对索引进行操作,能进行Locate,能做的活比你想象的要多得多。
  问题3:本人刚从VB加入DELPHI,想学做个控件,如何由TEdit控件做一个只能输入数值的控件。
  回答:方法1.使用 TMaskEdit(在 additional页上),这是一个可以屏蔽输入的Edit控件,将 EditMask设成 ′9999999′你需要的最大位数即可。方法2.自己写 Coding
  TNumericEdit = class (TCustomEdit)
  private
  procedure KeyPress(var Key:Char);override;
  end;
  procedure TNumericEdit.KeyPress(var Key:Char);
  begin
  if not key in [′0′..′9′] then key:=#0;
  inherited;
  end;
  问题4:我做了一个控件,想使其在运行状态时能用鼠标拖动放大缩小。取得控件所在的容器,并用容器重画来实现,但会抖动。如何解决?
  回答:可以用一个API函数。要往窗口paint前,LockWindowsUpdate(hwnd:HWND),不让某个窗口paint,等paint后在LockWindowsUpdate(0)可以避免paint 一段,窗口就refresh,适用于动态paint。
  问题5:大富翁提问后,有人解答,会自动将答案email给提问者。如何实现的?请大虾们指教。谢谢!
  回答:本论坛是用 ASP 写的,email 功能是用 Delphi 3 做了一个 Automation Object,用了著名的 SakEmail 控件。在 ASP 中 调用的方式大致如下:
  Set Mailer = Server.CreateObject(″sysMail.PostMan″)
  Mailer.MailFrom = ″DelphiBBSMaster@nt4.gislab.ecnu.edu.cn″
  Mailer.DispName = ″大富翁论坛″
  Mailer.MailServer = ???
  Mailer.Subject = ″关于:″+???+″ (Notification from Delphi BBS)″
  Mailer.MailTo = ???
  Mailer.Content = ???
  Mailer.SendMail
  现在 IIS 4 中已经有加入了连接 smtp server 的功能了。
  问题6:Delphi中有2000年问题吗? 
  回答:所谓2000年问题,并不是某个编程语言的问题,而是早期的数据库系统往往把日期格式定为短格式,只有两位数字描述年份,从而无法同时表示19xx年和20xx年. 当前的系统均已经注意了这个问题,所以2000年的问题应当是针对以往的数据库应用系统而言,而不是Delphi 有没有这个问题。