报表处理组件BYDELPHI
5104 点击·0 回帖
![]() | ![]() | |
![]() | 本人倾精力,时间使用delphi开发了一套报表处理组件,适合各种软件系统复杂的 报表处理功能,尤其是其提供的报表编辑,打印预览及数据导入接口等功能可以迅 速满足客户提出的有关报表处理的各种需求。 1.设计原则: 1.1 由抽象到具体的类层次管理简化报表处理对象的复杂性。 1.2 报表编辑、原始数据导入到打印预览一体化处理流程。 1.3 灵活的数据访问接口,程序代码与报表设计无关。 2.主要功能: 2.1 类EXCEL的设计界面,提供多种可编辑对象,包括普通文本、公式计算、数据 导入等不同属性单元格,以及图形、图像、图表、文本框、数据视图、定制表 格等对象。 2.2 客户可以自由设计定制报告单格式,如普通式、彩色印刷式、图表一体式等。 2.3 美观的报表预览器,多种打印输出格式。 3.应用对象: 3.1 电网监控系统报表处理分系统(各种运行日报,月报,年报等)。 3.2 医院管理信息系统(各种统计分析报表)。 3.3 酒店管理信息系统(各种查询统计报表)。 3.4 检验管理系统(各种格式报告单)。 4.申明: 本人对本套组件拥有全部自主版权。 5.类树: { Forward declarations } TGridCoordinate = class; TGridCoordinates = class; TCustomObject = class; {Abstract Class} {1} TActiveObject = class; TActiveObjectClass = class of TActiveObject; TGridCellObject = class; TGridCellGroup = class; //TDataViewParams = class TDataView = class; TDataTable = class; TTileDataView = class; TCascadeBand = class; TCascadeBands = class; TCascadeDataView = class; TPlate = class; TPlateClass = class of TPlate; TChartPlate = class; TImagePlate = class; TTextPlate = class; TActiveObjects = class; TSelectedObjects = class; {2} TSparsePointerArray = class; TSparseList = class; TGridCellText = class; TGridCellFrame = class; TGridCell = class; TGridCellClass = class of TGridCell; TTextCell = class; TDBCell = class; TFormulaCell = class; TRowCells = class; TGridCells = class; TGridCellEdit = class; TSelectedCoord = class; TSelectedCoords = class; TTitleWindow = class; TColumnWindow = class; TRowWindow = class; TClientWindow = class; TTool = class; {TSpreadsheetTool = class;} TCoolScrollBar = class; TCoolScrollControl = class; TReportGrid = class; 欢迎公司或个人与我联系。 也希望各位同仁多多指教。 Email:lmis@sina.com。 6.附: 一个可以书写任意文本的Procedure,包括旋转字体。 TTextAlign = (taLeft,taRight,taHorzCenter, taTop,taBottom,taVertCenter); TTextAligns = set of TTextAlign; TTextControl = (tcNormal,tcwordBreak,tcSelfAdapt,tcCalcRect); TTextDirection = tdVertChinese..90;{Angles of text} procedure WriteText(ACanvas: TCanvas;var ARect: TRect;AText: string; Aligns: TTextAligns; Control: TTextControl;Direction: TTextDirection{; BeErase: Boolean = TRUE}); var S: String; TempStr: WideString; ColorRef: TColorRef; DitheredFlag: Boolean; LogicFont: TLogFont; Scaler: Extended; I,J,X,Y: Integer; Interval,MaxExtent:Integer; TextMetric: TTextMetric; TempExtent: TSize; TempRect: TRect; procedure SetLogicFont(W: Integer = 0;H: Integer = 0); begin with LogicFont,ACanvas.Font do begin if H = 0 then lfHeight := Height else lfHeight := H; lfWidth := W; lfEscapement := 10*Direction; lfOrientation := 10*Direction; lfWeight := FW_NORMAL;//FW_BOLD; lfItalic := BYTE(fsItalic in Style); lfUnderline := BYTE(fsUnderline in Style); lfStrikeOut := BYTE(fsStrikeOut in Style); lfCharSet := Charset; lfOutPrecision := OUT_TT_PRECIS; lfClipPrecision := CLIP_DEFAULT_PRECIS; lfQuality := DEFAULT_QUALITY; lfPitchAndFamily := DEFAULT_PITCH or FF_DONTCARE; StrCopy(lfFaceName,PChar(Name)); end; ACanvas.Font.Handle := Windows.CreateFontIndirect(LogicFont); end; procedure DrawDitheredText(BeginX,BeginY: Integer; TheText: String); begin DrawBitmap.Canvas.Lock; {Must have it !!} try with DrawBitmap do begin //Windows.ExtTextOut(Handle,0,0,ETO_OPAQUE,@TempRect, Nil,0,Nil); Windows.ExtTextOut(Canvas.Handle, BeginX - ARect.Left , BeginY - ARect.Top, {ETO_OPAQUE or }ETO_CLIPPED, @TempRect, PChar(TheText), Length(TheText),Nil); ACanvas.CopyRect(ARect,Canvas,TempRect); end; finally DrawBitmap.Canvas.Unlock; end; end; begin {if BeErase then if ACanvas.Brush.Style <> bsSolid then begin ACanvas.Pen.Style := psClear; ACanvas.Rectangle(ARect); ACanvas.Pen.Style := psSolid; end else ACanvas.FillRect(ARect); //Windows.ExtTextOut(ACanvas.Handle,0,0,ETO_OPAQUE,@ARect, Nil,0,Nil); } if AText = then Exit; ColorRef := ColorToRGB(ACanvas.Brush.Color); DitheredFlag := //(ACanvas = Printer.Canvas) or (Windows.GetNearestColor(ACanvas.Handle, ColorRef) <> ColorRef); if DitheredFlag then begin with DrawBitmap,ARect do { Use offscreen bitmap to eliminate flicker and } begin { brush origin tics in painting / scrolling. } Width := Max(Width, Right - Left); Height := Max(Height, Bottom - Top); Canvas.Font := ACanvas.Font; Canvas.Brush := ACanvas.Brush; Canvas.Brush.Style := bsSolid; TempRect := Rect(0, 0, Right - Left, Bottom - Top); Windows.ExtTextOut(Canvas.Handle,0,0,{ETO_OPAQUE or }ETO_CLIPPED,@TempRect, Nil,0,Nil) end; end; {Prepare parameters for below process} case Direction of tdVertChinese: begin {More special,use the equivalent width font} ACanvas.Font.Pitch := fpFixed; Scaler := 1; MaxExtent := ARect.Bottom - ARect.Top ; end; 0:{Horizontal} begin Scaler := 1; MaxExtent := ARect.Right - ARect.Left ; end; 1..45: begin SetLogicFont; ; | |
![]() | ![]() |