?? untpub.~pas
字號(hào):
_bmpUnitLogoS.Free;
_bmpUnitLogoL.Free;
_icnUnitLogo.Free;
_bmpTimeSoftLogoS.Free;
_bmpTimeSoftLogoL.Free;
_icnTimeSoftLogo.Free;
except
on E:exception do ErrorHandler(E,'PubEnd');
end;
//-- 釋放系統(tǒng)數(shù)據(jù)模塊
Application.ProcessMessages;
AddSysLog('釋放', ' ', ' '); // 日志
end;
// ★★★
//---- 系統(tǒng)配置
// 讀取:
// 系統(tǒng)配置文件到全程變量.
procedure SysCfgRead;
var
iniSys: TIniFile;
slTmp: TStringList;
iC: integer;
begin
try
iniSys := TIniFile.Create(_sAppPath+_sSysCfgFile);
slTmp := TStringList.Create;
try
//-- 1. 系統(tǒng)配置文件到全程變量.
// Database
_sDatabase := iniSys.ReadString('數(shù)據(jù)庫(kù)', '設(shè)備', '');
// _sServerName := iniSys.ReadString('數(shù)據(jù)庫(kù)', '服務(wù)器', '');
_sDBSUserName := iniSys.ReadString('數(shù)據(jù)庫(kù)', '用戶', '');
_sDBSPassword := iniSys.ReadString('數(shù)據(jù)庫(kù)', '口令', '');
// 異常
_bShowSysError := iniSys.ReadBool('系統(tǒng)', '顯示內(nèi)部異常', true);
// 編譯器附加代碼
iniSys.ReadSection('過(guò)程參數(shù)', slTmp);
for iC:=0 to slTmp.Count-1 do
_sSQLParam := _sSQLParam+#13+
iniSys.ReadString('過(guò)程參數(shù)', slTmp[iC], '');
iniSys.ReadSection('變量定義', slTmp);
for iC:=0 to slTmp.Count-1 do
_sSQLVar := _sSQLVar+#13+
iniSys.ReadString('變量定義', slTmp[iC], '');
iniSys.ReadSection('初始化', slTmp);
for iC:=0 to slTmp.Count-1 do
_sSQLStart := _sSQLStart+#13+
iniSys.ReadString('初始化', slTmp[iC], '');
iniSys.ReadSection('報(bào)表結(jié)束', slTmp);
for iC:=0 to slTmp.Count-1 do
_sSQLREnd := _sSQLREnd+#13+
iniSys.ReadString('報(bào)表結(jié)束', slTmp[iC], '');
iniSys.ReadSection('政策結(jié)束', slTmp);
for iC:=0 to slTmp.Count-1 do
_sSQLPEnd := _sSQLPEnd+#13+
iniSys.ReadString('政策結(jié)束', slTmp[iC], '');
except
On E: Exception do ErrorHandler(E, 'SysCfgRead');
end;
finally
iniSys.Free;
slTmp.Free;
end;
end;
// ★★★
//---- 系統(tǒng)注冊(cè)
// 輸入?yún)?shù):
// iType:0:普通用戶;1:管理員
// 返回值:
// 0:注冊(cè)成功;1:失敗
// ★★★
//---- 應(yīng)用程序啟動(dòng)窗口
// 顯示窗口
// 關(guān)閉窗口
// ★★★
//---- 系統(tǒng)日志
// 加入一條日志記錄
// 返回值:
// 0:成功
// 其他:錯(cuò)誤號(hào)
function AddSysLog(const sType, sModule, sContent: string): integer;
begin
end;
// ★★★
//---- 打開 MDI 子窗口
// 輸入?yún)?shù):
// TfrmMDIChild:子窗體類名
// frmMDIChild:子窗體實(shí)例變量
// 必要條件:
// _frmMain 已初始化
procedure OpenMDIChild(TfrmMDIChild: TComponentClass; var frmMDIChild: TForm);
var
iLoop: integer;
begin
//-- 1. 查詢子窗體是否已經(jīng)存在
for iLoop:=_frmMain.MDIChildCount-1 downto 0 do
if _frmMain.MDIChildren[iLoop]=frmMDIChild then
begin
frmMDIChild.Icon.Assign(_icnTimeSoftLogo);
frmMDIChild.Show; // 已經(jīng)存在, 推到前面
exit; // 退出
end;
//-- 2. 不存在則創(chuàng)建
Application.CreateForm(TfrmMDIChild, frmMDIChild);
frmMDIChild.Show;
end;
// ★★★
//---- 聯(lián)機(jī)業(yè)務(wù)幫助
// 輸入?yún)?shù):
// sTaxID: 稅種代碼 char(2) 取全局變量 _sTaxID
// sBaseItemType: 基礎(chǔ)數(shù)據(jù)類別代碼 char(1)
// sBaseItemID: 基礎(chǔ)數(shù)據(jù)指標(biāo)代碼 char(16) 前四位有用
function ShowOnlineHelp(const sTaxID, sBaseItemType, sBaseItemID: string): integer;
var
iH, iL: integer;
begin
Result := 0;
if _frmHint = nil then
exit;
try
iH := StrToInt(sTaxID) shl 16 + StrToInt(sBaseItemType);
iL := StrToInt(sBaseItemID);
if not PostMessage(_frmHint.Handle, WM_HELP, iH, iL) then
raise EHelpMsg.Create('請(qǐng)求聯(lián)機(jī)業(yè)務(wù)幫助失敗. 錯(cuò)誤號(hào)='+IntToStr(GetLastError()));
except
on E:Exception do
begin
Result := 1;
ErrorHandler(E, 'ShowOnlineHelp');
end;
end;
end;
// ★★★
//---- 聯(lián)機(jī)主窗口提示
// 輸入?yún)?shù):
// sHint: 提示信息
function ShowOnlineHint(const sHint: string): integer;
begin
Result := 0;
if _frmMain = nil then
exit;
try
_sHint := sHint;
if not PostMessage(_frmMain.Handle, WM_HINT, 0, 0) then
raise EHintMsg.Create('請(qǐng)求聯(lián)機(jī)主窗口提示失敗. 錯(cuò)誤號(hào)='+IntToStr(GetLastError()));
except
on E:Exception do
begin
Result := 1;
ErrorHandler(E, 'ShowOnlineHint');
end;
end;
end;
//---- 進(jìn)程指示
//-- 1. 由調(diào)用程序驅(qū)動(dòng)的指示桿的編程接口
// 1.1. 初始化,創(chuàng)建窗口
// 輸入?yún)?shù):
// sFixedMsg: 固定的顯示信息
// iMax: 指示桿的最大值
// bCanCancel:是否允許用戶取消當(dāng)前進(jìn)程
// 1.2. 改變顯示,移動(dòng)指示桿的位置
// 輸入?yún)?shù):
// sChangingMsg: 動(dòng)態(tài)的顯示信息
// iPosition: 指示桿的當(dāng)前位置
// 返回值:
// true:用戶未取消當(dāng)前進(jìn)程
// false:用戶取消當(dāng)前進(jìn)程
// 1.3. 結(jié)束,關(guān)閉窗口
//-- 2. 自動(dòng)移動(dòng)指示桿的編程接口
// 2.1. 初始化,創(chuàng)建窗口
// 輸入?yún)?shù):
// sFixedMsg: 固定的顯示信息
// bCanCancel:是否允許用戶取消當(dāng)前進(jìn)程
// 2.2. 改變顯示,移動(dòng)指示桿的位置
// 輸入?yún)?shù):
// sChangingMsg: 動(dòng)態(tài)的顯示信息
// 返回值:
// true:用戶未取消當(dāng)前進(jìn)程
// false:用戶取消當(dāng)前進(jìn)程
// 2.3. 結(jié)束,關(guān)閉窗口
//---- 自動(dòng)設(shè)定窗體的寬度和高度
procedure SetWinSize(var frmShow: TForm; const poWhich: TPosition; const bDock: boolean);
var
iCC, iMinW, iMinH, iMaxW, iMaxH: integer;
ctrlTmp: TControl;
begin
// 處理所有構(gòu)件
iMinW := 1000;
iMinH := 1000;
iMaxW := 0;
iMaxH := 0;
for iCC:=0 to frmShow.ControlCount-1 do
begin
ctrlTmp := frmShow.Controls[iCC];
if ctrlTmp.Left < iMinW then
iMinW := ctrlTmp.Left;
if ctrlTmp.Top < iMinH then
iMinH := ctrlTmp.Top;
if ctrlTmp.Left + ctrlTmp.Width > iMaxW then
iMaxW := ctrlTmp.Left + ctrlTmp.Width;
if ctrlTmp.Top + ctrlTmp.Height > iMaxH then
iMaxH := ctrlTmp.Top + ctrlTmp.Height;
end;
frmShow.Scaled := True;
frmShow.Position := poWhich;
if bDock then
frmShow.Height := iMaxH + 6
else
frmShow.ClientHeight := iMaxH + 6;
frmShow.Width := iMaxW + iMinW;
end;
//---- 顯示全局變量
procedure ShowGlobalAppVars;
begin
ShowMessage(' 系統(tǒng)使用單位名稱 _sUnitName = ' + _sUnitName + #13 +
' 系統(tǒng)使用單位類型 _sUnitType = ' + _sUnitType + #13 + #13 + //
' 被審企業(yè)代碼 _iEnpID = ' + IntToStr(_iEnpID) + #13 +
' 被審企業(yè)名稱 _sEnpName = ' + _sEnpName + #13 +
' 被審企業(yè)地址 _sEnpAddr = ' + _sEnpAddr + #13 +
' 被審企業(yè)行業(yè)代碼 _sTradeID = ' + _sTradeID + #13 +
' 被審企業(yè)行業(yè)名稱 _sTradeName = ' + _sTradeName + #13 +
' 被審企業(yè)經(jīng)濟(jì)類型代碼 _sEconType = ' + _sEconType + #13 +
' 被審企業(yè)經(jīng)濟(jì)類型名稱 _sEconName = ' + _sEconName + #13 +
' 被審企業(yè)所得稅率 _dIncomeTaxRate = ' + FloatToStr(_dIncomeTaxRate) + #13 +
' 被審企業(yè)城建稅率 _dCityTaxRate = ' + FloatToStr(_dCityTaxRate) + #13 + #13 +
' 當(dāng)前約定書號(hào) _sContractID = ' + _sContractID + #13 +
' 項(xiàng)目經(jīng)理姓名 _sProjectMngName = ' + _sProjectMngName + #13 +
' 項(xiàng)目經(jīng)理工號(hào) _sProjectMngID = ' + _sProjectMngID + #13 +
' 項(xiàng)目經(jīng)理內(nèi)部代碼 _iProjectMngID = ' + IntToStr(_iProjectMngID) + #13 + #13 +
' 當(dāng)前被審稅種內(nèi)部號(hào) _iTaxID = ' + IntToStr(_iTaxID) + #13 +
' 當(dāng)前被審稅種號(hào) _sTaxID = ' + _sTaxID + #13 +
' 代理稅種名稱 _sTaxName = ' + _sTaxName + #13 +
' 代理內(nèi)容 _sAgent = ' + _sAgent + #13 +
' 數(shù)據(jù)錄入方法 _iDataFrom = ' + IntToStr(_iDataFrom) + #13 +
' 當(dāng)前工作所使用的申報(bào)表代碼 _sRptID = ' + _sRptID + #13 +
' 當(dāng)前執(zhí)行的總體工作計(jì)劃號(hào) _sPlanID = ' + _sPlanID + #13 +
' 當(dāng)前計(jì)劃年度 _iPlanYear = ' + IntToStr(_iPlanYear) + #13 +
' 當(dāng)前個(gè)人工作計(jì)劃號(hào) _iPerPlanID = ' + IntToStr(_iPerPlanID) + #13 +
' 當(dāng)前個(gè)人計(jì)劃所屬會(huì)計(jì)期間 _sAccSession = ' + _sAccSession + #13 + #13 +
' 操作員姓名 _sUserName = ' + _sUserName + #13 +
' 操作員工號(hào) _sUserID = ' + _sUserID + #13 +
' 操作員內(nèi)部代碼 _iUserID = ' + IntToStr(_iUserID) + #13 +
' 操作員口令 _sPassWord = ' + _sPassWord + #13 +
' 操作員所在部門代碼 _iDptID = ' + IntToStr(_iDptID) + #13 +
' 操作員所在部門名稱 _sDptName = ' + _sDptName + #13 +
' 操作員權(quán)限 _sRight = ' + _sRight);
end;
procedure ShowGlobalSysVars;
begin
ShowMessage(' 當(dāng)前工作站名稱 _sMachineName = ' + _sMachineName + #13 +
' 系統(tǒng)安裝目錄 _sAppPath = ' + _sAppPath + #13 +
' 系統(tǒng)臨時(shí)目錄 _sAppTmpPath = ' + _sAppTmpPath + #13 +
' 系統(tǒng)運(yùn)行地點(diǎn) _iRunSite = ' + IntToStr(_iRunSite) + #13 +
' 提示窗口標(biāo)題 _sAppTitle = ' + _sAppTitle + #13 +
' 系統(tǒng)數(shù)據(jù)庫(kù) _sDatabase = ' + _sDatabase + #13 +
// ' 數(shù)據(jù)庫(kù)服務(wù)器 _sServerName = ' + _sServerName + #13 +
' 顯示邏輯錯(cuò)誤信息 _bShowSysError = ' + IntToStr(integer(_bShowSysError)) + #13 + #13 +
' 過(guò)程參數(shù) _sSQLParam = ' + _sSQLParam + #13 + #13 +
' 變量定義 _sSQLVar = ' + _sSQLVar + #13 + #13 +
' 初始化 _sSQLStart = ' + _sSQLStart + #13 + #13 +
' 報(bào)表結(jié)束 _sSQLREnd = ' + _sSQLREnd + #13 + #13 +
' 政策結(jié)束 _sSQLPEnd = ' + _sSQLPEnd );
end;
// ★★★
// 將回車鍵轉(zhuǎn)換為TAB鍵
// 調(diào)用方式:將Form的KeyPreviw設(shè)為True,在KeyDown事件中加語(yǔ)句
// ConvertKey(ActiveControl,HANDLE,Key,Shift);
procedure ConvertKey(ActiveControl:TWinControl ;HANDLE: HWND;var Key: Word;Shift: TShiftState);
begin
if (ord(Key)=13) then
begin
if ((ActiveControl is TComboBox) ) then
begin
if SendMessage(ActiveControl.HANDLE,CB_GETDROPPEDSTATE ,0,0)=0 then
begin
if SendMessage(ActiveControl.HANDLE,CB_GETCURSEL,0,0)= CB_ERR then
SendMessage(ActiveControl.HANDLE,CB_SETCURSEL,0,0);
PostMessage(ActiveControl.HANDLE,CB_SHOWDROPDOWN,-1,0);
end
else
begin
PostMessage(HANDLE,WM_KEYDOWN,vk_TAB,0);
Key :=0;
end;
exit;
end;
if ((ActiveControl is TCheckBox)) then
begin
PostMessage(HANDLE,WM_KEYDOWN,vk_TAB,0);
Key := 0; // 32
exit;
end;
if ((ActiveControl is TEdit)
or (ActiveControl is TMaskEdit)
or (ActiveControl is TRadioButton)
or (ActiveControl is TDBImage)
or (ActiveControl is TDBComboBox)
or (ActiveControl is TDBEdit)) then
begin
PostMessage(HANDLE,WM_KEYDOWN,vk_TAB,0);
Key :=0;
end;
end;
if (ord(Key)=9) then
begin
if (ActiveControl is TDbgrid) then
begin
PostMessage(HANDLE,WM_KEYDOWN,vk_TAB,0);
Key :=0;
end;
end;
end;
// ★★★
// 錯(cuò)誤處理程序,供異常處理調(diào)用
procedure ErrorHandler(expWhich:Exception; sProcedure:string);
var
F1: TextFile;
iNum,iLoop: integer;
sEM: string;
begin
try
// 2. 記入錯(cuò)誤日志
_sErrorMsg := '計(jì)算機(jī): '+_sMachineName+
' 發(fā)生日期: '+DateTimeToStr(Now)+#13+
' 錯(cuò)誤程序: '+sProcedure+
' 錯(cuò)誤信息: ';
// 2.1. 判斷錯(cuò)誤日志文件是否存在
AssignFile(F1, _sErrorFile);
if FileExists(_sErrorFile)=false then
begin
rewrite(F1); // 創(chuàng)建并打開
end
else
append(F1); // 打開并追加
// 2.2. 判斷是否為BDE錯(cuò)誤
if (expWhich is EDBEngineError) then
begin
iNum:=(expWhich as EDBEngineError).ErrorCount; // 取錯(cuò)誤的總數(shù)
// 循環(huán)取每個(gè)錯(cuò)誤的號(hào)和信息
for iLoop:=0 to iNum-1 do
begin
_iErrorCode := (expWhich as EDBEngineError).Errors[iLoop].Errorcode; //取錯(cuò)誤號(hào)
sEM := IntToStr(_iErrorCode) + ' ' +
(expWhich as EDBEngineError).Errors[iLoop].message; //取錯(cuò)誤信息
_sErrorMsg := _sErrorMsg+#13+' '+sEM;
end;
end
// 2.3. 非BDE錯(cuò)誤處理
else
begin
_iErrorCode:=1; //非BDE錯(cuò)誤則所有錯(cuò)誤號(hào)都為'1'
_sErrorMsg := _sErrorMsg + #13 + ' ' + expWhich.Message;
end;
// 2.4. 寫入日志
Writeln(F1, _sErrorMsg);
CloseFile(F1); // 關(guān)閉文件
if _bShowSysError then
Application.MessageBox(PChar(_sErrorMsg),
pchar(_sAppTitle),
mb_IconError+mb_ok);
except
Application.MessageBox('記錄系統(tǒng)錯(cuò)誤時(shí)出錯(cuò).',
pchar(_sAppTitle),
mb_IconError+mb_ok);
end;
end;
// ★★★
// 取錯(cuò)誤號(hào)和錯(cuò)誤信息
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -