首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

准备散分:QuickRep1怎么绘制表格

2012-03-26 
准备散分:QuickRep1如何绘制表格如何将数据以表格形式显示出来??并且可以控制表格内的色彩[解决办法]可能

准备散分:QuickRep1如何绘制表格
如何将数据以表格形式显示出来??

并且可以控制表格内的色彩

[解决办法]
可能需要自己画线吧:
程序参考:
unit Qrline;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Quickrpt; 
type
TQRLineStyle=(QRLineH,QRLineV,QRLineC,QRLineCR);
TQRLine = class(TQRPrintable)
private
{ Private declarations }
FPen:TPen;
FLineStyle:TQRLineStyle;
protected
{ Protected declarations }
procedure setPen(value:TPen);
procedure setLineStyle(value:TQRLineStyle);
procedure onPenChanged(Sender:TObject);
public
{ Public declarations }
constructor Create(AOwner:TComponent);override;
destructor Destroy;override;
procedure Paint;override;
procedure Print(OfsX,OfsY:integer);override;
published
{ Published declarations }
property Pen:TPen read FPen write setPen;
property LineStyle:TQRLineStyle read FLineStyle write setLineStyle;
end;

procedure Register;

implementation

constructor TQRLine.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
ControlStyle:=ControlStyle-[csOpaque];
FPen:=Tpen.Create ;
FPen.OnChange:=onPenChanged;
width:=100;
height:=100;
end;

destructor TQRLine.Destroy;
begin
FPen.Free;
inherited Destroy;
end;

procedure TQRLine.setPen(value:TPen);
begin
FPen.Assign(value);
invalidate;
end;

procedure TQRLine.setLineStyle(value:TQRLineStyle);
begin
if FLineStyle<>value then
begin
FLineStyle:=value;
invalidate;
end;
end;

procedure TQRLine.onPenChanged(Sender:TObject);
begin
invalidate;
end;

procedure TQRLine.Paint;
var
 calDiff:integer;
begin
with Canvas do
begin
Pen:=FPen;
calDiff:=Pen.Width div 2;
MoveTo(calDiff,calDiff);
if LineStyle=QRLineCR then begin
MoveTo(calDiff,Height- calDiff);
end;
case LineStyle of
QRLineH:LineTo(width,0+calDiff);
QRLineV:LineTo(calDiff,Height);
QRLineC:LineTo(width,Height);
QRLineCR:LineTo(width,0);
end;
end;
end;

procedure TQRLine.Print(OfsX,OfsY:integer);
var
 CalcLeft,CalcTop,CalcRight,CalcBottom:integer;
begin
with ParentReport.QRPrinter do
begin
Canvas.Pen:=FPen;
CalcLeft:=XPos(OfsX+Size.Left);
CalcTop:=YPos(OfsY+Size.Top);
CalcRight:=XPos(OfsX+Size.Left+Size.Width);
CalcBottom:=YPos(OfsY+Size.Top+Size.Height);
with Canvas do
begin
MoveTo(CalcLeft,CalcTop);
case LineStyle of
QRLineH:LineTo(CalcRight,CalcTop);
QRLineV:LineTo(CalcLeft,CalcBottom);
QRLineC:LineTo(CalcRight,CalcBottom);
end;
end;
end;
end;

procedure Register;
begin
RegisterComponents('Qreport', [TQRLine]);
end;

end.


热点排行