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

📄 iwdnprinterimpl.pas

📁 用delphi+intraweb写的简单报表系统(activeform使用技术)
💻 PAS
字号:
UNIT IWDNPrinterImpl;

{$WARN SYMBOL_PLATFORM OFF}

INTERFACE

USES
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ActiveX, AxCtrls, IWDNPrinterProj_TLB, StdVcl, cxClasses, cxGraphics,
  Menus, cxLookAndFeelPainters, cxCustomData, cxStyles, DB, ADODB, cxExportPivotGridLink,
  cxControls, cxCustomPivotGrid, cxDBPivotGrid, StdCtrls, cxButtons,
  ExtCtrls;

TYPE
  TIWDNPrinter=CLASS(TActiveForm, IIWDNPrinter)
    pnl1:TPanel;
    btnExport:TcxButton;
    dsRep:TDataSource;
    qryRep:TADOQuery;
    dlgSave:TSaveDialog;
    PGrid:TcxDBPivotGrid;
    PROCEDURE btnExportClick(Sender:TObject);
  PRIVATE
    { Private declarations }
    FEvents:IIWDNPrinterEvents;
    PROCEDURE ActivateEvent(Sender:TObject);
    PROCEDURE ClickEvent(Sender:TObject);
    PROCEDURE CreateEvent(Sender:TObject);
    PROCEDURE DblClickEvent(Sender:TObject);
    PROCEDURE DeactivateEvent(Sender:TObject);
    PROCEDURE DestroyEvent(Sender:TObject);
    PROCEDURE KeyPressEvent(Sender:TObject; VAR Key:Char);
    PROCEDURE PaintEvent(Sender:TObject);
  PROTECTED
    { Protected declarations }
    PROCEDURE DefinePropertyPages(DefinePropertyPage:TDefinePropertyPage); OVERRIDE;
    PROCEDURE EventSinkChanged(CONST EventSink:IUnknown); OVERRIDE;
    FUNCTION Get_Active:WordBool; SAFECALL;
    FUNCTION Get_AlignDisabled:WordBool; SAFECALL;
    FUNCTION Get_AutoScroll:WordBool; SAFECALL;
    FUNCTION Get_AutoSize:WordBool; SAFECALL;
    FUNCTION Get_AxBorderStyle:TxActiveFormBorderStyle; SAFECALL;
    FUNCTION Get_Caption:WideString; SAFECALL;
    FUNCTION Get_Color:OLE_COLOR; SAFECALL;
    FUNCTION Get_DoubleBuffered:WordBool; SAFECALL;
    FUNCTION Get_DropTarget:WordBool; SAFECALL;
    FUNCTION Get_Enabled:WordBool; SAFECALL;
    FUNCTION Get_Font:IFontDisp; SAFECALL;
    FUNCTION Get_HelpFile:WideString; SAFECALL;
    FUNCTION Get_KeyPreview:WordBool; SAFECALL;
    FUNCTION Get_PixelsPerInch:Integer; SAFECALL;
    FUNCTION Get_PrintScale:TxPrintScale; SAFECALL;
    FUNCTION Get_Scaled:WordBool; SAFECALL;
    FUNCTION Get_ScreenSnap:WordBool; SAFECALL;
    FUNCTION Get_SnapBuffer:Integer; SAFECALL;
    FUNCTION Get_Visible:WordBool; SAFECALL;
    FUNCTION Get_VisibleDockClientCount:Integer; SAFECALL;
    PROCEDURE _Set_Font(VAR Value:IFontDisp); SAFECALL;
    PROCEDURE AboutBox; SAFECALL;
    PROCEDURE Set_AutoScroll(Value:WordBool); SAFECALL;
    PROCEDURE Set_AutoSize(Value:WordBool); SAFECALL;
    PROCEDURE Set_AxBorderStyle(Value:TxActiveFormBorderStyle); SAFECALL;
    PROCEDURE Set_Caption(CONST Value:WideString); SAFECALL;
    PROCEDURE Set_Color(Value:OLE_COLOR); SAFECALL;
    PROCEDURE Set_DoubleBuffered(Value:WordBool); SAFECALL;
    PROCEDURE Set_DropTarget(Value:WordBool); SAFECALL;
    PROCEDURE Set_Enabled(Value:WordBool); SAFECALL;
    PROCEDURE Set_Font(CONST Value:IFontDisp); SAFECALL;
    PROCEDURE Set_HelpFile(CONST Value:WideString); SAFECALL;
    PROCEDURE Set_KeyPreview(Value:WordBool); SAFECALL;
    PROCEDURE Set_PixelsPerInch(Value:Integer); SAFECALL;
    PROCEDURE Set_PrintScale(Value:TxPrintScale); SAFECALL;
    PROCEDURE Set_Scaled(Value:WordBool); SAFECALL;
    PROCEDURE Set_ScreenSnap(Value:WordBool); SAFECALL;
    PROCEDURE Set_SnapBuffer(Value:Integer); SAFECALL;
    PROCEDURE Set_Visible(Value:WordBool); SAFECALL;
    PROCEDURE OpenData(CONST sConn, sSQL, sFields:WideString); SAFECALL;
    PROCEDURE TestData; SAFECALL;
    FUNCTION Get_pone:OleVariant; SAFECALL;
    PROCEDURE Set_pone(Value:OleVariant); SAFECALL;
  PUBLIC
    { Public declarations }
    PROCEDURE Initialize; OVERRIDE;
  END;

IMPLEMENTATION

USES ComObj, ComServ, About, XFuncs, XFunc;

{$R *.DFM}

{ TIWDNPrinter }

PROCEDURE TIWDNPrinter.DefinePropertyPages(DefinePropertyPage:TDefinePropertyPage);
BEGIN
  { Define property pages here.  Property pages are defined by calling
    DefinePropertyPage with the class id of the page.  For example,
      DefinePropertyPage(Class_IWDNPrinterPage); }
END;

PROCEDURE TIWDNPrinter.EventSinkChanged(CONST EventSink:IUnknown);
BEGIN
  FEvents:=EventSink AS IIWDNPrinterEvents;
  INHERITED EventSinkChanged(EventSink);
END;

PROCEDURE TIWDNPrinter.Initialize;
BEGIN
  INHERITED Initialize;
  OnActivate:=ActivateEvent;
  OnClick:=ClickEvent;
  OnCreate:=CreateEvent;
  OnDblClick:=DblClickEvent;
  OnDeactivate:=DeactivateEvent;
  OnDestroy:=DestroyEvent;
  OnKeyPress:=KeyPressEvent;
  OnPaint:=PaintEvent;
END;

FUNCTION TIWDNPrinter.Get_Active:WordBool;
BEGIN
  Result:=Active;
END;

FUNCTION TIWDNPrinter.Get_AlignDisabled:WordBool;
BEGIN
  Result:=AlignDisabled;
END;

FUNCTION TIWDNPrinter.Get_AutoScroll:WordBool;
BEGIN
  Result:=AutoScroll;
END;

FUNCTION TIWDNPrinter.Get_AutoSize:WordBool;
BEGIN
  Result:=AutoSize;
END;

FUNCTION TIWDNPrinter.Get_AxBorderStyle:TxActiveFormBorderStyle;
BEGIN
  Result:=Ord(AxBorderStyle);
END;

FUNCTION TIWDNPrinter.Get_Caption:WideString;
BEGIN
  Result:=WideString(Caption);
END;

FUNCTION TIWDNPrinter.Get_Color:OLE_COLOR;
BEGIN
  Result:=OLE_COLOR(Color);
END;

FUNCTION TIWDNPrinter.Get_DoubleBuffered:WordBool;
BEGIN
  Result:=DoubleBuffered;
END;

FUNCTION TIWDNPrinter.Get_DropTarget:WordBool;
BEGIN
  Result:=DropTarget;
END;

FUNCTION TIWDNPrinter.Get_Enabled:WordBool;
BEGIN
  Result:=Enabled;
END;

FUNCTION TIWDNPrinter.Get_Font:IFontDisp;
BEGIN
  GetOleFont(Font, Result);
END;

FUNCTION TIWDNPrinter.Get_HelpFile:WideString;
BEGIN
  Result:=WideString(HelpFile);
END;

FUNCTION TIWDNPrinter.Get_KeyPreview:WordBool;
BEGIN
  Result:=KeyPreview;
END;

FUNCTION TIWDNPrinter.Get_PixelsPerInch:Integer;
BEGIN
  Result:=PixelsPerInch;
END;

FUNCTION TIWDNPrinter.Get_PrintScale:TxPrintScale;
BEGIN
  Result:=Ord(PrintScale);
END;

FUNCTION TIWDNPrinter.Get_Scaled:WordBool;
BEGIN
  Result:=Scaled;
END;

FUNCTION TIWDNPrinter.Get_ScreenSnap:WordBool;
BEGIN
  Result:=ScreenSnap;
END;

FUNCTION TIWDNPrinter.Get_SnapBuffer:Integer;
BEGIN
  Result:=SnapBuffer;
END;

FUNCTION TIWDNPrinter.Get_Visible:WordBool;
BEGIN
  Result:=Visible;
END;

FUNCTION TIWDNPrinter.Get_VisibleDockClientCount:Integer;
BEGIN
  Result:=VisibleDockClientCount;
END;

PROCEDURE TIWDNPrinter._Set_Font(VAR Value:IFontDisp);
BEGIN
  SetOleFont(Font, Value);
END;

PROCEDURE TIWDNPrinter.AboutBox;
BEGIN
  ShowIWDNPrinterAbout;
END;

PROCEDURE TIWDNPrinter.ActivateEvent(Sender:TObject);
BEGIN
  IF FEvents<>NIL THEN FEvents.OnActivate;
END;

PROCEDURE TIWDNPrinter.ClickEvent(Sender:TObject);
BEGIN
  IF FEvents<>NIL THEN FEvents.OnClick;
END;

PROCEDURE TIWDNPrinter.CreateEvent(Sender:TObject);
BEGIN
  IF FEvents<>NIL THEN FEvents.OnCreate;
END;

PROCEDURE TIWDNPrinter.DblClickEvent(Sender:TObject);
BEGIN
  IF FEvents<>NIL THEN FEvents.OnDblClick;
END;

PROCEDURE TIWDNPrinter.DeactivateEvent(Sender:TObject);
BEGIN
  IF FEvents<>NIL THEN FEvents.OnDeactivate;
END;

PROCEDURE TIWDNPrinter.DestroyEvent(Sender:TObject);
BEGIN
  IF FEvents<>NIL THEN FEvents.OnDestroy;
END;

PROCEDURE TIWDNPrinter.KeyPressEvent(Sender:TObject; VAR Key:Char);
VAR
  TempKey:Smallint;
BEGIN
  TempKey:=Smallint(Key);
  IF FEvents<>NIL THEN FEvents.OnKeyPress(TempKey);
  Key:=Char(TempKey);
END;

PROCEDURE TIWDNPrinter.PaintEvent(Sender:TObject);
BEGIN
  IF FEvents<>NIL THEN FEvents.OnPaint;
END;

PROCEDURE TIWDNPrinter.Set_AutoScroll(Value:WordBool);
BEGIN
  AutoScroll:=Value;
END;

PROCEDURE TIWDNPrinter.Set_AutoSize(Value:WordBool);
BEGIN
  AutoSize:=Value;
END;

PROCEDURE TIWDNPrinter.Set_AxBorderStyle(Value:TxActiveFormBorderStyle);
BEGIN
  AxBorderStyle:=TActiveFormBorderStyle(Value);
END;

PROCEDURE TIWDNPrinter.Set_Caption(CONST Value:WideString);
BEGIN
  Caption:=TCaption(Value);
END;

PROCEDURE TIWDNPrinter.Set_Color(Value:OLE_COLOR);
BEGIN
  Color:=TColor(Value);
END;

PROCEDURE TIWDNPrinter.Set_DoubleBuffered(Value:WordBool);
BEGIN
  DoubleBuffered:=Value;
END;

PROCEDURE TIWDNPrinter.Set_DropTarget(Value:WordBool);
BEGIN
  DropTarget:=Value;
END;

PROCEDURE TIWDNPrinter.Set_Enabled(Value:WordBool);
BEGIN
  Enabled:=Value;
END;

PROCEDURE TIWDNPrinter.Set_Font(CONST Value:IFontDisp);
BEGIN
  SetOleFont(Font, Value);
END;

PROCEDURE TIWDNPrinter.Set_HelpFile(CONST Value:WideString);
BEGIN
  HelpFile:=STRING(Value);
END;

PROCEDURE TIWDNPrinter.Set_KeyPreview(Value:WordBool);
BEGIN
  KeyPreview:=Value;
END;

PROCEDURE TIWDNPrinter.Set_PixelsPerInch(Value:Integer);
BEGIN
  PixelsPerInch:=Value;
END;

PROCEDURE TIWDNPrinter.Set_PrintScale(Value:TxPrintScale);
BEGIN
  PrintScale:=TPrintScale(Value);
END;

PROCEDURE TIWDNPrinter.Set_Scaled(Value:WordBool);
BEGIN
  Scaled:=Value;
END;

PROCEDURE TIWDNPrinter.Set_ScreenSnap(Value:WordBool);
BEGIN
  ScreenSnap:=Value;
END;

PROCEDURE TIWDNPrinter.Set_SnapBuffer(Value:Integer);
BEGIN
  SnapBuffer:=Value;
END;

PROCEDURE TIWDNPrinter.Set_Visible(Value:WordBool);
BEGIN
  Visible:=Value;
END;

PROCEDURE TIWDNPrinter.btnExportClick(Sender:TObject);
BEGIN
  IF dlgSave.Execute THEN
    cxExportPivotGridToExcel(dlgSave.FileName, PGrid);
END;

PROCEDURE TIWDNPrinter.OpenData(CONST sConn, sSQL, sFields:WideString);
VAR RowFields, ColFields, DataFields:STRING;
  RowList, ColList, DataList:TStrings;

  PROCEDURE GetDisplayText(Sender:TcxPivotGridField; ACell:TcxPivotGridDataCellViewInfo; VAR AText:STRING);
  BEGIN
    IF (AText='0')OR(AText='0.00') THEN
      AText:='';
  END;
  //(stCount, stSum, stMin, stMax, stAverage,
  //  stStdDev, stStdDevP, stVariance, stVarianceP, stCustom);

  FUNCTION GetSumTypeByIndex(ASumType:Integer):TcxPivotGridSummaryType;
  BEGIN
    CASE ASumType OF
      0:Result:=stCount;
      1:Result:=stSum;
      2:Result:=stMin;
      3:Result:=stMax;
      4:Result:=stAverage;
    END;
  END;

  PROCEDURE AddAreaFields(AList:TStrings; aKind:TcxPivotGridFieldArea);
  VAR k:Integer;
    sFieldName:STRING;
    AField:TcxPivotGridField;
    sumType:STRING;
  BEGIN
    FOR k:=0 TO AList.Count-1 DO
    BEGIN
      sFieldName:=TrimLeft(TrimRight(AList.Strings[k]));
      debuglog(sFieldName);
      AField:=PGrid.GetFieldByName(sFieldName);
      {IF aKind=faData THEN
      BEGIN
        debuglog('faData start');
        CASE PGrid.DataSource.DataSet.FieldByName(sFieldName).DataType OF
          ftFloat, ftCurrency, ftBCD:AField.DisplayFormat:='0,';
        END;

        //AField.OnGetDisplayText:=GetDisplayText;
        {  sFieldName:=StrToStr('=', sFieldName, 0);
        sumType:=StrToStr('=', sFieldName, 1);
        IF (sumType='')OR(sumType='-1') THEN
          sumType:='1';                 //sum
        debuglog(sFieldName+'        '+sumType);

        AField.Area:=aKind;
        //AField.SummaryType:=stSum; //GetSumTypeByIndex(StrToIntDef(sumType, 1));  
      END;   
      IF aKind=faRow THEN
      BEGIN
        AField.CollapseAll;
      END;             }
    END;
  END;

BEGIN
  RowFields:=StrToStr('%', sFields, 0);
  ColFields:=StrToStr('%', sFields, 1);
  DataFields:=StrToStr('%', sFields, 2);
  RowList:=TStringList.Create;
  ColList:=TStringList.Create;
  DataList:=TStringList.Create;
  TRY
    StrToStrs(',', RowFields, RowList);
    StrToStrs(',', ColFields, ColList);
    StrToStrs(',', DataFields, DataList);
    {debuglog(RowList.Text);
    debuglog(ColList.Text);
    debuglog(DataList.Text);}
    TRY
      qryRep.Close;
      qryRep.ConnectionString:=sConn;
      qryRep.SQL.Text:=sSQL;
      qryRep.Open;
      debuglog(sSQL);
      debuglog('data open complete.')
    EXCEPT
      debuglog('data open error.')
    END;
    PGrid.CreateAllFields;
    AddAreaFields(RowList, faRow);
    AddAreaFields(ColList, faColumn);
    AddAreaFields(DataList, faData);
  FINALLY
    DataList.Free;
    ColList.Free;
    RowList.Free;
  END;
END;

PROCEDURE TIWDNPrinter.TestData;
BEGIN
  TRY
    qryRep.Close;
    qryRep.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\HappyReport\reports\NWind_chs.mdb';
    qryRep.SQL.Text:='SELECT 产品.* FROM 产品';
    qryRep.Open;
    PGrid.CreateAllFields;
    PGrid.DataController.CollapseDetails;
  EXCEPT

  END;
END;

FUNCTION TIWDNPrinter.Get_pone:OleVariant;
BEGIN

END;

PROCEDURE TIWDNPrinter.Set_pone(Value:OleVariant);
VAR Parama:STRING;
  S1, S2, S3:STRING;
BEGIN
  Parama:=STRING(Value);
  Parama:=Crypt(Parama, 8945669);

  S1:=FilterStr(StrToStr('|', Parama, 0)); //连接字串
  S2:=FilterStr(StrToStr('|', Parama, 1)); //sql
  S3:=FilterStr(StrToStr('|', Parama, 2)); //交叉表三个区域的字段
  {
  debuglog(S1);
  debuglog(S2);
  debuglog(S3);
   }
  OpenData(S1, S2, S3);
END;

INITIALIZATION
  TActiveFormFactory.Create(
    ComServer,
    TActiveFormControl,
    TIWDNPrinter,
    Class_IWDNPrinter,
    1,
    '',
    OLEMISC_SIMPLEFRAME OR OLEMISC_ACTSLIKELABEL,
    tmApartment);
END.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -