upublic.pas

来自「商场活动抽奖系统,无需控件,可以正常使用.」· PAS 代码 · 共 334 行

PAS
334
字号
unit uPublic;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, DB, DBTables, Mask, DBCtrls, Buttons,
  ExtCtrls, Grids, DBGrids, Spin,ADODB,winsock,ComObj
  ,WinInet;

procedure setEdit(Sender:TDBEdit;B:Boolean);
procedure setTEdit(Sender:TEdit;B:Boolean);
//procedure SetSEdit(Sender:TSpinEdit;B:Boolean);
procedure setCombo(Sender:TDBComboBox;B:Boolean);
procedure setTCombo(Sender:TComboBox;B:Boolean);
procedure SetMemo(Sender:TDBMemo;B:Boolean);
procedure SetTMemo(Sender:TMemo;B:Boolean);
procedure SetChk(Sender:TDBCheckbox;B:Boolean);
procedure SetTChk(Sender:TCheckbox;B:Boolean);
procedure setMaskEdit(Sender:TMaskEdit;B:Boolean);
function intToSlen(i:integer;l:integer):String;
function dateToUS(jf:String):String;
function StrToDs(S:String):String;

procedure MxFormatEditKeyPress(Edit:TCustomEdit;var Key:Char;EditType:integer;
        Digits:integer);
function Changdx2(mmje: Double): String;
function ConstToStr(S:String):string;
function DateToS(S:String):string;
function hzAddS(const sScrStr: string;i:integer): string;
procedure SetMove(Table:TADOQuery;btn_next,btn_last,btn_Prior,btn_First:TSpeedButton);
function getEmplnm(emplno:String;DB:String;ADOconn:TADOconnection):String;
function getDetpnm(emplno:String;DB:String;ADOconn:TADOconnection):String;
function getTime(ADOconn:TADOconnection):String;
procedure CopyDbDataToExcel(Args: array of const);
function Disablehide:Boolean;
function Enablehide:Boolean;
function GetLocalIP(var LocalIp: string): Boolean;
procedure GetWin32Type(var WindowsFlag:integer;var  WinINfo: string);
function SetPrivilege(PrivilegeName: String; Enable: Boolean): Boolean;//down pc
var
  DBName,DBName_wfdb:String ;
  DBServer:String; //DBServer数据 库名称
  CID:String='';
  CName:String='';              //保存用户名
  US:array[0..20] of String; //保存用户权限设置
  hHk :HHOOK;
type
PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;
KBDLLHOOKSTRUCT = record
vkCode: DWORD;
ScanCode: DWORD;
Flags: DWORD;
Time: DWORD;
dwExtraInfo: DWORD;
end;

implementation
{=================================================================
  功  能: 返回本机的局域网Ip地址
  参  数: 无
  返回值: 成功:  True, 并填充LocalIp   失败:  False
  备 注:
  版 本:
     1.0  2002/10/02 21:05:00
=================================================================}
function GetLocalIP(var LocalIp: string): Boolean;
var
    HostEnt: PHostEnt;
    Ip: string;
    addr: pchar;
    Buffer: array [0..63] of char;
    GInitData: TWSADATA;
begin
  Result := False;
  try
    WSAStartup(2, GInitData);
    GetHostName(Buffer, SizeOf(Buffer));
    HostEnt := GetHostByName(buffer);
    if HostEnt = nil then Exit;
    addr := HostEnt^.h_addr_list^;
    ip := Format('%d.%d.%d.%d', [byte(addr [0]),
          byte (addr [1]), byte (addr [2]), byte (addr [3])]);
    LocalIp := Ip;
    Result := True;
  finally
    WSACleanup;
  end;
end;
function ycxsks( yc:Boolean): Boolean;stdcall; //隐藏显示任务栏
var
h:THandle;
begin
if yc = True then
begin
h:=FindWindow('Shell_TrayWnd',nil);
ShowWindow(h,SW_hide); //隐藏任务栏
end
else
begin
h:=FindWindow('Shell_TrayWnd',nil);
ShowWindow(h,SW_SHOW); //显示任务栏
end;
Result:=true;
end;

function keyHookProc(nCode: Integer;WParam: WPARAM;LParam: LPARAM): LRESULT;stdcall;
//调用键盘勾子,左右win功能去除
var
p: PKBDLLHOOKSTRUCT;
y: integer;
begin
if nCode<0 then
Result:= CallNextHookEx(hHk,nCode,WParam,LParam) 
else
begin
y := 0;
case WParam of
WM_KEYDOWN,WM_SYSKEYDOWN: //按皱后判断
begin
p:=PKBDLLHOOKSTRUCT(Lparam); 
if p^.vkCode = VK_LWIN then
y := 1;
if p^.vkCode = VK_RWIN then
y := 1;
end;
WM_KEYUP,WM_SYSKEYUP: //松开后判断
begin
p:=PKBDLLHOOKSTRUCT(Lparam);
if p^.vkCode = VK_LWIN then
y := 1;
if p^.vkCode = VK_RWIN then
y := 1;
end;
end;
if y=1 then
Result:=1 //?if WIN 屏掉
else
Result:= CallNextHookEx(hHk,nCode,WParam,LParam); //?其它键直接返回
end
end;

function Enablehide:Boolean;//stdcall;export; //外部调用
begin
if hHk = 0 then
begin
hHk := SetWindowsHookEx(13,@keyHookProc,HInstance,0);
Result := True;
end
else
Result := False;
ycxsks(true);
end;

function Disablehide:Boolean;// stdcall; export; //外部调用
begin
if hHk <> 0 then
begin
UnHookWindowsHookEx(hHk);
hHk := 0;
Result := True;
end
else
Result := False;
ycxsks(False);
end;

//DBGrid导出EXcel 调入格式:CopyDbDataToExcel([DBGrid1,DBGrid2]);
procedure CopyDbDataToExcel(Args: array of const);
var
  iCount, jCount: Integer;
  XLApp: Variant;
  Sheet: Variant;
  I: Integer;
begin
  Screen.Cursor := crHourGlass;
  if not VarIsEmpty(XLApp) then
  begin
    XLApp.DisplayAlerts := False;
    XLApp.Quit;
    VarClear(XLApp);
  end;
  try
    XLApp := CreateOleObject('Excel.Application');
  except
    Screen.Cursor := crDefault;
    Exit;
  end;
  XLApp.WorkBooks.Add;
  XLApp.SheetsInNewWorkbook := High(Args) + 1;
  for I := Low(Args) to High(Args) do
  begin
    XLApp.WorkBooks[1].WorkSheets[I+1].Name := TDBGrid(Args[I].VObject).Name;
    Sheet := XLApp.Workbooks[1].WorkSheets[TDBGrid(Args[I].VObject).Name];
    if not TDBGrid(Args[I].VObject).DataSource.DataSet.Active then
    begin
      Screen.Cursor := crDefault;
      Exit;
    end;
    TDBGrid(Args[I].VObject).DataSource.DataSet.first;
    for iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 do
      Sheet.Cells[1, iCount + 1] :=
    TDBGrid(Args[I].VObject).Columns.Items[iCount].Title.Caption;
    sleep(2);
    jCount := 1;
    while not TDBGrid(Args[I].VObject).DataSource.DataSet.Eof do
    begin
      for iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 do
      begin
        Sheet.Cells[jCount + 1, iCount + 1] :=
      TDBGrid(Args[I].VObject).Columns.Items[iCount].Field.AsString;
      end ;
      Inc(jCount);
      TDBGrid(Args[I].VObject).DataSource.DataSet.Next;
    end;
    XlApp.Visible := True;
  end;
  Screen.Cursor := crDefault;
end;

//取人员的名字
function getEmplnm(emplno:String;DB:String;ADOconn:TADOconnection):String;
 var
  Query:TADOQuery;
begin
 Query:=TADOQuery.Create(nil);
 //Query.ConnectionString:=DBName;
 Query.Connection:=ADOconn;
 Query.SQL.Text:='select emplnm from hrs.hrs101t0'+DB+' where emplno like ''%'+emplno+'%''';
 Query.Open;
 if Query.RecordCount>0 then
  begin
   Result:=Query.Fields.Fields[0].AsString;
  end
 else
  Result:='';

 Query.Close;
 Query.Free;
end;
//取人员的部门 
function getDetpnm(emplno:String;DB:String;ADOconn:TADOconnection):String;
 var
  Query:TADOQuery;
begin
 Query:=TADOQuery.Create(nil);
 //Query.ConnectionString:=DBName;
 Query.Connection:=ADOconn;
 Query.SQL.Text:='select'+
  ' decode(course_id,null,decode(group_id,null,decode(part_id,null,crowd_id,part_id),group_id),course_id)'+
  ' as deptnm '+
  ' from hrs.hrs101t0'+DB+' a,hrs.hrs102t0'+DB+' b  '+
  ' where a.deptno=b.deptno and emplno like ''%'+emplno+'%'''  ;
 Query.Open;
 if Query.RecordCount>0 then
  begin
   Result:=Query.Fields.Fields[0].AsString;
  end
 else
  Result:='';
  
 Query.Close;
 Query.Free;
end;
//取数据库的时间
function getTime(ADOconn:TADOconnection):String;
 var
  Query:TADOQuery;
begin
 Query:=TADOQuery.Create(nil);
 //Query.ConnectionString:=DBName;
 Query.Connection:=ADOconn;
 Query.SQL.Text:='select to_char(sysdate,''yyyy/mm/dd HH24:MI:SS'') from dual ';
 Query.Open;
 Result:=Query.Fields.Fields[0].AsString;
 Query.Close;
 Query.Free;
end;


//控制记录移动按钮
procedure SetMove(Table:TADOQuery;btn_next,btn_last,btn_Prior,btn_First:TSpeedButton);
begin
//if not (Table.State in[dsEdit,dsInsert]) then
 if (Table.State <> dsBrowse) or (Table.RecordCount=0) then
  begin
  btn_next.Enabled:=False;
  btn_last.Enabled:=False;
  btn_Prior.Enabled:=False;
  btn_First.Enabled:=False;
  exit;
  end;
 if Table.Eof=True then
 begin
  btn_next.Enabled:=False;
  btn_last.Enabled:=False;
 end
 else
  begin
  btn_next.Enabled:=True;
  btn_last.Enabled:=True;
  end;

 if Table.Bof=True then
 begin
  btn_Prior.Enabled:=False;
  btn_First.Enabled:=False;
 end
 else
  begin
  btn_Prior.Enabled:=True;
  btn_First.Enabled:=True;
  end;

end;


//uses
// UrmzpRpt,URmJz,URmDh,UgsZpRpt,UGsJz,UGsWt;
{此函数在所限制组件的OnKeyPress事件中调用。Key即为OnKeyPress携带的
Key:Char参数;EditType为限制的类型:1-任意输入;2-整数输入;3-浮点输入;
Digits为浮点数输入时小数的位数,如果是零,则可输入任意位数。另外,此
函数只适用于有Text、SelStart、SelLength等属性的TWinControl类的派生类。
}
procedure MxFormatEditKeyPress(Edit:TCustomEdit;var Key:Char;EditType:integer;
        Digits:integer);
begin
  if key=#13 then exit;
  if (Key=#27) or (Key=#8) or (EditType=1) then exit;
  if EditType=2 then
    if not (Key in ['0'..'9','+','-'] ) then Key:=#0;
  if EditType=3 then
    if not (Key in ['0'..'9','+','-','.'] ) then Key:=#0;
  //北

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?