unit U_ModulePromptList;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, ToolWin, cxStyles, cxCustomData,
  cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, ADODB,
  cxGridCustomPopupMenu, cxGridPopupMenu, cxGridLevel, cxClasses,
  cxControls, cxGridCustomView, cxGridCustomTableView, cxGridTableView,
  cxGridDBTableView, cxGrid, DBClient, cxCalendar, cxButtonEdit, cxSplitter,
  RM_Common, RM_Class, RM_e_Xls, RM_Dataset, RM_System, RM_GridReport,
  cxTextEdit, cxPC;

type
  TfrmModulePromptList = class(TForm)
    ToolBar1: TToolBar;
    TBRafresh: TToolButton;
    TBClose: TToolButton;
    Panel1: TPanel;
    cxGridPopupMenu1: TcxGridPopupMenu;
    ADOQueryCmd: TADOQuery;
    ADOQueryMain: TADOQuery;
    ADOQueryTemp: TADOQuery;
    DataSource1: TDataSource;
    Order_Main: TClientDataSet;
    cxGridPopupMenu2: TcxGridPopupMenu;
    cxGrid1: TcxGrid;
    Tv1: TcxGridDBTableView;
    v1Column5: TcxGridDBColumn;
    cxGrid1Level1: TcxGridLevel;
    v1Column1: TcxGridDBColumn;
    Panel2: TPanel;
    procedure FormDestroy(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure TBCloseClick(Sender: TObject);
    procedure TBRafreshClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure cxPageControl1Change(Sender: TObject);
    procedure Tv1CellDblClick(Sender: TcxCustomGridTableView;
      ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
      AShift: TShiftState; var AHandled: Boolean);
  private
    fDConString_link1:string;
    procedure InitGrid();
    procedure InitForm();
    procedure InitDllEvt(FromFile:String;FormID:Integer;Para:String;FormType:Integer; Title: String;
                              Def1: String; Def2: String; Def3: String; Def4: String; Def5: String;
                              Def6: String; Def7: String; Def8: String; Def9: String; Def10: string);
    { Private declarations }
  public
    { Public declarations }
    userID,username:string;
  end;

var
  frmModulePromptList: TfrmModulePromptList;

implementation
uses
  U_DataLink,U_Fun;
type
	TMyF = function(
		App: TApplication; //��Ӧ�ó��� (��Delphi����)
		FormH: HWND;       //�������ڵĸ����ھ�� (��PB����)
		FormID: Integer;   //Ҫ����dll�й��ܴ����Id��; ���ֻ��һ�����ܴ��ڣ�FormIDĬ��Ϊ0
		Language: Integer; //0=Delphi; 1=PB
		WinStyle: Integer; //0=�Ӵ���; 1����ͨ���� (PB�ж�Ϊ��ͨ����)
		UID: PChar;        //�û�Id
		UName: PChar;      //�û���
		Para: PChar;
		Title: PChar;
    Defstr1: PChar;
    Defstr2: PChar;
    Defstr3: PChar;
    Defstr4: PChar;
    Defstr5: PChar;
    Defstr6: PChar;
    Defstr7: PChar;
    Defstr8: PChar;
    Defstr9: PChar;
    Defstr10: PChar;
    Datalink: PChar
	): HWND; stdcall;
var
	TP: FARPROC;
	Tf: TMyF;
{$R *.dfm}

procedure TfrmModulePromptList.FormDestroy(Sender: TObject);
begin
  frmModulePromptList:=nil;
end;

procedure TfrmModulePromptList.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action:=caFree;
end;

procedure TfrmModulePromptList.TBCloseClick(Sender: TObject);
begin
  Close;
  WriteCxGrid('�����б�',Tv1,'�ҵĹܼ�');
end;

procedure TfrmModulePromptList.InitGrid();
begin
  try
    ADOQueryMain.DisableControls;
    with ADOQueryMain do
    begin
      Close;
      sql.Clear;
      SQL.Add(' exec P_Chk_Tishi :DName,:DCode');
      Parameters.ParamByName('DName').Value:=Trim(DName);
      Parameters.ParamByName('DCode').Value:=Trim(DCode);
      ExecSQL;
      Open;
    end;
    SCreateCDS20(ADOQueryMain,Order_Main);
    SInitCDSData20(ADOQueryMain,Order_Main);
  finally
    ADOQueryMain.EnableControls;
  end;

end;

procedure TfrmModulePromptList.InitForm();
begin
  fDConString_link1:=Trim(DConString);
  ReadCxGrid('�����б�',Tv1,'�ҵĹܼ�');
  InitGrid();
end;

procedure TfrmModulePromptList.TBRafreshClick(Sender: TObject);
begin
  InitGrid();
end;

procedure TfrmModulePromptList.FormShow(Sender: TObject);
begin
  InitForm();
end;

procedure TfrmModulePromptList.cxPageControl1Change(Sender: TObject);
begin
  InitGrid();
end;

procedure TfrmModulePromptList.InitDllEvt(FromFile:String;FormID:Integer;Para:String;FormType:Integer; Title: String;
                              Def1: String; Def2: String; Def3: String; Def4: String; Def5: String;
                              Def6: String; Def7: String; Def8: String; Def9: String; Def10: string);
var
	Th: HMODULE;
begin
	Th := LoadLibrary(PChar(FromFile));
	if Th > 0 then
	begin
	  TP := GetProcAddress(Th, 'GetDllForm');
	  if TP <> nil then
		  begin
			  Tf := TMyF(Tp);
			  Tf(Application, 0, FormID, 0, FormType, PChar(DCode), PChar(DName), PChar(Para), PChar(Title),
          PChar(Def1), PChar(Def2),PChar(Def3),PChar(Def4),PChar(Def5),
          PChar(Def6),PChar(Def7),PChar(Def8),PChar(Def9),PChar(Def10),
          pchar(fDConString_link1));
		  end;
	end
	else
	begin
		Application.MessageBox(PChar('�򲻿��ļ�' + FromFile + '��'), '����', MB_ICONERROR);
	end;
end;


procedure TfrmModulePromptList.Tv1CellDblClick(
  Sender: TcxCustomGridTableView;
  ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
  AShift: TShiftState; var AHandled: Boolean);
begin
  with ADOQueryTemp do
  begin
    Close;
    sql.Clear;
    sql.Add('select * from SY_ModuleSub where ModuleId='''+Trim(Order_Main.fieldbyname('ModuleId').AsString)+'''');
    sql.Add(' and  ModuleSubId='''+Trim(Order_Main.fieldbyname('ModuleSubId').AsString)+'''');
    Open;
  end;
  IF not ADOQueryTemp.IsEmpty then
  begin
    InitDllEvt(Trim(ADOQueryTemp.FieldByName('formFile').AsString),
             ADOQueryTemp.FieldByName('FormID').AsInteger,
             Trim(ADOQueryTemp.FieldByName('FormPara').AsString),
             ADOQueryTemp.FieldByName('FormType').AsInteger,
             Trim(ADOQueryTemp.FieldByName('Formname').AsString),

             Trim(ADOQueryTemp.FieldByName('FormPara1').AsString),
             Trim(ADOQueryTemp.FieldByName('FormPara2').AsString),
             Trim(ADOQueryTemp.FieldByName('FormPara3').AsString),
             Trim(ADOQueryTemp.FieldByName('FormPara4').AsString),
             Trim(ADOQueryTemp.FieldByName('FormPara5').AsString),

             Trim(ADOQueryTemp.FieldByName('FormPara6').AsString),
             Trim(ADOQueryTemp.FieldByName('FormPara7').AsString),
             Trim(ADOQueryTemp.FieldByName('FormPara8').AsString),
             Trim(ADOQueryTemp.FieldByName('FormPara9').AsString),
             Trim(ADOQueryTemp.FieldByName('FormPara10').AsString),
             );
  end;
end;

end.