zoukankan      html  css  js  c++  java
  • Dll学习二_Dll 窗体中动态创建数据并使用Demo

    沿用上一篇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函数


  • 相关阅读:
    Chrome开发者工具中Elements(元素)断点的用途
    最简单的SAP云平台开发教程
    Java实现 LeetCode 495 提莫攻击
    Java实现 LeetCode 494 目标和
    Java实现 LeetCode 494 目标和
    Java实现 LeetCode 494 目标和
    Java实现 LeetCode 493 翻转对
    Java实现 LeetCode 493 翻转对
    Java实现 LeetCode 493 翻转对
    Java实现 LeetCode 492 构造矩形
  • 原文地址:https://www.cnblogs.com/jupt/p/3922935.html
Copyright © 2011-2022 走看看