📄 9910.txt
字号:
p= P_TO_P (pLine- >startPoint());
if (getPoint ((double*)(&p), "From Point: ", p)== RTNORM
&& getPoint((double*)(&p), "To point: ", q) == RTNORM)
{
pLine- >setStartPoint(p);
pLine- >setEndPoint(q);
pLine- >close();
}
return Acad::eOk;
}
---- 如您所见,HgyModify函数也要完全重写。至此我们对CircleTemperature和
LineTemperature的定义已经完成。上面P_TO_P()只是一个点对点赋值,getPoint()是自
定义的取点函数。 增加全局变量:这样我们在初始化或清除内存过程中可以存取该类。
LineTemperature *pLineTemp;
CircleTemperature *pCircleTemp;
InitApp()函数中更改部分:
acedRegCmds- >addCommand("TEMPERATURE_APP",
"MODIFY", "MODIFY",
ACRX_CMD_TRANSPARENT, printEnergy);
更改程序中别的函数中的相应的部分。
注意printEnergy()函数中selectEntity()
函数的第二个参数必须是AcDb::kForWrite;
---- 编译后在AutoCAD(如R14)中测试运行,敲入modify后随便选取直线或圆,您就会能
体会到超级编辑命令的方便之处。或许您会认为此命令没有什么特别之处,但若您仔细
研究lab10子目录中的内容,定义自己的实体如门、窗或机械特征,特别是您自己才会用
到的特殊对象,给对象增加此命令,您就会体会到ARX编程的魅力了。
*****************************************************
Delphi应用程序中中国式报表的制作
中国空间技术研究院物资部 史宝军
在众多可视化数据库开发工具中, Delphi以其真正的面向对象、高效率、支持多
层结构应用开发、支持多层B/S结构开发等优良特性脱颖而出,成为广大编程人员的
首选开发工具。
在数据库应用程序开发中,系统设计员、程序设计员需要考虑的一个重要问题是
如何设计和输出报表,在Delphi中我们可以采用多种方案来解决这一问题,如运用OLE
自动化技术将数据输出到MS-WORD、MS-EXCEL中等,但其中最直接、最本地化的还是
使用Delphi3.0/40中的QuickReport报表组件,它是挪威QuSoft公司专门为Delphi 编
写的,使用QuickReport可以迅速设计出符合西方人习惯的报表。
然而,在设计中国式报表时,笔者发现在QuickReport中设计列与列之间的竖线和斜线
比较困难;虽然QuickReport提供了TQShape控件,使用该控件可以画出列与列之间的竖
线,但如果用户不能正确调整TQShape实例的高度,输出报表中的竖线不是不连续就是
超长,另外如果我们调整了某个Band的高度,我们将不得不调整该Band下的所有TQShape
实例的高度;至于斜线,QuickReport报表组件根本就没有提供这一功能。
笔者认真查找了有关资料,成功地解决以上问题,并愿意将解决方法与大家共享,希
望能对大家有所帮助。
1、 解决思路
以TQShape为父类,建立新的控件,新控件可以画竖线、斜线和反斜线。
重载TQShape 类的Paint方法,这样在设计阶段可以非常直观地画斜线、反斜线和竖线,
用户可以在设计阶段选择线的类型,如果选择直线,控件自动将其高度调整为所属Band
的高度,用户可以调整其横向位置但不能调整其高度;如果选择斜线,用户可以根据需
要调整斜线的长度和倾角。
重载TQShape 类的Print方法,这样可以在运行阶段输出直线和斜线。
说明:该控件只能画直线和斜线,如果读者需要画矩形和园,可以使用TQShape控
件来实现。
2、控件设计步骤
步骤1、使用Delphi提供的控件向导,选择TQShape为父类,建立新类TMyQRShape,并
选择适当的包(Package),最后生成单元文件。
步骤2、在生成的单元文件中,增加枚举类型,
TLines = ( None,TopBottom,BottomTop ) ;
None、TopBottom、BottomTop三种取值,分别代表直线、斜线 \ 和反斜线 / 。
步骤3、在新类TMyQRShape 中增加private 成员 FLineType:TLines ,增加published
属性 LineType:TLines Read FLineType Write SetFLineType 。
步骤4、建立过程SetFLineType 。
procedure TMyQRShape.SetFLineType(Value:TLines);
begin
if Value<>FLineType then
begin
FLineType:=Value ;
Invalidate ;
end ;
end ;
步骤5、重载Paint方法
procedure TMyQRShape.Paint ;
begin
case LineType of
BottomTop:
begin
Canvas.MoveTo(0,Height) ;
Canvas.LineTo(width,0 ) ;
end ;
TopBottom:
begin
Canvas.MoveTo(0,0) ;
Canvas.LineTo(width,Height ) ;
end ;
None:
begin
Height := Parent.Height ;
Top:=0 ;
Width:=4 ;
Shape:=qrsVertLine ;
Inherited Paint ;
end ;
end ;
end ;
步骤6、重载Print方法
procedure TMyQRShape.Print(OfsX,OfsY : Integer);
begin
with QRPrinter do
begin
case LineType of
BottomTop:
begin
Canvas.MoveTo(XPos(OfsX + Size.Left), YPos(OfsY + Size.Top)+Height) ;
Canvas.LineTo(XPos(OfsX + Size.Left)+width,YPos(OfsY + Size.Top) ) ;
end ;
TopBottom:
begin
Canvas.MoveTo(XPos(OfsX + Size.Left), YPos(OfsY + Size.Top)) ;
Canvas.LineTo(XPos(OfsX + Size.Left)+Width,YPos(OfsY + Size.Top)+Height ) ;
end ;
None:
Inherited Print(OfsX,OfsY ) ;
end ;
end ;
end;
步骤7、保存并安装TMyQRShape控件。
本控件在Delphi40下调试、安装,并成功应用于某数据库管理系统的开发。该控件
的完整代码如下。
源程序:
unit MyQRShape;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
QuickRpt, Qrctrls;
type
TLines = ( None,TopBottom,BottomTop ) ;
TMyQRShape = class(TQRShape)
private
FLineType:TLines ;
procedure SetFLineType(Value:TLines) ;
protected
procedure Print(OfsX, OfsY : integer); override;
procedure Paint ;Override ;
public
published
property LineType:TLines Read FLineType Write SetFLineType ;
end;
procedure Register;
implementation
procedure TMyQRShape.SetFLineType(Value:TLines);
begin
if Value<>FLineType then
begin
FLineType:=Value ;
Invalidate ;
end ;
end ;
procedure TMyQRShape.Paint ;
begin
case LineType of
BottomTop:
begin
Canvas.MoveTo(0,Height) ;
Canvas.LineTo(width,0 ) ;
end ;
TopBottom:
begin
Canvas.MoveTo(0,0) ;
Canvas.LineTo(width,Height ) ;
end ;
None:
begin
Height := Parent.Height ;
Top:=0 ;
Width:=4 ;
Shape:=qrsVertLine ;
Inherited Paint ;
end ;
end ;
end ;
procedure TMyQRShape.Print(OfsX,OfsY : Integer);
begin
with QRPrinter do
begin
case LineType of
BottomTop:
begin
Canvas.MoveTo(XPos(OfsX + Size.Left), YPos(OfsY + Size.Top)+Height) ;
Canvas.LineTo(XPos(OfsX + Size.Left)+width,YPos(OfsY + Size.Top) ) ;
end ;
TopBottom:
begin
Canvas.MoveTo(XPos(OfsX + Size.Left), YPos(OfsY + Size.Top)) ;
Canvas.LineTo(XPos(OfsX + Size.Left)+Width,YPos(OfsY + Size.Top)+Height ) ;
end ;
None:
Inherited Print(OfsX,OfsY ) ;
end ;
end ;
end;
procedure Register;
begin
RegisterComponents('QReport', [TMyQRShape]);
end;
*****************************************************
*****************************************************
<疑难杂症>
002.我想请教一个问题,既然VB可以实现在桌面上创建快捷方式,
那我怎样实现在桌面上调用我的快捷方式呢?这个问题一直困扰着我,希望能给我以解答
本人不胜感激!!
回答请mail: adidase@163.net
003.先在“文本框”中输入数据,点击“OK”,即可直接为记录集添加数据,但又不更
新数据库。而不是先点击“添加”,“文本框”输入数据,在点击“OK”。请问如何实
现?请赐教!谢谢!
回答请e-mail: zonzy@163.net
004.小妹是DELPHI刚入门,现在想用它做毕业设计,我的合做者是用DOS下的BC编的程序,
我的任务是编一个用户界面,输入一组数据给它,它处理后返还给我一组数据,我再用
图形的形式显示在界面上。各位高手请帮帮忙我快急坏了,先谢过!
回答请mailto: happy_email@163.net
如果您在编程的时候有什么疑难问题,就请把问题发往yaozheng@kali.com.cn 主题为“提问”,
我会把问题放在杂志上的,希望编程高手们能不吝赐教,也希望这个栏目能成为大家交流的场所。
*****************************************************
*****************************************************
<本周主页更新>
本人学校考试结束了,以后有更多的时间待在家里,本站
现在1到2天更新一次,欢迎光临。
本周主页更新:
【下载专区】
5月30日更新 编程工具加入Borland C++3.1和Qbasic 4.5下载
5月29日更新 编程工具加入Turbo Basic 2.0
5月28日更新 程序源代码加入Heretic & Hexen 源代码
5月27日更新 程序源代码加入桌面趣味软件“屏幕小精灵”源代码。
【酷站推荐】
5月26日更新 本站新开辟的栏目,为您把关于编程的网站一网打尽,
目前尚在不断加入中。
主页地址:http://person.zj.cninfo.net/~yao (169、163均可访问)
*****************************************************
*****************************************************
<编者的话>
本刊已加入【CHINA-EZL】中国电子杂志联盟
联盟主页地址 http://china-ezl.yeah.net
如果您觉得这份刊物还不错的话,欢迎把它介绍给您的朋友.
不知道您看了这期刊物有什么想法或者是意见,欢迎向我提出来.
本人感激不尽,我的联系方法如下:
E-mail:yaozheng@kali.com.cn
本刊主页: http://yaozheng.soim.com
http://person.zj.cninfo.net/~yao
<<编程技术>>订阅方法:
请到本刊主页进行订退工作 http://person.zj.cninfo.net/~yao
投稿:向yaozheng@kali.com.cn发封邮件 主题:投稿
提问:向yaozheng@kali.com.cn发封邮件 主题:提问
**********************THE END************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -