中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
Delphi 组件撰写常问问题(4)
作者:佚名 时间:2007-09-18 16:51 出处:51cto 责编:月夜寒箫
              摘要:Delphi 组件撰写常问问题(4)
26 Delphi 有与 C++ 一样的 I/O Stream 类别吗?

答案可以说有也可以说没有。Delphi允许你建立自己的『文字文件驱动程序』,它可以让你使用Delphi 标准的 I/O 函式库来处理非标准的 I/O,如处理 UNIX 格式的文字文件或处理 Socket 所取得的资料。虽然没有像 C++ 的 I/O Stream 类别那么强大但应该也足够一般用途使用了。

建立『文字文件驱动程序』的方法在『Object Pascal Language Guide』中有明述。此 外你也可以参考 VCL 的 Printer 单元。

Delphi有 TStream 类别,不过是设计用来将对象写入资料流的,不像 C++ 的 I/O Stream 类别那么具有弹性。

 

27 如何取得列举型态变量的文字表示?

使用 TypInfo单元中的 GetEnumName 函式:

type

TMyType = (Value1, Value2);

var

TypeValue: TMyType;

begin

Writeln (GetEnumName(TypeInfo(TMyType), Ord(TypeValue));

end;

TypInfo单元中还有许多与型别信息有关的函式。

28  如何得知组件的window handle是何时建立的?

控件的 window handle 是在 CreateWnd 方法中建立的。如果你想要在建立 window handle 后接着做某些动作那么你应该改写 CreateWnd 方法:

procedure TMyClass.CreateWnd;

begin

// 现在还没取得 window handle

inherited CreateWnd;

// 呼叫 inherited 以取得 window handle

// 在这里撰写你想要执行的动作

end;

28  如何得知是否表格上所有组件都已加载完成?

Loaded 方法是在加载完成后接着被呼叫的。

procedure TMyClass.Loaded;

begin

inherited Loaded;

// 将ComponentState中的 csLoading 状态清除

// 在这里撰写你想要执行的动作

end;

29  在哪里绘制组件最适合?

你应该拦截 WM_PAINT 窗口讯息然后利用 Canvas 来绘制组件。然而 VCL 己经帮你拦 截好了,你只须改写组件的 Paint 方法即可。

procedure TMyClass.Paint;

begin

// 如果你的组件是己存在的组件继承下来的,那么必须在这里呼叫 inherited Paint

inherited Paint ;

// 在这里撰写你想要执行的动作

end;

30  如何改变组件的窗口式样?

CreateParams方法用来设定组件的窗口式样及其它必须传递至 CreateWindowEx API 的 参数。要改变组件的窗口式样,例如增加或拿掉组件的垂直滚动条只要改写 CreateParams 方法:

procedure TMyControl.CreateParams(var Params: TCreateParams);

begin

inherited CreateParams(Params);

if IWantAScrollBar then

Params.Style := Params.Style or WS_VSCROLL

else

Params.Style := Params.Style and not WS_VSCROLL;

end;

31 组件卷动时闪动的很厉害,如何克服这种情况?

要卷动组件本身最简单的方法就是改变它的坐标然后重画组件,但是这方法会导致组件闪动的很厉害。比较好的方法是呼叫 ScrollWindow 或 ScrollWindowEx Windows API。

闪动的另一个原因可能来自于 WM_PAINT 及 WM_ERASEBKGND。你可以试着拦截 WM_ERASEBKGND 及 WM_PAINT 讯息然后自己处理绘图动作,包括绘制背景的动作,或许可以改善闪动的情况。

32 如何重新激活Windows?

使用 ExitWindowsEx Windows API。

33 如何快速大量地更改组件资料?

在进行大量资料更改前后,利用 WM_SETREDRAW 讯息来控制你的组件暂时不要重画,这不但可以使资料设定速度增快也防止组件闪烁的情况。

34 为什么我的组件的 Ctl3D 属性设为 True 之后,它依然没有 3D 的边框呢?

如果 ControlStyle 属性内没有包含 csFramed 旗帜那么 Ctl3D 属性就会没有作用。在组件 的建构函式内加上:

ControlStyle := ControlStyle + [csFramed];

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有