用dll画图?(100分)

  • 主题发起人 outlooking
  • 开始时间
O

outlooking

Unregistered / Unconfirmed
GUEST, unregistred user!
如何编写一个delphi的动态链接库使其具有画图功能,以供其它语言
调用(如:在power builder中调用)。
不知能否用TCanvas实现?
 
1、您的 Host Program(即将调用画图DLL的程序)需要向画图DLL中画图过程/函数
传递 hDC, 即 handle of device content, 如果无法取得 hDC,就传 hWnd,即
handle of the Window,画图过程/函数做 GetDC 和 ReleaseDC.

2、有了 hDC, 您可以用 API 中的各种画图函数,画图了,例如Polygon, etc.
如果想用TCanvas,可以Create一个,然后设置 Canvas.Handle := 那个 hDC.
Canvas就能用了,最后Free掉。

3、如果涉及坐标影射或开窗,画图区域的范围也需要传入。

Power Builder我没用过,以前这招实现了 VB3+TPW 的组合。
 
最好的方法是用Delphi做一个ActiveX控件或者做一个ActiveX Form, 将所有的画图
功能通通封装再ActiveX中.

做ActiveX较Active Form方便一些, 但一定要有一个Windowed Control, 例如:
1. 继承一个TScrollBox类
2. 再TScrollBox中加一个TControlCanvas
3. 定义绘图方法
4. 再Delphi中调试好注册成一个Delphi控件安装到Delphi中
5. File|New 创建一个ActiveX控件, 选定你的控件, 让Delphi将其封装成OCX

做一个Active Form有所不同:
1. File | New 创建一个ActiveX Form
2. 再空的 Form 上加一个 TPaintBox (与新建Application同)
3. 定义绘图方法及
4. 再TLB中追加方法和属性
5. 编译成OCX
6. 新建一个APP插入该OCX编译成EXE作为ActiveX Form的测试程序
7. 重新打开ActiveX Form工程, 将Run | Parameter指向上述APP
8. 调试你的ActiveX

两种方法各有利弊, ActiveX 控件容易制作和调试, 就如同写自己的Delphi控件一样
Active Form功能更强大更灵活, 可以再Form上加入自己的控制, 如菜单,按钮...
 
接受答案了.
 
顶部