?? syspublic.pas
字號:
unit SysPublic;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, DBGrids, ExtCtrls, Buttons, Mask, DBCtrls, Db, DBTables,
Qrctrls, ADODB, DataM, Math, WinSock, ComObj, Variants, qrprntr,
QuickRpt, DBGridEh, FR_Class, DBGridEhImpExp,
StrUtils, FR_DBSet, DBCtrlsEh, DBLookupEh;
const
//加密串
GENERAL_REGISTER_CODE = 'WSQL-2003-9561-0423-951U-BXRO';
ROOT_PASSWORD = 'wangchw'; //萬能密碼
sUserPass = 'wangchw';
//權限類
lInsert =0;//新增
lEdit =1;//修改
lDelete= 2;//刪除
lFind =3;//查找
lFilter =4;//過濾
lPrint =5;//打印
lExport =6;//導出
lmodule =100;//模塊權限
sEdit= 'dsEdit';
sInsert ='dsInsert';
var
bSoftRegister: Boolean = False; //是否為注冊版
bCygl : Boolean = True; //版本控制
sApplication : string;
SOFTWARE_CAPTION: string;
G_bAdmin, G_bTakeEffect: Boolean; {是否超級用戶,帳套是否啟用}
G_iUserID, G_iDepID: integer; {用戶內部ID,所屬部門內部ID}
G_sUserCode, G_sUserName, G_sDepName: string; {用戶代碼,用戶名,所屬部門名}
G_sPWD: string; {用戶密碼}
G_sSpace: string; {局域網/遠程}
G_bAppEnabled: Boolean;{程序是否可使用}
Str_djid_pub: string; ///////////2004-11-22 單據標識
SYSStartDate: TDateTime; //登陸時開始時間
const
DBPass= '123456'; //設置數據庫密碼
//改變DBGrid列的顏色,沒什么特別,但是經過調色師檢驗歐
procedure ChangeDbGridColColor(ojbDbGrid:TDbGrid);
//保存操作日志
function SaveOperateLog(sTitle: string): Boolean;
//得到本機名稱
function GetLocalHost: string;
//IP地址解析為主機域名
function IPToHost(IPAddr: string): string;
//得到當前焦點控件
function GetFocusedComponent(frmForm: TForm): TComponent;
{ 返回記錄數據網格列顯示最大寬度是否成功 }
function DBGridRecordSize(mColumn: TColumn): Boolean;
{ 返回數據網格自動適應寬度是否成功 }
function DBGridAutoSize(mDBGrid: TDBGrid; mOffset: Integer = 5): Boolean;
//獲取SQL Server服務器列表
function GetSQLServerList(Combobox :TComBoBox): Boolean;
//DBGrib中的數據輸出到Excel中
procedure DeriveToExcel(Title: String; DBGrid: TDBGrid; Total: Boolean);
//// 導出到打印機
procedure DeriveToPrint(Title: String; DBGrid: TDBGrid; Total: Boolean);
//如何將數字轉換成英文
Function RealToTxt(Amount : Real) : String;
(*//
標題:字符網格排序
說明:升序、降序;示例點擊標題排序
設計:Zswang
日期:2002-04-27
支持:wjhu111@21cn.com
//*)
//
function StringGridRowSwap(mStringGrid: TStringGrid;
mFromRow, mToRow: Integer): Boolean;
//
function StringGridRowSort(mStringGrid: TStringGrid;
mColIndex: Integer; mDesc: Boolean = False): Boolean;
{
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
{$J+}
//const
// vOldCol: Integer = -1;
{$J-}
//var
// vCol, vRow: Integer;
//begin
// if Button = mbRight then Exit;
// TStringGrid(Sender).MouseToCell(X, Y, vCol, vRow);
// if (vRow < 0) or (vRow >= TStringGrid(Sender).FixedRows) then Exit;
// StringGridRowSort(TStringGrid(Sender), vCol, vOldCol = vCol);
// if vOldCol = vCol then
// vOldCol := - vOldCol
// else vOldCol := vCol;
//end;
function StrLeft(const mStr: string; mDelimiter: string): string;
function ListValue(mList: string; mIndex: Integer; mDelimiter: string = ','): string;
function StringGridToText(mStringGrid: TStringGrid;
mStrings: TStrings): Boolean;
function TextToStringGrid(mStrings: TStrings;
mStringGrid: TStringGrid): Boolean;
{
procedure TForm1.Button1Click(Sender: TObject);
begin
StringGridToText(StringGrid1, Memo1.Lines);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
TextToStringGrid(Memo1.Lines, StringGrid1);
end;
}
function repl_substr(sub_old, sub_new, s: string): string; //把sub_old換成sub_new,后面有用。
function BackupSQLDataBase(connstr_sql,DatabaseName,Backup_FileName:string):Boolean;//數據庫備份函數
//SQL數據數據庫備份,connstr_sql是ADO控件的connectionstring,DatabaseName是數據庫名稱,
//Backup_FileName要備份到的目 標文件
function RestoreSQLDataBase(connstr_sql,DatabaseName,Restore_FileName:string):Boolean;//數據庫恢復函數
//Restore_FileName以前備份的數據庫文件,
//又一款人民幣金額大小寫轉換的演示程序
function F2C(r: real): string;
//控件自適應窗體大小
Procedure CompentAutoSize(FormeSize:TForm;var Form_width,Form_Height:integer);
//連接ADOConnection
function GetConn(ADOQry: TADOQuery): Boolean;
//同操作Ini文件,得到一字段的值
function GetIniValue(ADOConnet: TADOConnection; sName: string): string;
//打開DataSet
function OpenDataSetEx(ADOConnet: TADOConnection; DataSet: TADOQuery; szSql: string): Boolean;
//生成注冊機器碼
function MakeComputerCode: string;
//得到硬盤的序列號
function GetIDESerial: string;
//得到分區序列號
function GetDiskSerial(sDisk: string): string;
//得到0-9,a-b之間的標準字符
function GetStandardStr(sStr: string): string;
//得到計算機名稱
function GetPCName: string;
//生成注冊號
function MakeRegisterCode(sName, sPcCode: string): string;
//字符串加密
function StringEncrypt(mStr: string; mKey: string): string;
//轉換為可顯示加密串
function StringToDisplay(mString: string): string;
//同操作Ini文件,修改一字段的值
function SetIniValue(ADOConnet: TADOConnection; sName, sValue: string): Boolean;
//返回數據庫是否為空高級
function GetDataSetEmptyEx(ADOConnet: TADOConnection; sSql: string): Boolean;
//高級執行Sql
function ExecSqlEx(ADOConnet: TADOConnection; sSql: string): Boolean;
//返回數據庫條數
function GetDataSetCount(sSql: string): Integer;
//反回數據庫條數高級
function GetDataSetCountEx(ADOConnet: TADOConnection; sSql: string): Integer;
//判斷資料是否使用
function JudgeDataUse(originalityTableName,OriginalityFieldName, presentFieldValue: string): Boolean;
procedure SaveButtonState(RadGro: TRadioGroup);
procedure SetDBGridState(const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState; DBGrid1: TDBGrid);
//設置DBGrid的顏色
procedure SetDBGridColor(DBGridEh1: TDBGridEh; const Rect: TRect; DataCol: Integer; ColumnEh: TColumnEh;
State: TGridDrawState; Sender: TObject);
//定義提示對話框
procedure RemMsgBox(RemindText: string; Caption: string='');
//MessageBox
function MsgBox(Text: string; Flags: Longint = MB_OK): Integer;
//ShowMessage
procedure ShowMsg(sMsg: string);
//DBGridEh滿頁
procedure ReadDBGridEhAutoFitColWidth(Form1: TForm);
procedure SaveDBGridEhAutoFitColWidth(CheckBox1: TCheckBox);
//報表副標題
//function SetReportSubTitle: Boolean;
//
function InsCode(IniData: integer; ADOQuery1: TADOQuery; sFieldName, sTable: string): Boolean;
procedure ManipulateControl(WinControl: TControl;
Shift: TShiftState; X, Y, precision: integer);
procedure TM(Fd:TDBNavigator);
//打開MDI窗口函數
procedure OpenForm(FormClass: TFormClass; var fm; AOwner:TComponent);
//打開帶密碼的ACCESS數據庫函數
function LnkAccess(var ADOConnet: TADOConnection; Db, DbPwd: string):Boolean;
//連接本系統數據庫函數
function LnkLocalAccess: Boolean;
function GridFieldToTitle(GridEh: TDBGridEh; sField: string): string;
function SaveDataSet(ADOQuery1: TADOQuery; Cached: Boolean): Boolean;
function FindPublic(Grid1: TDBGridEh; var sText: string; var
lFiled: Integer): Boolean;
procedure DBGridEhExport(DBGridEh: TDBGridEh; Form: TForm);
//返回字段類型
function GetFieldType(fField: TField): string;
function FilterPublic(Grid1: TDBGridEh): Boolean;
function CheckEditEmpty(lMsg: Integer; Form1: TForm; AsLabel, AsEdit: array of
string): Boolean;
//根據年月日,表名,進入庫類型添加的數量生成單號。作者:王承武與2003-080-06早08:41分完畢
Function GetID(Aqy: TADOQuery; TableName,DHFieldName,DateFieldName, TypeFieldName, TypeValue:String;
BeginPos,StrLen:integer):boolean;
//根據年月日,表名,添加的數量生成單號
Function IDGen(Aqy: TADOQuery; DJType, TableName,DHFieldName,DateFieldName:String;
BeginPos,StrLen:integer):boolean;
procedure ConnAccess(AdoConn: TADOConnection; FileName, UserName, Password: string);
//字段賦值函數 2004-11-16
procedure SetField(StrTarget,StrSource: string; ADOQryTarget,
ADOQrySource: TADOQuery);
//發送一個消息
procedure SendMsg(hWnd, Msg, wParam: Integer; lParam: Integer = 0);
//用這個函數吧,入口是 字符串,分割符(分割符可以是單個字符也可以是字符串,也可以是漢字),出口是 是一個Tstringlist數組,索引從0開始 result[0]是第一個
function SplitString(const source, ch: string): tstringlist;
//下面這個自定義函數,可以取兩個任意分隔符之間的字串,目前分隔符為',',要注意的話,目前函數返回的字串包含分隔符本身,如果不想包含分隔符本身的話,你可以修改 locate_string:=copy
function locate_string(line_string:string;start_position,end_position:integer):string;
//String轉換Int
function StrToInt2(s: string): Integer;
//設置GRID字段
function StrToGridField(Grid1: TDBGridEh; sFieldName, sCaption, sWidth: string; sMask: string = ''): Boolean;
//表格列配置
function SetCol(sCaption: string; DBGridEh1: TDBGridEh; lInit: Integer): Boolean;
//表格存列寬
function SetColWidth(sCaption: string; Grid: TDBGridEh): Boolean;
//執行Sql
function ExecSql(sSql: string): Boolean;
//打開DataSet(默認ADOConnet)
function OpenDataSet(DataSet: TADOQuery; szSql: string): Boolean;
//保存表格是否扁平
procedure SaveDBGridEhFlat(CheckBox1: TCheckBox);
//讀取DBGridEh是否為扁平
procedure ReadDBGridEhFlat(Form1: TForm);
procedure SaveDBEditEhFlat(CheckBox3: TCheckBox);
//設置EDIT扁平
procedure ReadDBEditFlat(Form1: TForm);
//返回起始結束日期
function GetDate(var tStartDate, tEndDate: TDateTime): Boolean;
//String轉換Boolean
function StrToBool2(sStr: string): Boolean;
{
函數名稱:FilterStrInBracket
函數功能:獲得[]中的值
使用說明:
建立人:
建立日期:}
function FilterStrInBracket(value:string):String;
{
函數名稱:EncryptPassword
函數功能:加密一個字符串
使用說明:
建立人:
建立日期:}
function EncryptPassword(value:string):string;
function SysRightLimit(Form1: string; i: integer): Boolean;
function SetID(sTitle, DHFieldName,TableName:String ; BeginPos,StrLen:integer): string;
//顯示關鍵字重復
procedure ShowIDRepeat(sIDName: string);
var
LoginEmployeName: string;
LoginEmployeCode : string;
implementation
uses DiskSerialNumber, PrintStructure, Main, FindPublic, FilterPublic, ColSetup, DateForm;
procedure SetDBGridColor(DBGridEh1: TDBGridEh; const Rect: TRect; DataCol: Integer; ColumnEh: TColumnEh;
State: TGridDrawState; Sender: TObject);
begin
Case DBGridEh1.DataSource.DataSet.RecNo Mod 2 = 0 of
True: DbGridEh1.Canvas.Brush.Color:= clInfoBk; //偶數列用藍色
//False: DbGrid1.Canvas.Brush.Color:= clAqua;//奇數列用淺綠色
End;
DbGridEh1.Canvas.Pen.Mode:=pmMask;
DbGridEh1.DefaultDrawColumnCell (Rect, DataCol, ColumnEh, State);
{with (Sender as TDBGrid).Canvas do //畫 cell 的邊框
begin
Pen.Color := $00ff0000; //定義畫筆顏色(藍色)
MoveTo(Rect.Left, Rect.Bottom); //畫筆定位
LineTo(Rect.Right, Rect.Bottom); //畫藍色的橫線
Pen.Color := $0000ff00; //定義畫筆顏色(綠色)
MoveTo(Rect.Right, Rect.Top); //畫筆定位
LineTo(Rect.Right, Rect.Bottom); //畫綠色的豎線
end;}
end;
procedure SetDBGridState(const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState; DBGrid1: TDBGrid);
begin
if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
DbGrid1.Canvas.Brush.color:=clRed; //當前行以紅色顯示,其它行使用背景的淺綠色
DbGrid1.Canvas.pen.mode:=pmmask;
DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
end;
procedure SaveButtonState(RadGro: TRadioGroup);
var
sShape: string;
ADOQryTmp: TADOQuery;
begin
ADOQryTmp:= TADOQuery.Create(Nil);
GetConn(ADOQryTmp);
ADOQryTmp.Close;
ADOQryTmp.SQL.Clear;
ADOQryTmp.SQL.Add('Select * From SystemTable Where Name = ''Button''');
ADOQryTmp.Open;
case RadGro.ItemIndex of
0: sShape:= 'shCapsule';
1: sShape:= 'shOval';
2: sShape:= 'shRectangle';
3: sShape:= 'shRoundRect';
end;
ADOQryTmp.Edit;
ADOQryTmp.FieldByName('Code').AsString:= sShape;
ADOQryTmp.Post;
// ReadButtonState;
end;
procedure ChangeDbGridColColor(ojbDbGrid:TDbGrid);
var
i:integer;
begin
for i:= 0 to ojbDbGrid.Columns.Count -1 do
begin
case i mod 3 of
0: ojbDbGrid.Columns.Items[i].Color:=TColor($0023AF82);
1: ojbDbGrid.Columns.Items[i].Color:=TColor($00339CDB);
2: ojbDbGrid.Columns.Items[i].Color:=TColor($00C69C6D);
end;
end;
end;
function SaveOperateLog(sTitle: string): Boolean;
var
sSql: string;
begin
Result := False;
sSql := 'INSERT INTO 新增系統日志(日期,機器名,操作員,操作) VALUES('''+
FormatDateTime('yyyy-mm-dd', Date) +''',''' + GetLocalHost + ''',''' +
LoginEmployeName + ''',''' + sTitle + ''')';
DataMForm.ADOConnet.Execute(sSql);
Result := True;
end;
function GetLocalHost: string;
begin
Result := IPToHost('');
end;
function IPToHost(IPAddr: string): string;
var
SockAddrIn: TSockAddrIn;
HostEnt: PHostEnt;
WSAData: TWSAData;
begin
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -