• 自己写的一些Delphi常用函数


    今天在整理以前写过的代码,发现有些函数还是挺实用的,决定将其贴到Blog上,与众多好友一起分享。
    {*******************************************************************************
    * 模块名称: 公用函数库
    * 编写人员: Chris Mao
    * 编写日期: 2004.10.30
    ******************************************************************************}

    unit JrCommon;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    ShellAPI, CommDlg, MMSystem, StdCtrls, Registry, JrConsts, Winsock;

    //------------------------------------------------------------------------------
    //窗体类函数
    //------------------------------------------------------------------------------
    function FindFormClass(FormClassName: PChar): TFormClass;
    function HasInstance(FormClassName: PChar): Boolean;

    //------------------------------------------------------------------------------
    //公用对话框函数
    //------------------------------------------------------------------------------
    procedure InfoDlg(const Msg: String; ACaption: String = SInformation);
    { 信息对话框 }

    procedure ErrorDlg(const Msg: String; ACaption: String = SError);
    { 错误对话框 }

    procedure WarningDlg(const Msg: String; ACaption: String = SWarning);
    { 警告对话框 }

    function QueryDlg(const Msg: String; ACaption: String = SQuery): Boolean;
    { 确认对话框 }

    function QueryNoDlg(const Msg: string; ACaption: string = SQuery): Boolean;
    { 确认对话框,默认按钮为"否" }

    function JrInputQuery(const ACaption, APrompt: String; var Value: string): Boolean;
    { 输入对话框 }

    function JrInputBox(const ACaption, APrompt, ADefault: string): String;
    { 输入对话框 }

    //------------------------------------------------------------------------------
    //扩展文件目录操作函数
    //------------------------------------------------------------------------------

    procedure RunFile(const FileName: String; Handle: THandle = 0; Param: string = '');
    { 运行一个文件 }

    function AppPath: string;
    { 应用程序路径 }

    function GetProgramFilesDir: string;
    { 取Program Files目录 }

    function GetWindowsDir: string;
    { 取Windows目录}

    function GetWindowsTempPath: string;
    { 取临时文件路径 }

    function GetSystemDir: string;
    { 取系统目录 }

    //------------------------------------------------------------------------------
    //扩展字符串操作函数
    //------------------------------------------------------------------------------

    function InStr(const sShort: string; const sLong: string): Boolean;
    { 判断s1是否包含在s2中 }

    function IntToStrSp(Value: Integer; SpLen: Integer = 3; Sp: Char = ','): string;
    { 带分隔符的整数-字符转换 }

    function ByteToBin(Value: Byte): string;
    { 字节转二进制串 }

    function StrRight(Str: string; Len: Integer): string;
    { 返回字符串右边的字符 }

    function StrLeft(Str: string; Len: Integer): string;
    { 返回字符串左边的字符 }

    function Spc(Len: Integer): string;
    { 返回空格串 }

    procedure SwapStr(var s1, s2: string);
    { 交换字串 }

    //------------------------------------------------------------------------------
    // 扩展日期时间操作函数
    //------------------------------------------------------------------------------

    function GetYear(Date: TDate): Word;
    { 取日期年份分量 }

    function GetMonth(Date: TDate): Word;
    { 取日期月份分量 }

    function GetDay(Date: TDate): Word;
    { 取日期天数分量 }

    function GetHour(Time: TTime): Word;
    { 取时间小时分量 }

    function GetMinute(Time: TTime): Word;
    { 取时间分钟分量 }

    function GetSecond(Time: TTime): Word;
    { 取时间秒分量 }

    function GetMSecond(Time: TTime): Word;
    { 取时间毫秒分量 }

    //------------------------------------------------------------------------------
    // 位操作函数
    //------------------------------------------------------------------------------
    type
    TByteBit = 0..7; // Byte类型位数范围
    TWordBit = 0..15; // Word类型位数范围
    TDWordBit = 0..31; // DWord类型位数范围

    procedure SetBit(var Value: Byte; Bit: TByteBit; IsSet: Boolean); overload;
    { 设置二进制位 }

    procedure SetBit(var Value: WORD; Bit: TWordBit; IsSet: Boolean); overload;
    { 设置二进制位 }

    procedure SetBit(var Value: DWORD; Bit: TDWordBit; IsSet: Boolean); overload;
    { 设置二进制位 }

    function GetBit(Value: Byte; Bit: TByteBit): Boolean; overload;
    { 取二进制位 }

    function GetBit(Value: WORD; Bit: TWordBit): Boolean; overload;
    { 取二进制位 }

    function GetBit(Value: DWORD; Bit: TDWordBit): Boolean; overload;
    { 取二进制位 }

    //------------------------------------------------------------------------------
    // 系统功能函数
    //------------------------------------------------------------------------------

    procedure ChangeFocus(Handle: THandle; Forword: Boolean = False);
    { 改变焦点 }

    procedure MoveMouseIntoControl(AWinControl: TControl);
    { 移动鼠标到控件 }

    procedure AddComboBoxTextToItems(ComboBox: TComboBox; MaxItemsCount: Integer = 10);
    { 将 ComboBox 的文本内容增加到下拉列表中 }

    function DynamicResolution(x, y: WORD): Boolean;
    { 动态设置分辨率 }

    procedure StayOnTop(Handle: HWND; OnTop: Boolean);
    { 窗口最上方显示 }

    procedure SetHidden(Hide: Boolean);
    { 设置程序是否出现在任务栏 }

    procedure SetTaskBarVisible(Visible: Boolean);
    { 设置任务栏是否可见 }

    procedure SetDesktopVisible(Visible: Boolean);
    { 设置桌面是否可见 }

    function GetWorkRect: TRect;
    { 取桌面区域 }

    procedure BeginWait;
    { 显示等待光标 }

    procedure EndWait;
    { 结束等待光标 }

    function CheckWindows9598: Boolean;
    { 检测是否Win95/98平台 }

    function GetOSString: string;
    { 返回操作系统标识串 }

    function GetComputeNameStr : string;
    { 得到本机名 }

    function GetLocalUserName: string;
    { 得到本机用户名 }

    function GetLocalIP: String;
    { 得到本机IP地址 }

    //------------------------------------------------------------------------------
    // 其它过程
    //------------------------------------------------------------------------------

    function TrimInt(Value, Min, Max: Integer): Integer; overload;
    { 输出限制在Min..Max之间 }

    function InBound(Value: Integer; Min, Max: Integer): Boolean;
    { 判断整数Value是否在Min和Max之间 }

    procedure Delay(const uDelay: DWORD);
    { 延时 }

    procedure BeepEx(const Freq: WORD = 1200; const Delay: WORD = 1);
    { 在Win9X下让喇叭发声 }

    function GetHzPy(const AHzStr: string): string;
    { 取汉字的拼音 }

    function UpperCaseMoney(const Money: Double): String;
    { 转换为大与金额 }

    function SoundCardExist: Boolean;
    { 声卡是否存在 }

    implementation

    //------------------------------------------------------------------------------
    //窗体类函数
    //------------------------------------------------------------------------------

    function FindFormClass(FormClassName: PChar): TFormClass;
    begin
    Result := TFormClass(GetClass(FormClassName));
    end;

    function HasInstance(FormClassName: PChar): Boolean;
    var
    i: integer;
    begin
    Result:=False;
    for i := Screen.FormCount - 1 downto 0 do begin
    Result := SameText(Screen.Forms[i].ClassName, FormClassName);
    if Result then begin
    TForm(Screen.Forms[i]).BringToFront;
    Break;
    end;
    end;
    end;

    //------------------------------------------------------------------------------
    //公用对话框函数
    //------------------------------------------------------------------------------

    procedure InfoDlg(const Msg: String; ACaption: String = SInformation);
    begin
    Application.MessageBox(PChar(Msg), PChar(ACaption), MB_OK + MB_ICONINFORMATION);
    end;

    procedure ErrorDlg(const Msg: String; ACaption: String = SError);
    begin
    Application.MessageBox(PChar(Msg), PChar(ACaption), MB_OK + MB_ICONERROR);
    end;

    procedure WarningDlg(const Msg: String; ACaption: String = SWarning);
    begin
    Application.MessageBox(PChar(Msg), PChar(ACaption), MB_OK + MB_ICONWARNING);
    end;

    function QueryDlg(const Msg: String; ACaption: String = SQuery): Boolean;
    begin
    Result := Application.MessageBox(PChar(Msg), PChar(ACaption),
    MB_YESNO + MB_ICONQUESTION) = IDYES;
    end;

    function QueryNoDlg(const Msg: string; ACaption: string = SQuery): Boolean;
    begin
    Result := Application.MessageBox(PChar(Msg), PChar(ACaption),
    MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2) = IDYES;
    end;

    function GetAveCharSize(Canvas: TCanvas): TPoint;
    var
    I: Integer;
    Buffer: array[0..51] of Char;
    begin
    for I := 0 to 25 do Buffer[I] := Chr(I + Ord('A'));
    for I := 0 to 25 do Buffer[I + 26] := Chr(I + Ord('a'));
    GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result));
    Result.X := Result.X div 52;
    end;

    function JrInputQuery(const ACaption, APrompt: String; var Value: string): Boolean;
    var
    Form: TForm;
    Prompt: TLabel;
    Edit: TEdit;
    DialogUnits: TPoint;
    ButtonTop, ButtonWidth, ButtonHeight: Integer;
    begin
    Result := False;
    Form := TForm.Create(Application);
    with Form do
    try
    Scaled := False;
    Font.Name := SDefaultFontName;
    Font.Size := SDefaultFontSize;
    Font.Charset := SDefaultFontCharset;
    Canvas.Font := Font;
    DialogUnits := GetAveCharSize(Canvas);
    BorderStyle := bsDialog;
    Caption := ACaption;
    ClientWidth := MulDiv(180, DialogUnits.X, 4);
    ClientHeight := MulDiv(63, DialogUnits.Y, 8);
    Position := poScreenCenter;
    Prompt := TLabel.Create(Form);
    with Prompt do
    begin
    Parent := Form;
    AutoSize := True;
    Left := MulDiv(8, DialogUnits.X, 4);
    Top := MulDiv(8, DialogUnits.Y, 8);
    Caption := APrompt;
    end;
    Edit := TEdit.Create(Form);
    with Edit do
    begin
    Parent := Form;
    Left := Prompt.Left;
    Top := MulDiv(19, DialogUnits.Y, 8);
    Width := MulDiv(164, DialogUnits.X, 4);
    MaxLength := 255;
    Text := Value;
    SelectAll;
    end;
    ButtonTop := MulDiv(41, DialogUnits.Y, 8);
    ButtonWidth := MulDiv(50, DialogUnits.X, 4);
    ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
    with TButton.Create(Form) do
    begin
    Parent := Form;
    Caption := SMsgDlgOK;
    ModalResult := mrOk;
    Default := True;
    SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth,
    ButtonHeight);
    end;
    with TButton.Create(Form) do
    begin
    Parent := Form;
    Caption := SMsgDlgCancel;
    ModalResult := mrCancel;
    Cancel := True;
    SetBounds(MulDiv(92, DialogUnits.X, 4), ButtonTop, ButtonWidth,
    ButtonHeight);
    end;
    if ShowModal = mrOk then
    begin
    Value := Edit.Text;
    Result := True;
    end;
    finally
    Form.Free;
    end;
    end;

    function JrInputBox(const ACaption, APrompt, ADefault: string): String;
    begin
    Result := ADefault;
    JrInputQuery(ACaption, APrompt, Result);
    end;

    //------------------------------------------------------------------------------
    //扩展文件目录操作函数
    //------------------------------------------------------------------------------

    procedure RunFile(const FileName: String; Handle: THandle = 0; Param: string = '');
    begin
    ShellExecute(Handle, nil, PChar(FileName), PChar(Param), nil, SW_SHOWNORMAL);
    end;

    function AppPath: string;
    begin
    Result := ExtractFilePath(Application.ExeName);
    end;

    const
    HKLM_CURRENT_VERSION_WINDOWS = 'SoftwareMicrosoftWindowsCurrentVersion';

    function RelativeKey(const Key: string): PChar;
    begin
    Result := PChar(Key);
    if (Key <> '') and (Key[1] = '') then
    Inc(Result);
    end;

    function RegReadStringDef(const RootKey: HKEY; const Key, Name, Def: string): string;
    var
    RegKey: HKEY;
    Size: DWORD;
    StrVal: string;
    RegKind: DWORD;
    begin
    Result := Def;
    if RegOpenKeyEx(RootKey, RelativeKey(Key), 0, KEY_READ, RegKey) = ERROR_SUCCESS then
    begin
    RegKind := 0;
    Size := 0;
    if RegQueryValueEx(RegKey, PChar(Name), nil, @RegKind, nil, @Size) = ERROR_SUCCESS then
    if RegKind in [REG_SZ, REG_EXPAND_SZ] then
    begin
    SetLength(StrVal, Size);
    if RegQueryValueEx(RegKey, PChar(Name), nil, @RegKind, PByte(StrVal), @Size) = ERROR_SUCCESS then
    begin
    SetLength(StrVal, StrLen(PChar(StrVal)));
    Result := StrVal;
    end;
    end;
    RegCloseKey(RegKey);
    end;
    end;

    procedure StrResetLength(var S: AnsiString);
    begin
    SetLength(S, StrLen(PChar(S)));
    end;

    function GetProgramFilesDir: string;
    begin
    Result := RegReadStringDef(HKEY_LOCAL_MACHINE, HKLM_CURRENT_VERSION_WINDOWS, 'ProgramFilesDir', '');
    end;

    function GetWindowsDir: string;
    var
    Required: Cardinal;
    begin
    Result := '';
    Required := GetWindowsDirectory(nil, 0);
    if Required <> 0 then
    begin
    SetLength(Result, Required);
    GetWindowsDirectory(PChar(Result), Required);
    StrResetLength(Result);
    end;
    end;

    function GetWindowsTempPath: string;
    var
    Required: Cardinal;
    begin
    Result := '';
    Required := GetTempPath(0, nil);
    if Required <> 0 then
    begin
    SetLength(Result, Required);
    GetTempPath(Required, PChar(Result));
    StrResetLength(Result);
    end;
    end;

    function GetSystemDir: string;
    var
    Required: Cardinal;
    begin
    Result := '';
    Required := GetSystemDirectory(nil, 0);
    if Required <> 0 then
    begin
    SetLength(Result, Required);
    GetSystemDirectory(PChar(Result), Required);
    StrResetLength(Result);
    end;
    end;

    //------------------------------------------------------------------------------
    //扩展字符串操作函数
    //------------------------------------------------------------------------------

    function InStr(const sShort: string; const sLong: string): Boolean;
    var
    s1, s2: string;
    begin
    s1 := LowerCase(sShort);
    s2 := LowerCase(sLong);
    Result := Pos(s1, s2) > 0;
    end;

    function IntToStrSp(Value: Integer; SpLen: Integer = 3; Sp: Char = ','): string;
    var
    s: string;
    i, j: Integer;
    begin
    s := IntToStr(Value);
    Result := '';
    j := 0;
    for i := Length(s) downto 1 do
    begin
    Result := s[i] + Result;
    Inc(j);
    if ((j mod SpLen) = 0) and (i <> 1) then Result := Sp + Result;
    end;
    end;

    function ByteToBin(Value: Byte): string;
    const
    V: Byte = 1;
    var
    i: Integer;
    begin
    for i := 7 downto 0 do
    if (V shl i) and Value <> 0 then
    Result := Result + '1'
    else
    Result := Result + '0';
    end;

    function StrRight(Str: string; Len: Integer): string;
    begin
    if Len >= Length(Str) then
    Result := Str
    else
    Result := Copy(Str, Length(Str) - Len + 1, Len);
    end;

    function StrLeft(Str: string; Len: Integer): string;
    begin
    if Len >= Length(Str) then
    Result := Str
    else
    Result := Copy(Str, 1, Len);
    end;

    function Spc(Len: Integer): string;
    begin
    SetLength(Result, Len);
    FillChar(PChar(Result)^, Len, ' ');
    end;

    procedure SwapStr(var s1, s2: string);
    var
    tempstr: string;
    begin
    tempstr := s1;
    s1 := s2;
    s2 := tempstr;
    end;

    //------------------------------------------------------------------------------
    // 扩展日期时间操作函数
    //------------------------------------------------------------------------------

    function GetYear(Date: TDate): Word;
    var
    m, d: WORD;
    begin
    DecodeDate(Date, Result, m, d);
    end;

    function GetMonth(Date: TDate): Word;
    var
    y, d: WORD;
    begin
    DecodeDate(Date, y, Result, d);
    end;

    function GetDay(Date: TDate): Word;
    var
    y, m: WORD;
    begin
    DecodeDate(Date, y, m, Result);
    end;

    function GetHour(Time: TTime): Word;
    var
    h, m, s, ms: WORD;
    begin
    DecodeTime(Time, Result, m, s, ms);
    end;

    function GetMinute(Time: TTime): Word;
    var
    h, s, ms: WORD;
    begin
    DecodeTime(Time, h, Result, s, ms);
    end;

    function GetSecond(Time: TTime): Word;
    var
    h, m, ms: WORD;
    begin
    DecodeTime(Time, h, m, Result, ms);
    end;

    function GetMSecond(Time: TTime): Word;
    var
    h, m, s: WORD;
    begin
    DecodeTime(Time, h, m, s, Result);
    end;

    //------------------------------------------------------------------------------
    // 位操作函数
    //------------------------------------------------------------------------------

    procedure SetBit(var Value: Byte; Bit: TByteBit; IsSet: Boolean); overload;
    begin
    if IsSet then
    Value := Value or (1 shl Bit) else
    Value := Value and not(1 shl Bit);
    end;

    procedure SetBit(var Value: WORD; Bit: TWordBit; IsSet: Boolean); overload;
    begin
    if IsSet then
    Value := Value or (1 shl Bit) else
    Value := Value and not(1 shl Bit);
    end;

    procedure SetBit(var Value: DWORD; Bit: TDWordBit; IsSet: Boolean); overload;
    begin
    if IsSet then
    Value := Value or (1 shl Bit) else
    Value := Value and not(1 shl Bit);
    end;

    function GetBit(Value: Byte; Bit: TByteBit): Boolean; overload;
    begin
    Result := Value and (1 shl Bit) <> 0;
    end;

    function GetBit(Value: WORD; Bit: TWordBit): Boolean; overload;
    begin
    Result := Value and (1 shl Bit) <> 0;
    end;

    function GetBit(Value: DWORD; Bit: TDWordBit): Boolean; overload;
    begin
    Result := Value and (1 shl Bit) <> 0;
    end;

    //------------------------------------------------------------------------------
    // 系统功能函数
    //------------------------------------------------------------------------------

    procedure ChangeFocus(Handle: THandle; Forword: Boolean = False);
    begin
    if ForWord then
    PostMessage(Handle, WM_NEXTDLGCTL, 1, 0)
    else
    PostMessage(Handle, WM_NEXTDLGCTL, 0, 0);
    end;

    procedure MoveMouseIntoControl(AWinControl: TControl);
    var
    rtControl: TRect;
    begin
    rtControl := AWinControl.BoundsRect;
    MapWindowPoints(AWinControl.Parent.Handle, 0, rtControl, 2);
    SetCursorPos(rtControl.Left + (rtControl.Right - rtControl.Left) div 2,
    rtControl.Top + (rtControl.Bottom - rtControl.Top) div 2);
    end;

    procedure AddComboBoxTextToItems(ComboBox: TComboBox; MaxItemsCount: Integer = 10);
    begin
    if (ComboBox.Text <> '') and (ComboBox.Items.IndexOf(ComboBox.Text) < 0) then
    begin
    ComboBox.Items.Insert(0, ComboBox.Text);
    while (MaxItemsCount > 1) and (ComboBox.Items.Count > MaxItemsCount) do
    ComboBox.Items.Delete(ComboBox.Items.Count - 1);
    end;
    end;

    function DynamicResolution(x, y: WORD): Boolean;
    var
    lpDevMode: TDeviceMode;
    begin
    Result := EnumDisplaySettings(nil, 0, lpDevMode);
    if Result then
    begin
    lpDevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
    lpDevMode.dmPelsWidth := x;
    lpDevMode.dmPelsHeight := y;
    Result := ChangeDisplaySettings(lpDevMode, 0) = DISP_CHANGE_SUCCESSFUL;
    end;
    end;

    procedure StayOnTop(Handle: HWND; OnTop: Boolean);
    const
    csOnTop: array[Boolean] of HWND = (HWND_NOTOPMOST, HWND_TOPMOST);
    begin
    SetWindowPos(Handle, csOnTop[OnTop], 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
    end;

    var
    WndLong: Integer;

    procedure SetHidden(Hide: Boolean);
    begin
    ShowWindow(Application.Handle, SW_HIDE);
    if Hide then
    SetWindowLong(Application.Handle, GWL_EXSTYLE,
    WndLong or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW or WS_EX_TOPMOST)
    else
    SetWindowLong(Application.Handle, GWL_EXSTYLE, WndLong);
    ShowWindow(Application.Handle, SW_SHOW);
    end;

    const
    csWndShowFlag: array[Boolean] of DWORD = (SW_HIDE, SW_RESTORE);

    procedure SetTaskBarVisible(Visible: Boolean);
    var
    wndHandle: THandle;
    begin
    wndHandle := FindWindow('Shell_TrayWnd', nil);
    ShowWindow(wndHandle, csWndShowFlag[Visible]);
    end;

    procedure SetDesktopVisible(Visible: Boolean);
    var
    hDesktop: THandle;
    begin
    hDesktop := FindWindow('Progman', nil);
    ShowWindow(hDesktop, csWndShowFlag[Visible]);
    end;

    function GetWorkRect: TRect;
    begin
    SystemParametersInfo(SPI_GETWORKAREA, 0, @Result, 0)
    end;

    procedure BeginWait;
    begin
    Screen.Cursor := crHourGlass;
    end;

    procedure EndWait;
    begin
    Screen.Cursor := crDefault;
    end;

    function CheckWindows9598: Boolean;
    var
    V: TOSVersionInfo;
    begin
    V.dwOSVersionInfoSize := SizeOf(V);
    Result := False;
    if not GetVersionEx(V) then Exit;
    if V.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS then
    Result := True;
    end;

    function GetOSString: string;
    var
    OSPlatform: string;
    BuildNumber: Integer;
    begin
    Result := 'Unknown Windows Version';
    OSPlatform := 'Windows';
    BuildNumber := 0;

    case Win32Platform of
    VER_PLATFORM_WIN32_WINDOWS:
    begin
    BuildNumber := Win32BuildNumber and $0000FFFF;
    case Win32MinorVersion of
    0..9:
    begin
    if Trim(Win32CSDVersion) = 'B' then
    OSPlatform := 'Windows 95 OSR2'
    else
    OSPlatform := 'Windows 95';
    end;
    10..89:
    begin
    if Trim(Win32CSDVersion) = 'A' then
    OSPlatform := 'Windows 98'
    else
    OSPlatform := 'Windows 98 SE';
    end;
    90:
    OSPlatform := 'Windows Millennium';
    end;
    end;
    VER_PLATFORM_WIN32_NT:
    begin
    if Win32MajorVersion in [3, 4] then
    OSPlatform := 'Windows NT'
    else if Win32MajorVersion = 5 then
    begin
    case Win32MinorVersion of
    0: OSPlatform := 'Windows 2000';
    1: OSPlatform := 'Windows XP';
    end;
    end;
    BuildNumber := Win32BuildNumber;
    end;
    VER_PLATFORM_WIN32s:
    begin
    OSPlatform := 'Win32s';
    BuildNumber := Win32BuildNumber;
    end;
    end;
    if (Win32Platform = VER_PLATFORM_WIN32_WINDOWS) or
    (Win32Platform = VER_PLATFORM_WIN32_NT) then
    begin
    if Trim(Win32CSDVersion) = '' then
    Result := Format('%s %d.%d (Build %d)', [OSPlatform, Win32MajorVersion,
    Win32MinorVersion, BuildNumber])
    else
    Result := Format('%s %d.%d (Build %d: %s)', [OSPlatform, Win32MajorVersion,
    Win32MinorVersion, BuildNumber, Win32CSDVersion]);
    end
    else
    Result := Format('%s %d.%d', [OSPlatform, Win32MajorVersion, Win32MinorVersion])
    end;

    function GetComputeNameStr : string;
    var
    dwBuff : DWORD;
    CmpName : array [0..255] of Char;
    begin
    Result := '';
    dwBuff := 256;
    FillChar(CmpName, SizeOf(CmpName), 0);
    if GetComputerName(CmpName, dwBuff) then
    Result := StrPas(CmpName);
    end;

    function GetLocalUserName: string;
    var
    Count: DWORD;
    begin
    Count := 256 + 1; // UNLEN + 1
    // set buffer size to 256 + 2 characters
    SetLength(Result, Count);
    if GetUserName(PChar(Result), Count) then
    StrResetLength(Result)
    else
    Result := '';
    end;

    function GetLocalIP: String;
    type
    TaPInAddr = array [0..10] of PInAddr;
    PaPInAddr = ^TaPInAddr;
    var
    phe : PHostEnt;
    pptr : PaPInAddr;
    Buffer : array [0..63] of char;
    I : Integer;
    GInitData : TWSADATA;

    begin
    WSAStartup($101, GInitData);
    Result := '';
    GetHostName(Buffer, SizeOf(Buffer));
    phe :=GetHostByName(buffer);
    if phe = nil then Exit;
    pptr := PaPInAddr(Phe^.h_addr_list);
    I := 0;
    while pptr^[I] <> nil do begin
    result:=StrPas(inet_ntoa(pptr^[I]^));
    Inc(I);
    end;
    WSACleanup;
    end;

    //------------------------------------------------------------------------------
    // 其它过程
    //------------------------------------------------------------------------------

    function TrimInt(Value, Min, Max: Integer): Integer; overload;
    begin
    if Value > Max then
    Result := Max
    else if Value < Min then
    Result := Min
    else
    Result := Value;
    end;

    function InBound(Value: Integer; Min, Max: Integer): Boolean;
    begin
    Result := (Value >= Min) and (Value <= Max);
    end;

    procedure Delay(const uDelay: DWORD);
    var
    n: DWORD;
    begin
    n := GetTickCount;
    while ((GetTickCount - n) <= uDelay) do
    Application.ProcessMessages;
    end;

    procedure BeepEx(const Freq: WORD = 1200; const Delay: WORD = 1);
    const
    FREQ_SCALE = $1193180;
    var
    Temp: WORD;
    begin
    Temp := FREQ_SCALE div Freq;
    asm
    in al,61h;
    or al,3;
    out 61h,al;
    mov al,$b6;
    out 43h,al;
    mov ax,temp;
    out 42h,al;
    mov al,ah;
    out 42h,al;
    end;
    Sleep(Delay);
    asm
    in al,$61;
    and al,$fc;
    out $61,al;
    end;
    end;

    function GetHzPy(const AHzStr: string): string;
    const
    ChinaCode: array[0..25, 0..1] of Integer = ((1601, 1636), (1637, 1832), (1833, 2077),
    (2078, 2273), (2274, 2301), (2302, 2432), (2433, 2593), (2594, 2786), (9999, 0000),
    (2787, 3105), (3106, 3211), (3212, 3471), (3472, 3634), (3635, 3722), (3723, 3729),
    (3730, 3857), (3858, 4026), (4027, 4085), (4086, 4389), (4390, 4557), (9999, 0000),
    (9999, 0000), (4558, 4683), (4684, 4924), (4925, 5248), (5249, 5589));
    var
    i, j, HzOrd: Integer;
    begin
    i := 1;
    while i <= Length(AHzStr) do
    begin
    if (AHzStr[i] >= #160) and (AHzStr[i + 1] >= #160) then
    begin
    HzOrd := (Ord(AHzStr[i]) - 160) * 100 + Ord(AHzStr[i + 1]) - 160;
    for j := 0 to 25 do
    begin
    if (HzOrd >= ChinaCode[j][0]) and (HzOrd <= ChinaCode[j][1]) then
    begin
    Result := Result + Char(Byte('A') + j);
    Break;
    end;
    end;
    Inc(i);
    end else Result := Result + AHzStr[i];
    Inc(i);
    end;
    end;

    function UpperCaseMoney(const Money: Double): String;
    var
    tmp1,rr :string;
    l,i,j,k:integer;
    r: Double;
    const
    n1: array[0..9] of string = ('零', '壹', '贰', '叁', '肆',
    '伍', '陆', '柒', '捌', '玖');
    n2: array[0..3] of string = ('', '拾' ,'佰', '仟');
    n3: array[0..2] of string = ('元', '万', '亿');
    begin
    r:=Money;
    tmp1:=FormatFloat('#.00',r);
    l:=length(tmp1);
    rr:='';
    if strtoint(tmp1[l])<>0 then begin
    rr:='分';
    rr:=n1[strtoint(tmp1[l])]+rr;
    end;

    if strtoint(tmp1[l-1])<>0 then begin
    rr:='角'+rr;
    rr:=n1[strtoint(tmp1[l-1])]+rr;
    end;

    i:=l-3;
    j:=0;k:=0;
    while i>0 do begin
    if j mod 4=0 then begin
    rr:=n3[k]+rr;
    inc(k);if k>2 then k:=1;
    j:=0;
    end;
    if strtoint(tmp1[i])<>0 then
    rr:=n2[j]+rr;
    rr:=n1[strtoint(tmp1[i])]+rr;
    inc(j);
    dec(i);
    end;

    while pos('零零',rr)>0 do
    rr:= stringreplace(rr,'零零','零',[rfReplaceAll]);
    rr:=stringreplace(rr,'零亿','亿零',[rfReplaceAll]);
    while pos('零零',rr)>0 do
    rr:= stringreplace(rr,'零零','零',[rfReplaceAll]);
    rr:=stringreplace(rr,'零万','万零',[rfReplaceAll]);
    while pos('零零',rr)>0 do
    rr:= stringreplace(rr,'零零','零',[rfReplaceAll]);
    rr:=stringreplace(rr,'零元','元零',[rfReplaceAll]);
    while pos('零零',rr)>0 do
    rr:= stringreplace(rr,'零零','零',[rfReplaceAll]);
    rr:=stringreplace(rr,'亿万','亿',[rfReplaceAll]);

    if copy(rr,length(rr)-1,2)='零' then
    rr:=copy(rr,1,length(rr)-2);

    result:=rr;
    end;

    function SoundCardExist: Boolean;
    begin
    Result := WaveOutGetNumDevs > 0;
    end;

    initialization
    WndLong := GetWindowLong(Application.Handle, GWL_EXSTYLE);

    end.

  • 相关阅读:
    POJ2407:Relatives(欧拉函数) java程序员
    POJ1664:放苹果(搜索) java程序员
    关于android中数据库的创建以及基础的增删改查的相应操作
    家庭版记账本app开发进度。开发到现在整个app只剩下关于图表的设计了,具体功能如下
    在tap的碎片上与活动进行绑定实现点击事件(日期时间选择以及按钮跳转时间)
    使用tap、Fragment等相关相关知识点。实现类似微信的界面
    android学习相关intent和fragment的先关知识点
    家庭记账本app进度之关于tap的相关操作1
    家庭版记账本app进度之关于listview显示账单,并为其添加点击事件
    家庭版记账本app进度之编辑框组件
  • 原文地址:https://www.cnblogs.com/blogpro/p/11446869.html
Copyright © 2020-2023  润新知