📄 dllform.~pas
字号:
unit DllForm;
interface
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls, Variants,
Forms, DB, ADODB, Dialogs, Global,datamodule,UnitBomRequery;
type
TnxDllForm = class(TObject)
private
//功能模块主form
FForm: TForm;
//系统参数类
FEnv: TEnv;
//数据库连接的datamoudle
FDM: TDM;
//数据库连接的dataset
FObjectDS: TDataSet;
public
// 函数:建立并返回模块主Form
function GetForm: TForm; virtual; stdcall;
// 设置 ObjectDataSet: 主数据集 (由Pub_Objects主表构成)
procedure SetObjectDS(MainDS: TDataSet); virtual; stdcall;
// 设置主应用程序使用的DM
procedure SetDM(ADM: TDM); virtual; stdcall;
// 设置主应用程序使用的Env
procedure SetEnv(AEnv: TEnv); virtual; stdcall;
// 将Form加载到容器上
procedure BringForm(ParentCtrl: TWinControl); virtual; stdcall;
// 函数:触发数据移动事件
procedure TigEvent(ObjectID: Integer); virtual; stdcall;
// 函数:删除当前数据前。返回为是否允许并成功删除
function BeforeDeleteData(ObjectID: Integer): Boolean; virtual; stdcall;
// 函数:删除当前数据后。
procedure AfterDeleteData; virtual; stdcall;
// 函数:编辑当前数据。返回为是否允许编辑
function SetEditState(State: Boolean; ObjectID: Integer): Boolean; virtual; stdcall;
// 函数:增加数据前。返回为是否允许增加
function BeforeAppendData(ObjectID: Integer): Boolean; virtual; stdcall;
// 函数:增加数据后。
procedure AfterAppendData(ObjectID: Integer); virtual; stdcall;
// 函数:打印。如果返回False,说明该模块没有打印功能
function PrintData(ObjectID: Integer): Boolean; virtual; stdcall;
// 设置回调函数
procedure SetCallbackFO(ADoActionHyper: TDoActionHyper); virtual; stdcall;
constructor Create;
destructor Destroy;
end;
implementation
{ TnxDllForm }
function TnxDllForm.GetForm: TForm;
begin
Result := FForm;
end;
procedure TnxDllForm.SetObjectDS(MainDS: TDataSet);
begin
FObjectDS := MainDS;
end;
procedure TnxDllForm.SetDM(ADM: TDM);
begin
// 设置主应用程序使用的DM
FDM := ADM;
DM := ADM;
end;
procedure TnxDllForm.SetEnv(AEnv: TEnv);
begin
// 设置主应用程序使用的Env
Env := AEnv;
end;
procedure TnxDllForm.BringForm(ParentCtrl: TWinControl);
begin
// 将Form加载到容器上
FForm.ParentWindow := ParentCtrl.Handle;
FForm.BorderStyle := bsNone;
FForm.Top := 0;
FForm.Left := 0;
FForm.Height := ParentCtrl.Height;
FForm.Width := ParentCtrl.Width;
FForm.Show;
end;
procedure TnxDllForm.TigEvent(ObjectID: Integer);
var
I:Integer;
ProXinZhi : String;
ProQuyu : String;
TempDQXS : Double;
begin
// 函数:触发数据移动事件
if not Assigned(FForm) then Exit;
with TFormBomRequery(FForm) do
begin
cxDBMaskEditGJCB.Properties.ReadOnly := True;
cxDBMaskEditQTCB.Properties.ReadOnly := True;
cxDBMaskEditXSCB.Properties.ReadOnly := True;
cxDBMaskEditDQCB.Properties.ReadOnly := True;
cxDBMaskEditMBBJ.Properties.ReadOnly := True;
cxDBMaskEditZZS.Properties.ReadOnly := True;
cxMaskEditXiaoJi.Properties.ReadOnly := True;
cxDBMaskEditFJS.Properties.ReadOnly := True;
cxDBMaskEditQTXS.Properties.ReadOnly := True;
cxDBMaskEditXSXS.Properties.ReadOnly := True;
cxDBMaskEditDQXS.Properties.ReadOnly := True;
cxDBMaskEditZZSXS.Properties.ReadOnly := True;
cxDBMaskEditFJSXS.Properties.ReadOnly := True;
Button1.Enabled := False;
ObjID := ObjectID;
with ADOQueryBOM do
begin
if Active then Close;
Connection := env.ADOConnection;
SQl.Text := ' SELECT MaterailClass, MaterailName, MaterailType, SUM(MaterailCount) as MaterailCount, ' +
' SUM(MaterailCostSum) as MaterailCostSum, ' +
' MaterailCost ,Gui_Class FROM View_BomRequery ' +
' where (ObjectID IN (SELECT ObjectID FROM Pub_Objects WHERE ObjectParentID = '+IntToStr(ObjectID) + '))'+
' GROUP BY MaterailClass, MaterailName, MaterailType, MaterailProgID,MaterailCost,Gui_Class ';
Open;
First;
{TempText := 0;
while not Eof do
begin
TempText := TempText + FieldByName('MaterailCostSum').AsFloat;
Next;
end; }
// ADOQueryBOM.First;
end;
with TADOQuery.Create(nil) do
begin
Connection := env.ADOConnection;
SQl.Text := ' SELECT SUM(MaterailCostSum) as MaterailCostSum FROM View_BomRequery ' +
' where (ObjectID IN (SELECT ObjectID FROM Pub_Objects WHERE ObjectParentID = '+IntToStr(ObjectID) + '))';
Open;
First;
TempText := StrToFloat(FormatFloat('0.00',FieldByName('MaterailCostSum').AsFloat));
Free;
end;
with ADOQueryPrice do
begin
if Active then Close;
Connection := env.ADOConnection;
SQl.Text := 'select * from App_Price where ObjectID = ' + IntToStr(ObjID);
Open;
if not FieldByName('NotFirstShow').AsBoolean then
FieldByName('MuBiaoGJ').Value := 0.00;
Edit;
end;
with TADOQuery.Create(nil) do
begin
Connection := env.ADOConnection;
SQL.Text := 'select * from app_projects where proID = ' +
'(select ObjectParentID from Pub_Objects where ObjectID = ' +
IntToStr(ObjID) + ' ) ';
Open;
First;
if not Eof then
begin
ProXinZhi := FieldByName('ProXingzhi').AsString;
ProQuyu := FieldByName('ProArea').AsString;
end
else
begin
ProXinZhi := '';
ProQuyu := '';
end;
Free;
end;
With TADOQuery.Create(nil) do
begin
Connection := env.ADOConnection;
SQL.Text := 'select * from app_baseCode ' +
' where COwner in (''其他成本'',''销售员'',''地区费用'')' +
' order by CID';
Open;
First;
while not Eof do
begin
if not ADOQueryPrice.FieldByName('NotFirstShow').AsBoolean then
begin
if not (ADOQueryPrice.State in [dsEdit,dsInsert]) then ADOQueryPrice.Edit;
if FieldByName('COwner').AsString = '其他成本' then
ADOQueryPrice.FieldByName('MuBiaoQTXS').Value := FieldByName('CDescript').Value ;
if FieldByName('COwner').AsString = '销售员' then
ADOQueryPrice.FieldByName('MuBiaoXSYXS').Value := FieldByName('CDescript').Value ;
if FieldByName('COwner').AsString = '地区费用' then
begin
if ProXinZhi = '电力局用户站' then
begin
TempDQXS := FieldByName('CDescript').Value;
with TADOQuery.Create(nil) do
begin
Connection := env.ADOConnection;
SQL.Text := 'select * from app_BaseCode where CName = ''地区费用'' and ' +
'COwner = ''' + ProQuyu + '''' ;
Open;
First;
if not Eof then
ADOQueryPrice.FieldByName('MuBiaoDQXS').Value := FieldByName('CDescript').Value
else
ADOQueryPrice.FieldByName('MuBiaoDQXS').Value := TempDQXS;
Free;
end;
end
else
ADOQueryPrice.FieldByName('MuBiaoDQXS').Value := 0.00;
end;
end;
Next;
end;
//if not (ADOQueryPrice.State in [dsEdit,dsInsert]) then ADOQueryPrice.Edit;
ADOQueryPrice.FieldByName('NotFirstShow').Value := 1;
ADOQueryPrice.Post;
Free;
end;
with TADOQuery.Create(nil) do
begin
Connection := Env.ADOConnection;
SQL.Text := 'SELECT Count(*) as CountRcd FROM App_MaterailPrice ' +
' WHERE (ISNULL(MaterailCost, 0) = 0) AND (ObjectID IN '+
' (SELECT ObjectID FROM pub_Objects '+
' WHERE ObjectParentID = '+ IntToStr(ObjectID) +
' AND Isnull(ObjectdeleteFlag, 0) = 0))';
Open;
IF FieldByName('CountRcd').AsInteger > 0 then
ButtonRefresh.Enabled := True
Else
ButtonRefresh.Enabled := False;
Free;
end;
end;
end;
function TnxDllForm.BeforeDeleteData(ObjectID: Integer): Boolean;
begin
// 函数:删除当前数据前。返回为是否允许并成功删除
end;
procedure TnxDllForm.AfterDeleteData;
begin
// 函数:删除当前数据后。
end;
function TnxDllForm.SetEditState(State: Boolean; ObjectID: Integer): Boolean;
begin
// 函数:编辑当前数据。返回为是否允许编辑
Result := False;
end;
function TnxDllForm.BeforeAppendData(ObjectID: Integer): Boolean;
begin
// 函数:增加数据前。返回为是否允许增加
showmessage('无法新增');
Result := False;
end;
procedure TnxDllForm.AfterAppendData(ObjectID: Integer);
begin
// 函数:增加数据后。
end;
function TnxDllForm.PrintData(ObjectID: Integer): Boolean;
begin
// 函数:打印。如果返回False,说明该模块没有打印功能
end;
procedure TnxDllForm.SetCallbackFO(ADoActionHyper: TDoActionHyper);
begin
// 设置回调函数
if not Assigned(FForm) then Exit;
// TTestForm(FForm).ADoActionHyper := ADoActionHyper;
end;
constructor TnxDllForm.Create;
begin
FEnv := nil;
FDM := nil;
FormBomRequery := TFormBomRequery.Create(Application);
FForm := FormBomRequery;
end;
destructor TnxDllForm.Destroy;
begin
if Assigned(FForm) then FForm.Free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -