u_public.pas
上传用户:psxgmh
上传日期:2013-04-08
资源大小:15112k
文件大小:7k
源码类别:

Delphi/CppBuilder

开发平台:

Delphi

  1. unit u_public;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  5.   ExtCtrls, StdCtrls, DBGrids, DBClient, DB, Registry, winsock;
  6. type
  7.   TCurrentParam = record
  8.     userAliasName: string;
  9.     LoginTime: string;
  10.     Host: string;
  11.     IP: string;
  12.     userBH: string;
  13.     userName: string;
  14.     userZH: string;
  15.   end;
  16. //=====
  17. function ShowMDIForm(aFormClass: TFormClass): TForm;
  18. //===
  19. procedure ShowModalForm(aFormClass: TFormClass);
  20. //==
  21. procedure DbGridSort(dbgrid: TDBGrid; Column: TColumn);
  22. //===
  23. function ConnectAppServ: boolean;
  24. //==
  25. function GetComputerName: string;
  26. //==
  27. function GetComputerIP: string;
  28. //===辅助录入窗口,得到职工的姓名
  29. function GetEmployeeName: string;
  30. //==辅助录入窗口,得到部门名称
  31. function GetDeptName: string;
  32. //==辅助录入窗口,得到工程项目名称
  33. function GetProjectName: string;
  34. var
  35.   CurrentParam: TCurrentParam;
  36.   psIndexName: string; //
  37.   plAscend: Boolean;
  38. implementation
  39. uses U_mainform, WzglDB, U_ljsz, U_fzlr_zgxm, U_bmda_fzlr,
  40.   U_fzlr_gcxmda;
  41. function showMDIForm(aFormClass: TFormClass): TForm;
  42. begin
  43.   frmMain.statusbar1.Panels[0].text := '正在打开窗口,请稍侯...';
  44.   frmMain.statusbar1.refresh;
  45.   screen.Cursor := crHourGlass;
  46.   lockwindowupdate(frmMain.handle);
  47.   result := aFormClass.Create(Application);
  48.   with result do
  49.   begin
  50.     WindowState := wsMaximized;
  51.     frmMain.statusbar1.Panels[0].text := '';
  52.     frmMain.statusbar1.refresh;
  53.     show;
  54.     lockwindowupdate(0);
  55.     screen.Cursor := crDefault;
  56.   end;
  57. end;
  58. procedure ShowModalForm(aFormClass: TFormClass);
  59. begin
  60.   frmMain.statusbar1.Panels[0].text := '正在打开窗口,请稍侯...';
  61.   frmMain.statusbar1.refresh;
  62.   screen.Cursor := crHourGlass;
  63.   with aFormClass.Create(Application) do
  64.   begin
  65.     frmMain.statusbar1.Panels[0].text := '';
  66.     frmMain.statusbar1.refresh;
  67.     screen.Cursor := crDefault;
  68.     try
  69.       showModal;
  70.     finally
  71.       free;
  72.     end;
  73.   end;
  74. end;
  75. function ConnectAppServ: boolean; //判断是否连接上了应用服务器
  76. var
  77.   vs_Host, vs_Address, vs_Port: string;
  78.   reg: TRegistry;
  79. begin
  80.   Result := True;
  81.   reg := Tregistry.create;
  82.   Reg.RootKey := HKEY_LOCAL_MACHINE;
  83.   frmMain.SocketConnection.Connected := false;
  84.   //读取注册表配置的应用服务器信息
  85.   if Reg.OpenKey('Software物资管理', False) then
  86.   begin
  87.     vs_Host := reg.ReadString('Host');
  88.     vs_Address := reg.ReadString('Address');
  89.     vs_Port := reg.readstring('Port');
  90.     try
  91.       //测试连接
  92.       with frmMain do
  93.       begin
  94.         SocketConnection.Address := vs_Address;
  95.         SocketConnection.Host := vs_Host;
  96.         SocketConnection.Port := strtoint(vs_Port);
  97.         SocketConnection.Connected := true;
  98.       end;
  99.       reg.closekey;
  100.     except //未连接上,弹出配置窗口
  101.       reg.closekey;
  102.       if not LjszExecute(TfrmLjsz) then
  103.         Result := False;
  104.     end;
  105.   end
  106.   else
  107.   begin
  108.     if not LjszExecute(TfrmLjsz) then //如果没有注册信息,弹出配置窗口
  109.       Result := False;
  110.   end;
  111. end;
  112. procedure DbGridSort(dbgrid: TDBGrid; Column: TColumn);
  113. var
  114. //本模块使用到的psIndexName, plAscend两个变量见上定义
  115.   mode: char; //记录是“升序”还是“降序”
  116.   ColName: string; //记录当前字段名
  117.   iCol: Integer; //记录当前列号
  118. begin
  119.   with dbgrid.DataSource.DataSet as Tclientdataset do //Table0
  120.   begin
  121. //检测当前工作表是否已打开
  122.     if not Active
  123.       then begin
  124.       Application.MessageBox('工作表尚未打开!', '停止', MB_OK + MB_ICONSTOP);
  125.       Abort
  126.     end;
  127. //检测当前字段是否“能排序”。以下字段类型不能排序
  128.     case Column.Field.DataType of
  129.       ftBoolean,
  130.         ftBytes,
  131.         ftBlob, //Binary
  132.         ftMemo,
  133.         ftGraphic,
  134.         ftFmtMemo, //Formatted memo
  135.         ftParadoxOle: //OLE
  136.         begin
  137.           Abort
  138.         end;
  139.     end; //case
  140.     mode := '0';
  141.     iCol := Column.Field.FieldNo - 1;
  142.     try
  143.       ColName := Column.fieldname;
  144.       if psIndexName = Column.fieldname then
  145.       begin //与原来同列
  146.         if plAscend //升序
  147.           then begin
  148.           mode := '2';
  149.           IndexName := ColName + '2'; //应“降序”
  150.         end
  151.         else begin
  152.           mode := '1';
  153.           IndexName := ColName + '1'; //应“升序”
  154.         end;
  155.         plAscend := not plAscend;
  156.       end
  157.       else begin //新列
  158.         IndexName := ColName + '2';
  159.         plAscend := false;
  160.         psIndexName := ColName;
  161.       end;
  162.     except
  163.       on EDatabaseError do //若未有索引,则重新建立
  164.       begin
  165. //以下新建索引
  166.         IndexName := '';
  167.         if mode = '1'
  168.           then AddIndex(ColName + '1', ColName, [], '', '', 0) //
  169.         else //包括'0'
  170.           AddIndex(ColName + '2', ColName, [ixDescending], '', '', 0);
  171.         try //try 1
  172.           if mode <> '1'
  173.             then begin
  174.             mode := '2'; //转换
  175.             plAscend := false;
  176.           end
  177.           else plAscend := true;
  178.           IndexName := ColName + mode;
  179.           psIndexName := ColName;
  180.         except
  181.           IndexName := '';
  182.         end //try 2
  183.       end
  184.     end;
  185.     first;
  186.   end; //with
  187.   dbgrid.SelectedIndex := iCol;
  188. end;
  189. {获取本地计算机主机名}
  190. function GetComputerName: string;
  191. var
  192.   pcComputer: PChar;
  193.   dwCSize: DWORD;
  194. begin
  195.   dwCSize := MAX_COMPUTERNAME_LENGTH + 1;
  196.   result := '';
  197.   GetMem(pcComputer, dwCSize);
  198.   try
  199.     if Windows.GetComputerName(pcComputer, dwCSize) then
  200.       Result := pcComputer;
  201.   finally
  202.     FreeMem(pcComputer);
  203.   end;
  204. end;
  205. ///////////////获取本地计算机的IP地址
  206. function GetComputerIP: string;
  207. var
  208.   ch: array[1..32] of Char;
  209.   i: Integer;
  210.   WSData: TWSAData;
  211.   MyHost: PHostEnt;
  212.   S_IP: string;
  213. begin
  214.   if WSAstartup(2, wsdata) <> 0 then
  215.     EXIT;
  216.   if getHostName(@ch[1], 32) <> 0 then
  217.     EXIT;
  218.   MyHost := GetHostByName(@ch[1]);
  219.   if MyHost = nil then
  220.     EXIT
  221.   else
  222.   begin
  223.     for i := 1 to 4 do
  224.     begin
  225.       S_IP := S_IP + inttostr(Ord(MyHost.h_addr^[i - 1]));
  226.       if i < 4 then
  227.         S_IP := S_IP + '.';
  228.     end;
  229.   end;
  230.   RESULT := S_IP;
  231. end;
  232. /////////////
  233. //===辅助录入窗口,得到职工的姓名
  234. function GetEmployeeName: string;
  235. begin
  236.   //创建TfrmZgda_fzlr窗体对象
  237.   with TfrmZgda_fzlr.Create(Application) do
  238.   begin
  239.     pub_zgxm := '';
  240.     try
  241.       //模式显示窗口
  242.       showModal;
  243.     finally
  244.       free;
  245.     end;
  246.     result := pub_zgxm;
  247.   end;
  248. end;
  249. //===辅助录入窗口,得到部门的名称
  250. function GetDeptName: string;
  251. begin
  252.   with TfrmBmda_fzlr.Create(Application) do
  253.   begin
  254.     pub_Bmmc := '';
  255.     try
  256.       showModal;
  257.     finally
  258.       free;
  259.     end;
  260.     result := pub_Bmmc;
  261.   end;
  262. end;
  263. //==辅助录入窗口,得到工程项目名称
  264. function GetProjectName: string;
  265. begin
  266.   with TfrmGcxmdy_fzlr.Create(Application) do
  267.   begin
  268.     pub_Gcxmmc := '';
  269.     try
  270.       showModal;
  271.     finally
  272.       free;
  273.     end;
  274.     result := pub_Gcxmmc;
  275.   end;
  276. end;
  277. end.