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函数


  • 相关阅读:
    Redis的各种用途以及使用场景【转】
    Cron表达式
    容器绑固定物理核
    【转】Kubernetes和Docker到底有啥关系?
    memtier_benchmark安装
    压测工具
    Linux下traceroute的安装和使用
    计算机科学自学指南
    配置服务器SSH PAM防止暴力破解
    How to Enable or Disable Check for Windows Updates/Check For Updates Greyed Out
  • 原文地址:https://www.cnblogs.com/jupt/p/3922935.html
Copyright © 2011-2022 走看看