沿用上一篇Demo
环境:DelphiXE,XP,SQL2005
贴出改动过的单元代码:
dbGrid控件版:
unit SubMain_Unit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, FyDataConn_Unit, ActiveX, ADODB, StdCtrls, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters, cxStyles, dxSkinsCore, dxSkinBlueprint, dxSkinDevExpressDarkStyle, dxSkinDevExpressStyle, dxSkinHighContrast, dxSkinSevenClassic, dxSkinSharpPlus, dxSkinStardust, dxSkinTheAsphaltWorld, dxSkinVS2010, dxSkinWhiteprint, dxSkinscxPCPainter, cxCustomData, cxFilter, cxData, cxDataStorage, cxEdit, cxNavigator, cxDBData, cxGridLevel, cxClasses, cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid, Grids, DBGrids; //原采用cxgrid,因动态获取全部列出错,暂时未解决,采用IDE自带的dbgrid type TFrm_SubMain = class(TForm) Btn_1: TButton; Grd_2: TDBGrid; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); procedure Btn_1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private DSet: TADODataSet; DS: TDataSource; Conn: TADOConnection; { Private declarations } public { Public declarations } end; procedure CreateFrm(AppHnd: THandle);export;stdcall; procedure DropFrm; export;stdcall; var Frm_SubMain: TFrm_SubMain; implementation {$R *.dfm} procedure CreateFrm(AppHnd: THandle); begin Application.Handle := AppHnd; if not Assigned(Frm_SubMain) then Frm_SubMain := TFrm_SubMain.Create(Application); Frm_SubMain.Show; end; procedure DropFrm; begin if Frm_SubMain <> nil then FreeAndNil(Frm_SubMain); end; procedure TFrm_SubMain.Btn_1Click(Sender: TObject); var SQL: String; begin DSet.Connection := Conn; DS.DataSet := DSet; SQL := 'Select * From Cg_CgDanSub'; dbOpen(SQL,DSet); //自定义函数,用于打开数据集 Grd_2.DataSource := DS; end; procedure TFrm_SubMain.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; procedure TFrm_SubMain.FormCreate(Sender: TObject); begin Conn := TADOConnection.Create(Application); Conn.LoginPrompt := False; Conn.ConnectionString := 'Provider=SQLOLEDB.1;Password=***;Persist Security Info=True;User ID=sa;Initial Catalog=test;Data Source=127.0.0.1'; Conn.Connected := True; DSet := TADODataSet.Create(Application); DS := TDataSource.Create(Application); end; procedure TFrm_SubMain.FormDestroy(Sender: TObject); begin DSet.Free; DS.Free; FreeAndNil(Conn); Frm_SubMain := nil; end; end.
cxGrid控件版:
unit SubMain_Unit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, FyDataConn_Unit, ActiveX, ADODB, StdCtrls, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters, cxStyles, dxSkinsCore, dxSkinBlueprint, dxSkinDevExpressDarkStyle, dxSkinDevExpressStyle, dxSkinHighContrast, dxSkinSevenClassic, dxSkinSharpPlus, dxSkinStardust, dxSkinTheAsphaltWorld, dxSkinVS2010, dxSkinWhiteprint, dxSkinscxPCPainter, cxCustomData, cxFilter, cxData, cxDataStorage, cxEdit, cxNavigator, cxDBData, cxGridLevel, cxClasses, cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid, Grids, DBGrids,dxCore; //这边引用了一个dxCore,替换原来的dxGDIPlusAPI单元,新版本DevExpress原Com里面的配置函数转移到dxCore单元中 type TFrm_SubMain = class(TForm) Btn_1: TButton; GTV_1: TcxGridDBTableView; GL_1: TcxGridLevel; Grd_1: TcxGrid; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); procedure Btn_1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private DSet: TADODataSet; DS: TDataSource; Conn: TADOConnection; { Private declarations } public { Public declarations } end; procedure CreateFrm(AppHnd: THandle);export;stdcall; procedure DropFrm; export;stdcall; var Frm_SubMain: TFrm_SubMain; implementation {$R *.dfm} procedure CreateFrm(AppHnd: THandle); begin Application.Handle := AppHnd; if not Assigned(Frm_SubMain) then Frm_SubMain := TFrm_SubMain.Create(Application); Frm_SubMain.Show; end; procedure DropFrm; begin if Frm_SubMain <> nil then FreeAndNil(Frm_SubMain); end; procedure TFrm_SubMain.Btn_1Click(Sender: TObject); var SQL: String; begin DSet.Connection := Conn; DS.DataSet := DSet; SQL := 'Select * From Cg_CgDanSub'; dbOpen(SQL,DSet); //自定义函数,用于打开数据集 GTV_1.DataController.DataSource := DS; (GTV_1.DataController as IcxCustomGridDataController).DeleteAllItems; //清除cxGrid列 (GTV_1.DataController as IcxCustomGridDataController).CreateAllItems(False); //添加cxGrid列,该句必须再单元后面做初始化动作 end; procedure TFrm_SubMain.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; procedure TFrm_SubMain.FormCreate(Sender: TObject); begin Conn := TADOConnection.Create(Application); Conn.LoginPrompt := False; Conn.ConnectionString := 'Provider=SQLOLEDB.1;Password=fydesign;Persist Security Info=True;User ID=sa;Initial Catalog=test;Data Source=127.0.0.1'; Conn.Connected := True; DSet := TADODataSet.Create(Application); DS := TDataSource.Create(Application); end; procedure TFrm_SubMain.FormDestroy(Sender: TObject); begin DSet.Free; DS.Free; FreeAndNil(Conn); Frm_SubMain := nil; end; initialization dxInitialize; //应用dxCore单元中的该函数替换老版本DevExpress的dxGDIPlusAPI单元内的dxInitializeGDIPlus函数 finalization dxFinalize; //应用dxCore单元中的该函数替换老版本DevExpress的dxGDIPlusAPI单元内的dxFinalizeGDIPlus函数 end.
关于这段代码,同一个Dll文件中,只要输入一个窗体文件即可,其他窗体均能正常使用
initialization dxInitialize; //应用dxCore单元中的该函数替换老版本DevExpress的dxGDIPlusAPI单元内的dxInitializeGDIPlus函数 finalization dxFinalize; //应用dxCore单元中的该函数替换老版本DevExpress的dxGDIPlusAPI单元内的dxFinalizeGDIPlus函数