📄 iwdnprinterimpl.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 + -