📄 wsutils.pas
字号:
unit WSUtils;interfaceuses Windows, Messages, SysUtils, Classes, Controls, Forms, DBGrids, ComCtrls, DB, winsock, Dialogs, ADODB, Variants;type TFlag = (Mouth, NotMouth, Number, Letter, AscII);function GetMaxCode(Field: string; Table: string; Value: TFlag): string;{ DONE -o 胡建平 -cCode :无限制编码,三个参数分别是Number(数字)/Letter(字母)/Ascii(数字+字母) }function Coding(value: widestring; flag: tflag): string;function GetPassword(AStrPass: string): integer; // 密码转换函数function GetHostIP: string; //取得本机的IP地址函数function GetComputerNameX: string; //取得计算机的名称函数function FindShowForm(FormClass: TFormClass; const Caption: string): TForm;function ColumnByFieldName(Grid: TDBGrid; const FieldName: string): TColumn;{ 依据 DataSet 提供的数据建立树型结构,DataSet 必须包含 ID, Name, UpID 三个字段 每个 TreeNode 的 Data 属性存储的是字段 ID 的值 } //注意:SourceDataSet中不能有既不是根节点又没有父节点的记录,否则不能退出该过程.// 杨辉腾 2002.10.31procedure BuildTreeFromDataSet(TreeItem: ttreenodes; SourceDataSet: TDataset);//在TreeItem中查找ID等于UPID的节点,返回值nil为没找到,// 杨辉腾 2002.10.31function FindNode(TreeItem: TTreeNodes; UpId: integer): TTreeNode;//存储Tree状态函数function SaveState(Tree: TTreeView): Tstrings;//重载Tree状态过程procedure LoadState(tree: TTreeView; List: Tstrings);{ 用关闭后再打开 DataSet 的方法来刷新 DataSet,并在打开后返回到以前状态(记录位置) }procedure RefreshDataSet(DataSet: TDataSet);procedure ExportDataSetToExcel(DataSet: TDataSet; DisableScreenUpdating: Boolean; const ReportCaption, ReportMemo, ReportTtl :string; AddChart: Boolean = False);procedure ExportDBGridToExcel(Grid: TDBGrid; DisableScreenUpdating: Boolean; ReportCaption, ReportMemo, ReportTtl :string; AddChart: Boolean = False);function GetTempFileName(const FileName: string): string;function GetCompanyName(): string;procedure RunReportExplorer;{ 打印报表,ReportName 制定要打印的报表名称 Screen Printer }procedure PrintReport(const ReportName, Params, DeviceType: string);function NumberToHZ(Value: Extended; Style: Integer): string;var PeriodID: integer; //管理期间ID CompanyName: string; //公司名称implementationuses ComObj, ActiveX, CommonDM, MSOption;function GetCompanyName(): string;var adoTemp: TADOQuery; c: string;begin Screen.Cursor := CrHourglass; adoTemp := TADOQuery.Create(nil); adoTemp.Connection := CommonData.acnConnection; with adoTemp do begin close; sql.Text := 'Select top 1 * from MSCompanyUser where RecordState<>' + QuotedStr('删除'); open; if RecordCount = 0 then begin //公司资料 Application.CreateForm(TMSOptionForm, MSOptionForm); MSOptionForm.ShowModal; adoTemp.Requery(); end; if RecordCount = 0 then result := '' else result := adoTemp.FieldByName('Name').AsString; end; Screen.Cursor := CrDefault;end;function FindForm(FormClass: TFormClass): TForm;var I: Integer;begin Result := nil; for I := 0 to Screen.FormCount - 1 do begin if Screen.Forms[I] is FormClass then begin Result := Screen.Forms[I]; Break; end; end;end;function InternalFindShowForm(FormClass: TFormClass; const Caption: string; Restore: Boolean): TForm;var I: Integer;begin Result := nil; for I := 0 to Screen.FormCount - 1 do begin if Screen.Forms[I].ClassNameIs(FormClass.ClassName) then if (Caption = '') or (Caption = Screen.Forms[I].Caption) then begin Result := Screen.Forms[I]; Break; end; end; if Result = nil then begin Application.CreateForm(FormClass, Result); if Caption <> '' then Result.Caption := Caption; end; with Result do begin if Restore and (WindowState = wsMinimized) then WindowState := wsNormal; Show; end;end;function FindShowForm(FormClass: TFormClass; const Caption: string): TForm;begin Result := InternalFindShowForm(FormClass, Caption, True);end;function ColumnByFieldName(Grid: TDBGrid; const FieldName: string): TColumn;var I: Integer;begin for I := 0 to Grid.Columns.Count - 1 do if CompareText(Grid.Columns[I].FieldName, FieldName) = 0 then begin Result := Grid.Columns[I]; Exit; end; Result := nil;end;procedure BuildTreeFromDataSet(TreeItem: ttreenodes; SourceDataSet: TDataset);var i, Number: integer; temptree, Temptree2: ttreenode;begin Number := SourceDataSet.Recordcount; while (not SourceDataSet.IsEmpty) and (treeitem.Count < SourceDataSet.RecordCount) and (Number > 0) do begin SourceDataSet.First; for i := 1 to SourceDataSet.RecordCount do begin if FindNode(treeitem, SourceDataSet.fieldbyname('ID').AsInteger) = nil //是否已经添加到Treeview then begin if (SourceDataSet.fieldbyname('UpID').AsInteger = -1) then begin temptree2 := treeitem.Add(nil, SourceDataSet.fieldbyname('Name').AsString); temptree2.data := pointer(SourceDataSet.fieldbyname('ID').asinteger); end else begin temptree := FindNode(treeitem, SourceDataSet.fieldbyname('UpID').AsInteger); if temptree <> nil //找到父节点 then begin temptree2 := treeitem.AddChild(Temptree, SourceDataSet.fieldbyname('Name').AsString); temptree2.data := pointer(SourceDataSet.fieldbyname('ID').asinteger); end; end; end; Sourcedataset.Next; end; number := number - 1; end;end;function FindNode(TreeItem: TTreeNodes; UpId: integer): TTreeNode;var i: integer;begin result := nil; for i := 0 to treeitem.Count - 1 do begin if integer(treeitem.Item[i].Data) = Upid then result := treeitem.item[i] end;end;function SaveState(Tree: TTreeView): Tstrings;var tempList: Tstrings; i: integer;begin templist := TStringList.Create; templist.Clear; for i := 0 to tree.Items.Count - 1 do begin if tree.Items.Item[i].Selected then templist.Add(inttostr(i)); end; result := templist;end;procedure LoadState(tree: TTreeView; List: Tstrings);var i: integer;begin for i := 0 to list.Count - 1 do begin if strtoint(list.Strings[i]) <= (tree.Items.Count - 1) then tree.Items.Item[strtoint(list.strings[i])].Selected := true; end;end;function GetPassword(AStrPass: string): integer;{*******************************************************描述:密码转换函数版本: V1.0日期:2002-11-01作者: 胡建平更新:TODO:密码转换函数*******************************************************}var Temp: pchar; c: char; i, long, Pass: integer;begin Pass := 0; long := Length(AStrPass); for i := 1 to Long do begin Temp := pchar(copy(AStrPass, i, 1)); c := Temp^; if c in ['A'..'Z'] then c := chr(ord(c) + 32); Pass := Pass + (ord(c) xor long) + (ord(c) and long); end; Result := Pass;end;function GetComputerNameX: string;{*******************************************************描述:取得计算机的名称函数版本: V1.0日期:2002-11-01作者: 胡建平更新:TODO:取得计算机的名称函数*******************************************************}var i: Cardinal; cBuff: PChar;begin GetMem(cBuff, 128); i := 128; GetComputerName(cBuff, i); Result := StrPas(cBuff);end;////取得本机的IP地址function GetHostIP: string;{*******************************************************描述:取得本机的IP地址函数版本: V1.0日期:2002-11-01作者: 胡建平更新:TODO:取得本机的IP地址函数*******************************************************}var ch: array[1..32] of Char; i: Integer; WSData: TWSAData; MyHost: PHostEnt; IP: string;begin IP := ''; if WSAstartup(2, wsdata) <> 0 then Result := '0.0.0.0'; try if getHostName(@ch[1], 32) <> 0 then Result := '0.0.0.0'; except Result := '0.0.0.0'; end; MyHost := GetHostByName(@ch[1]); if MyHost <> nil then begin for i := 1 to 4 do begin IP := IP + inttostr(Ord(MyHost.h_addr^[i - 1])); if i < 4 then IP := IP + '.' end; end; Result := IP;end;procedure RefreshDataSet(DataSet: TDataSet);var BM: TBookmark;begin with DataSet do begin DisableControls; try if Active then BM := GetBookmark else BM := nil; try Close; Open; if (BM <> nil) and not (Bof and Eof) and BookmarkValid(BM) then try GotoBookmark(BM); except end; finally if BM <> nil then FreeBookmark(BM); end; finally EnableControls; end; end;end;procedure ExportDataSetToExcel(DataSet: TDataSet; DisableScreenUpdating: Boolean; const ReportCaption, ReportMemo, ReportTtl :string; AddChart: Boolean);const CLASS_ExcelApplication: TGUID = '{00024500-0000-0000-C000-000000000046}';var ExcelApp, Sheet, Chart: OleVariant; Unknown: IUnknown; Bm: TBookmarkStr; Col, Row: Integer;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -