⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 9910.txt

📁 关于编程技术技巧的文章
💻 TXT
📖 第 1 页 / 共 3 页
字号:
        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 + -