delphi的一个公用函数库
delphi的一个公用函数库
{**********************************************
*** Name: PublicFunc;
*** Author: lyz 2004-3-17;
***
*** Function: 公共函数;
**********************************************}
unit PublicFunc;
interface
uses
Windows, Math , SysUtils, Classes ,ShlObj, ActiveX, ComObj, Registry, Db,
Controls, Dialogs, XMLDoc, XMLIntf;
type
{ TStream seek origins }
TFolderNo = (Desktop, StartMenu, Programs);
type
TCPUID = array[..] of Longint;
TVendor = array [..] of char;
TObjList=class (TList)
public
destructor Destroy; override;
procedure Clear; override;
procedure SaveToStream(stream: TStream); virtual;
procedure LoadFromStream(stream: TStream); virtual;
end;
var
_DecNum: Integer;
_RoundValue: Double;
_EquMinValue: Double;
_ZeroMinValue: Double;
//*************LYZ
function StrIsEmpty (s: String): Boolean;
//procedure StringWrite (f: file; s: String);
//procedure StringRead (f: file; s: String);
function SLtrim (s: String): String;
function STrim (s: String): String;
function SAllTrim (s: String): String;
function SRemoveSpace (s: String): String;//除掉空格
procedure SSplitString (s: String; s1: String; s2: String);
procedure SSplitString1 (s: String; s1: String; s2: String);
function SIntToStrFix (n: Integer; cnt: Integer): String;
function ARound (v: Double): Double; //求整
function ARoundN (v: Double; n: Integer): Double; //保留几位小数
function AEqu (v1: Double; v2: Double): Boolean; //两个是否相等
function ASmall (v1: Double; v2: Double): Boolean; file://v1 < v2
function ABig (v1: Double; v2: Double): Boolean; file://v1 > v2
function AIsZero (v1: Double): Boolean; file://判断是否为零
function AMax (a: Double; b: Double): Double; file://返回大值
function AMin (a: Double; b: Double): Double; file://返回小值
procedure ASwap (p1: Double; p2: Double); file://交换
function IMax (a: Integer; b: Integer): Integer; file://返回大值
function IMin (a: Integer; b: Integer): Integer; file://返回小值
procedure ISwap (p1: Integer; p2: Integer); file://交换
function RealToStr (v: Double): String; file://Double转换成String
function RealToStr1 (v: Double): String;
function StrToReal (s: String): Double; file://String转换成Double
function RealStr (v: Double): String; file://Double转换成String
function RealStrN (v: Double; dec: Integer): String; file://保留几位小数 Double转换成String
function RealDateN(v: Double): String; file://日期转化成字符
function IsDate(const str: string): Boolean;
function GetDate(const str: string): TDateTime; file://字符转化成日期
function RealStr1 (v: Double; len: Integer; dec: Integer): String;
function RealStr2 (v: Double; len: Integer; dec: Integer): String;
function RealStr3 (v: Double; len: Integer; dec: Integer): String;
function RealStr4 (v: Double; len: Integer; dec: Integer): String;
function StrInt (s: String): Integer; file://string 转换成 integer
file://xml
procedure WriteXMLValue(XML : IXMLNode; Const mc : string; Var Val: string);
procedure ReadXMLValue(XML : IXMLNode; Const mc : string; Var Val: string);
file://以下是保存为数据流
procedure WriteToStream (stream: TStream; const Number: Integer); overload;
procedure WriteToStream (stream: TStream; const Number: Int64); overload;
procedure WriteToStream (stream: TStream; const v: Cardinal); overload;
procedure WriteToStream (stream: TStream; const v: Word); overload;
procedure WriteToStream (stream: TStream; const Filestr: String); overload;
procedure WriteToStream (stream: TStream; const v: Double); overload;
procedure WriteToStream (stream: TStream; const Bool: Boolean); overload;
procedure ReadFromStream (stream: TStream; var v: Cardinal); overload;
procedure WriteToStream (stream: TStream; const Number: Extended); overload;
procedure ReadFromStream (stream: TStream; var v: Extended); overload;
procedure ReadFromStream (stream: TStream; var Number: Integer); overload;
procedure ReadFromStream (stream: TStream; var Number: Int64); overload;
procedure ReadFromStream (stream: TStream; var v: Word); overload;
procedure ReadFromStream (stream: TStream; var Filestr: String); overload;
procedure ReadFromStream (stream: TStream; var v: Double); overload;
procedure ReadFromStream (stream: TStream; var Bool: Boolean); overload;
procedure WriteToStream (stream: TStream; const sList: TStringList); overload;
procedure ReadFromStream (stream: TStream; var sList: TStringList); overload;
procedure WriteToStream (stream: TStream; const iary: array of Integer); overload;
procedure ReadFromStream (stream: TStream; var iary: array of Integer); overload;
function StrLike (sou: String; key: String): Boolean; file://sou中是否包括key
function SRight (s: String; n: Integer): String; file://取右边多少个字符
procedure LoadFileList (Path: String; slist: TStrings; noPath: Boolean);
function TimeTicket: Longint;
function MonthOfDate (date: TDateTime): Integer;
function DayOfDate (date: TDateTime): Integer;
function YearOfDate (date: TDateTime): Integer;
function GetSplitWord (s: String; splitc: Char): String;
function HexToInt (s: String): Integer; file://16进制转换成10进制
function TransStrByTable (sou: String; ori: TStringList; des: TStringList): String;
procedure LoadTransTable (fn: String; sou: TStringList; tag: TStringList);
function MakeFilePath (s: String): String;
function RemoveNote (s: String): String;
function MakePath (path: String): String;
function Blone (tj: String; v: String): Boolean;
function CodeStr (s: String): String;
function DeCodeStr (s: String): String;
function GetValueFromStr (vname: String; s: String; txt: String): Boolean;
function GetParaList (txt: String; ss: TStringList): Boolean;
function SReplace (txt: String; sou: String; tag: String): String;
Function GetOSInfo: String; file://NT 还是 Windows 98?取得当前操作平台
function GetCurrentUserName : string; file://获取当前Windows用户的登录名
Procedure SetLink(FolderNo: TFolderNo; ACmdFile, Parameter, LinkName: string);//创建快捷方式
function Myrandom(Num: Integer): integer;//一个利用系统时间产生随机数的程序该随机数的范围是0到Num
function GetMouseHwndAndClassName(Sender: TObject): string;
function GetMousePosHwndAndClassName(Sender: TPoint): string; file://获取当前鼠标位置的类名和句柄
function GetIdeDiskSerialNumber : String; file://取Ide硬盘序列号函数
file://得到CpuID号
function GetCPUID : TCPUID; assembler; register;
function GetCPUVendor : TVendor; assembler; register;
function GetCPUIDStr: String;
{日期型字段显示过程,在OnGetText事件中调用}
procedure DateFieldGetText(Sender: TField; var Text: String);
{日期型字段输入判断函数,在OnSetText事件中调用}
function DateFieldSetText(Sender: TField; const Text: String):Boolean;
file://不能输入字符
function CheckNullValue(var Key: Char): Boolean;
{判断输入的字符是否是数字}
function CheckInputNum(const IsInteger: Boolean; AStr: string; var Key: Char): Boolean;
file://得到下一编号
function GetNextStrId(const PreId: string): string; // preId := 'LX000000';
implementation
file://得到下一编号
function GetNextStrId(const PreId: string): string; // preId := 'LX000000';
var
I,n,n1: Integer;
s,s1: string;
c: char;
begin
n := Length(PreId);
n1 := ;
for I := n downto do begin
c := PreId[I];
if (Ord(c) >= ) and (Ord(c) <= ) then begin
n1 := I;
Break;
end;
end;
s := Copy(PreId, , n1);
s1 := Copy(PreId, n1 + , );
s1 := IntToStr(StrInt(s1) + );
result := s1;
for I := to n - n1 - Length(s1) do
Result := '' + Result;
result := s + Result;
end;
file://不能输入字符
function CheckNullValue(var Key: Char): Boolean;
const
ControlKeySet = [Char(#)];
begin
Key := #;
Result := True;
end;
{判断输入的字符是否是数字}
function CheckInputNum(const IsInteger: Boolean; AStr: string; var Key: Char): Boolean;
const
NumberSet = ['' .. '', '.', '-'];
ControlKeySet = [Char(#), Char(#)];
begin
if Key in ControlKeySet then begin
Result := True;
Exit;
end;
if not (Key in NumberSet) then Key := #;
if (Key = '.') and ((Length(AStr) = ) or (Pos('.', AStr) > )) then
Key := #;
file://不能前两个同时为0
if (Length(AStr) = ) and (AStr[] = '') and (Key = '') then Key := #;
file://不能有多个负号
if (Pos('-', AStr) >= ) and (Key = '-') then Key := #;
if IsInteger then begin
if key = '.' then Key := #;
// if (Length(AStr) = 1) and (AStr[1] = '0') or (Key = '.') then Key := #0;
end;
Result := Key <> #;
end;
{日期型字段显示过程,在OnGetText事件中调用}
procedure DateFieldGetText(Sender: TField; var Text: String);
var
dDate: TDate;
wYear,wMonth,wDay: Word;
aryTestYMD: Array [..] of Char ;{测试输入掩码用临时数组}
iYMD: Integer;
begin
iYMD := ;
dDate:= Sender.AsDateTime;
DecodeDate(dDate,wYear,wMonth,wDay);
{测试输入掩码所包含的格式.}
aryTestYMD:= '年';
if StrScan(PChar(Sender.EditMask), aryTestYMD[]) <> nil then iYMD:= ;
aryTestYMD:= '月';
if StrScan(PChar(Sender.EditMask), aryTestYMD[]) <> nil then iYMD:= ;
aryTestYMD:= '日';
if StrScan(PChar(Sender.EditMask), aryTestYMD[]) <> nil then iYMD:= ;
case iYMD of
:{输入掩码为:”yyyy年”的格式.}
Text:= IntToStr(wYear) + '年';
: {输入掩码为:”yyyy年mm月”的格式.}
Text:= IntToStr(wYear) + '年' + IntToStr(wMonth) + '月';
: {输入掩码为:”yyyy年mm月dd日”的格式.}
Text:= IntToStr(wYear) + '年' + IntToStr(wMonth) + '月' + IntToStr(wDay) + '日';
else {默认为:”yyyy年mm月dd日”的格式.}
Text:= IntToStr(wYear) + '年' + IntToStr(wMonth) + '月' + IntToStr(wDay) + '日';
end;
end;
{日期型字段输入判断函数,在OnSetText事件中调用}
function DateFieldSetText(Sender: TField; const Text: String):Boolean;
var
dDate: TDate;
sYear,sMonth,sDay: String;
aryTestYMD: Array [..] of Char;
iYMD: Integer;
begin
iYMD := ;
{获得用户输入的日期}
sYear := Copy(Text, , );
sMonth:= Copy(Text, , );
SDay := Copy(Text, , );
{测试输入掩码所包含的格式.}
aryTestYMD := '年';
if StrScan( PChar(Sender.EditMask), aryTestYMD[] ) <> nil then iYMD := ;
aryTestYMD := '月';
if StrScan( PChar(Sender.EditMask), aryTestYMD[] ) <> nil then iYMD := ;
aryTestYMD := '日';
if StrScan( PChar(Sender.EditMask), aryTestYMD[] ) <> nil then iYMD := ;
{利用Try…Except进行输入的日期转换}
try begin
case iYMD of
: {输入掩码为:”yyyy年”的格式.}
begin
dDate := StrToDate( sYear + '-01-01' );{中文Windows默认的日期格式为:yyyy-mm-dd.下同}
Sender.AsDateTime := dDate;
end;
: {输入掩码为:”yyyy年mm月”的格式.}
begin
dDate := StrToDate( sYear + '-' + sMonth + '-01' );
Sender.AsDateTime:=dDate;
end;
: {输入掩码为:”yyyy年mm月dd日”的格式.}
begin
dDate := StrToDate( sYear + '-' + sMonth + '-' + sDay );
Sender.AsDateTime := dDate;
end;
else {默认为:”yyyy年mm月dd日”的格式.}
begin
dDate := StrToDate( sYear + '-' + sMonth + '-' + sDay );
Sender.AsDateTime := dDate;
end;
end;
DateFieldSetText := True;
end;
except
{日期转换出错}
begin
showmessage( PChar ( Text + '不是有效的日期!'));
DateFieldSetText := False;
end;
end;
end;
function GetMouseHwndAndClassName(Sender: TObject): string;
var
rPos: TPoint;
begin
Result := '';
if boolean(GetCursorPos(rPos)) then Result := GetMousePosHwndAndClassName(rPos);
end;
function GetMousePosHwndAndClassName(Sender: TPoint): string;
var
hWnd: THandle;
aName: array [..] of char;
tmpstr: string;
begin
tmpstr := '';
hWnd := WindowFromPoint(Sender);
tmpstr := 'Handle : ' + IntToStr(hWnd);
if boolean(GetClassName(hWnd, aName, )) then
tmpstr := 'ClassName : ' + string(aName)
else
tmpstr := 'ClassName : not found';
Result := tmpstr;
end;
function Myrandom(Num: Integer): integer;
var
T: _SystemTime;
X: integer;
I: integer;
begin
Result := ;
Randomize;
If Num = then Exit;
GetSystemTime(T);
X := Trunc(T.wMilliseconds/) * T.wSecond * ;
X := X + random();
if X < then X := -X;
X := Random(X);
X := X mod num;
for I := to X do
X := Random(Num);
Result := X;
end;
function GetCurrentUserName : string;
const
cnMaxUserNameLen = ;
var
sUserName : string;
dwUserNameLen : Dword;
begin
dwUserNameLen := cnMaxUserNameLen-;
SetLength( sUserName, cnMaxUserNameLen );
GetUserName(Pchar( sUserName ), dwUserNameLen );
SetLength( sUserName, dwUserNameLen );
Result := sUserName;
end;
Procedure SetLink(FolderNo: TFolderNo; ACmdFile, Parameter, LinkName: string);
var
MyObject : Iunknown;
MySLink : IShellLink;
MyPFile : IPersistFile;
FileName : string;
Directory : string;
WFileName : WideString;
MyReg : TRegIniFile;
tmpFolderNo : string;
begin
if FolderNo = Desktop then tmpFolderNo:= 'Desktop';
if FolderNo = StartMenu then tmpFolderNo:= 'StartMenu';
if FolderNo = Programs then tmpFolderNo:= 'Programs';
MyObject := CreateComObject(CLSID_ShellLink);
MySLink := MyObject as IShellLink;
MyPFile := MyObject as IPersistFile;
FileName := ACmdFile;
with MySLink do
begin
SetArguments(Pchar(Parameter));
SetPath(Pchar(FileName));
SetWorkingDirectory(Pchar(ExtractFilePath(FileName)));
end;
MyReg := TRegIniFile.Create('Software/MicroSoft/Windows/CurrentVersion/Explorer');
Directory := MyReg.ReadString('Shell Folders', tmpFolderNo,'');
file://CreateDir(Directory);
WFileName := Directory + '/' + LinkName + '.lnk';
MyPFile.Save(PWChar(WFileName),False);
MyReg.Free;
end;
Function GetOSInfo: String;
var
VI: TOSVersionInfo;
begin
Result:= '';
VI.dwOSVersionInfoSize := SizeOf(VI);
GetVersionEx(VI);//取得正在运行的Windeows和Win32操作系统的版本
// VI.dwPlatformId
Result:= Result + Format('%d%d%d',[VI.dwMajorVersion,VI.dwMinorVersion,VI.dwBuildNumber]);
Result:= Result + GetIdeDiskSerialNumber + GetCPUIDStr;
case Win32Platform of
VER_PLATFORM_WIN32_WINDOWS: Result := Result + 'Windows 95/98';
VER_PLATFORM_WIN32_NT: Result := Result + 'Windows NT';
else
Result := Result + 'Windows32';
end;
end;
function GetCPUID : TCPUID; assembler; register;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Resukt}
MOV EAX,
DW $A20F {CPUID Command}
STOSD {CPUID[1]}
MOV EAX,EBX
STOSD {CPUID[2]}
MOV EAX,ECX
STOSD {CPUID[3]}
MOV EAX,EDX
STOSD {CPUID[4]}
POP EDI {Restore registers}
POP EBX
end;
function GetCPUVendor : TVendor; assembler; register;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Result (TVendor)}
MOV EAX,
DW $A20F {CPUID Command}
MOV EAX,EBX
XCHG EBX,ECX {save ECX result}
MOV ECX,
@:
STOSB
SHR EAX,
LOOP @
MOV EAX,EDX
MOV ECX,
@:
STOSB
SHR EAX,
LOOP @
MOV EAX,EBX
MOV ECX,
@:
STOSB
SHR EAX,
LOOP @
POP EDI {Restore registers}
POP EBX
end;
function GetCPUIDStr: String;
var
CPUID : TCPUID;
I : Integer;
S : TVendor;
begin
Result := '';
for I := Low(CPUID) to High(CPUID) do CPUID[I] := -;
CPUID := GetCPUID;
Result := Result + IntToHex(CPUID[],);
Result := Result + IntToHex(CPUID[],);
Result := Result + IntToHex(CPUID[],);
Result := Result + IntToHex(CPUID[],);
S := GetCPUVendor;
Result := Result + S;
end;
function GetIdeDiskSerialNumber : String; file://取Ide硬盘序列号函数
type
TSrbIoControl = packed record
HeaderLength : ULONG;
Signature : Array[..] of Char;
Timeout : ULONG;
ControlCode : ULONG;
ReturnCode : ULONG;
Length : ULONG;
end;
SRB_IO_CONTROL = TSrbIoControl;
PSrbIoControl = ^TSrbIoControl;
TIDERegs = packed record
bFeaturesReg : Byte; // Used for specifying SMART "commands".
bSectorCountReg : Byte; // IDE sector count register
bSectorNumberReg : Byte; // IDE sector number register
bCylLowReg : Byte; // IDE low order cylinder value
bCylHighReg : Byte; // IDE high order cylinder value
bDriveHeadReg : Byte; // IDE drive/head register
bCommandReg : Byte; // Actual IDE command.
bReserved : Byte; // reserved. Must be zero.
end;
IDEREGS = TIDERegs;
PIDERegs = ^TIDERegs;
TSendCmdInParams = packed record
cBufferSize : DWORD;
irDriveRegs : TIDERegs;
bDriveNumber : Byte;
bReserved : Array[..] of Byte;
dwReserved : Array[..] of DWORD;
bBuffer : Array[..] of Byte;
end;
SENDCMDINPARAMS = TSendCmdInParams;
PSendCmdInParams = ^TSendCmdInParams;
TIdSector = packed record
wGenConfig : Word;
wNumCyls : Word;
wReserved : Word;
wNumHeads : Word;
wBytesPerTrack : Word;
wBytesPerSector : Word;
wSectorsPerTrack : Word;
wVendorUnique : Array[..] of Word;
sSerialNumber : Array[..] of Char;
wBufferType : Word;
wBufferSize : Word;
wECCSize : Word;
sFirmwareRev : Array[..] of Char;
sModelNumber : Array[..] of Char;
wMoreVendorUnique : Word;
wDoubleWordIO : Word;
wCapabilities : Word;
wReserved1 : Word;
wPIOTiming : Word;
wDMATiming : Word;
wBS : Word;
wNumCurrentCyls : Word;
wNumCurrentHeads : Word;
wNumCurrentSectorsPerTrack : Word;
ulCurrentSectorCapacity : ULONG;
wMultSectorStuff : Word;
ulTotalAddressableSectors : ULONG;
wSingleWordDMA : Word;
wMultiWordDMA : Word;
bReserved : Array[..] of Byte;
end;
PIdSector = ^TIdSector;
const
IDE_ID_FUNCTION = $EC;
IDENTIFY_BUFFER_SIZE = ;
DFP_RECEIVE_DRIVE_DATA = $0007c088;
IOCTL_SCSI_MINIPORT = $0004d008;
IOCTL_SCSI_MINIPORT_IDENTIFY = $001b0501;
DataSize = sizeof(TSendCmdInParams)-+IDENTIFY_BUFFER_SIZE;
BufferSize = SizeOf(SRB_IO_CONTROL)+DataSize;
W9xBufferSize = IDENTIFY_BUFFER_SIZE+;
var
hDevice : THandle;
cbBytesReturned : DWORD;
pInData : PSendCmdInParams;
pOutData : Pointer; // PSendCmdOutParams
Buffer : Array[..BufferSize-] of Byte;
srbControl : TSrbIoControl absolute Buffer;
procedure ChangeByteOrder( var Data; Size : Integer );
var
ptr : PChar;
i : Integer;
c : Char;
begin
ptr := @Data;
for i := to (Size shr )- do begin
c := ptr^;
ptr^ := (ptr+)^;
(ptr+)^ := c;
Inc(ptr,);
end;
end;
begin
Result := '';
FillChar(Buffer,BufferSize,#);
if Win32Platform=VER_PLATFORM_WIN32_NT then begin // Windows NT, Windows 2000
// Get SCSI port handle
hDevice := CreateFile( '//./Scsi0:',GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,
nil, OPEN_EXISTING, , );
if hDevice=INVALID_HANDLE_VALUE then Exit;
try
srbControl.HeaderLength := SizeOf(SRB_IO_CONTROL);
System.Move('SCSIDISK',srbControl.Signature,);
srbControl.Timeout := ;
srbControl.Length := DataSize;
srbControl.ControlCode := IOCTL_SCSI_MINIPORT_IDENTIFY;
pInData := PSendCmdInParams(PChar(@Buffer) + SizeOf(SRB_IO_CONTROL));
pOutData := pInData;
with pInData^ do begin
cBufferSize := IDENTIFY_BUFFER_SIZE;
bDriveNumber := ;
with irDriveRegs do begin
bFeaturesReg := ;
bSectorCountReg := ;
bSectorNumberReg := ;
bCylLowReg := ;
bCylHighReg := ;
bDriveHeadReg := $A0;
bCommandReg := IDE_ID_FUNCTION;
end;
end;
if not DeviceIoControl( hDevice, IOCTL_SCSI_MINIPORT,
@Buffer, BufferSize, @Buffer, BufferSize,
cbBytesReturned, nil ) then Exit;
finally
CloseHandle(hDevice);
end;
end else begin // Windows 95 OSR2, Windows 98
hDevice := CreateFile( '//./SMARTVSD', , , nil, CREATE_NEW, , );
if hDevice=INVALID_HANDLE_VALUE then Exit;
try
pInData := PSendCmdInParams(@Buffer);
pOutData := @pInData^.bBuffer;
with pInData^ do begin
cBufferSize := IDENTIFY_BUFFER_SIZE;
bDriveNumber := ;
with irDriveRegs do begin
bFeaturesReg := ;
bSectorCountReg := ;
bSectorNumberReg := ;
bCylLowReg := ;
bCylHighReg := ;
bDriveHeadReg := $A0;
bCommandReg := IDE_ID_FUNCTION;
end;
end;
if not DeviceIoControl( hDevice, DFP_RECEIVE_DRIVE_DATA,
pInData, SizeOf(TSendCmdInParams)-, pOutData,
W9xBufferSize, cbBytesReturned, nil ) then Exit;
finally
CloseHandle(hDevice);
end;
end;
with PIdSector(PChar(pOutData)+)^ do begin
ChangeByteOrder(sSerialNumber,SizeOf(sSerialNumber));
SetString(Result,sSerialNumber,SizeOf(sSerialNumber));
end;
end;
procedure TObjList.Clear;
begin
inherited;
end;
destructor TObjList.Destroy;
begin
inherited;
end;
function StrIsEmpty (s: String): Boolean;
begin
Result := False;
if s = '' then
Result := True;
end;
{procedure StringWrite (f: file; s: String);
begin
end;
procedure StringRead (f: file; s: String);
begin
end;
}
function SLtrim (s: String): String;
begin
end;
function STrim (s: String): String;
begin
end;
function SAllTrim (s: String): String;
begin
end;
function SRemoveSpace (s: String): String;
var
I : Integer;
Count : Integer;
begin
Result:= '';
Count := length(s);
for I := to Count do begin
if s[I] <> ' ' then begin
Result := Result + s[I];
end;
end;
end;
procedure SSplitString (s: String; s1: String; s2: String);
begin
end;
procedure SSplitString1 (s: String; s1: String; s2: String);
begin
end;
function SIntToStrFix (n: Integer; cnt: Integer): String;
begin
end;
function ARound (v: Double): Double;
begin
Result := Round(V);
end;
function ARoundN (v: Double; n: Integer): Double;
var
I : Integer;
begin
result := v;
for I := to N - do begin
Result := Result * ;
end;
Result := Round(Result);
for I := to N - do begin
Result := Result / ;
end;
end;
function AEqu (v1: Double; v2: Double): Boolean;
begin
result := False;
if v1 = v2 then
result := True
end;
function ASmall (v1: Double; v2: Double): Boolean;
begin
result := False;
if v1 < v2 then
result := True;
end;
function ABig (v1: Double; v2: Double): Boolean;
begin
result := False;
if v1 > v2 then
result := True;
end;
function AIsZero (v1: Double): Boolean;
begin
Result := False;
if V1 = then Result := True;
end;
function AMax(a: Double; b: Double): Double;
begin
if a >= b then
result := a
else
result := b;
end;
function AMin(a: Double; b: Double): Double;
begin
if a >= b then
result := b
else
result := a;
end;
procedure ASwap (p1: Double; p2: Double);
begin
end;
function IMax(a: Integer; b: Integer): Integer;
begin
if a >= b then
result := a
else
result := b;
end;
function IMin(a: Integer; b: Integer): Integer;
begin
if a >= b then
result := b
else
result := a;
end;
procedure ISwap (p1: Integer; p2: Integer);
begin
end;
function RealToStr (v: Double): String;
begin
result := FloatToStr(v);
end;
function RealToStr1 (v: Double): String;
begin
end;
function StrToReal(s: String): Double;
var
I : Integer;
B : Boolean;
begin
B := True;
result := ;
for I := to length(s) do begin
if (ord(s[I]) > ) or (ord(s[I]) < ) then begin
if ord(s[I]) <> then begin
B := False;
Break;
end;
end;
end;
if B and (Length(s) <> ) then
result := StrToFloat(s)
end;
function RealStr (v: Double): String;
begin
result := FloatToStr(v);
end;
function FloatToFloat(Const D: Double; Const N: integer): Double;
var
I : integer;
Max : LongInt;
begin
Max := ;
for I := to N do begin
Max := Max * ;
end;
result := D * Max;
result := Round(result);
result := result / Max;
end;
function RealStrN (v: Double; dec: Integer): String;
var
TD : Double;
begin
TD := FloatToFloat(V, dec);
result := FloatToStr(TD);
end;
function RealDateN(v: Double): String;
var
Year, Month, Day : word;
begin
DecodeDate(v, Year, Month, Day);
result := IntToStr(year) + '年' + IntToStr(Month) + '月' + IntToStr(Day) + '日';
end;
function IsDate(const str: string): Boolean;
begin
try
StrToDate(str);
except
Result := False;
Exit;
end;
Result := True;
end;
function GetDate(const str: string): TDateTime;
var
NewStr: string;
begin
NewStr := str;
NewStr := StringReplace(NewStr,'年','-',[]);
NewStr := StringReplace(NewStr,'月','-',[]);
NewStr := StringReplace(NewStr,'日','',[]);
if IsDate(NewStr) then Result := StrToDate(NewStr)
else Result := SysUtils.Date;
end;
function RealStr1 (v: Double; len: Integer; dec: Integer): String;
begin
end;
function RealStr2 (v: Double; len: Integer; dec: Integer): String;
begin
end;
function RealStr3 (v: Double; len: Integer; dec: Integer): String;
begin
end;
function RealStr4 (v: Double; len: Integer; dec: Integer): String;
begin
end;
function StrInt (s: String): Integer;
var
I : Integer;
B : Boolean;
begin
B := True;
result := ;
if s = '' then begin
result := ;
Exit;
end;
for I := to length(s) do begin
if (ord(s[I]) > ) or (ord(s[I]) < ) then begin
B := False;
Break;
end;
end;
if B and (Length(s) <> ) then
result := StrToInt(s)
end;
procedure WriteXMLValue(XML : IXMLNode; Const mc : string; Var Val: string);
var
Child_Node : IXMLNode;
begin
Child_Node := XML.AddChild(mc);
Child_Node.Text := Val;
end;
procedure ReadXMLValue(XML : IXMLNode; Const mc : string; Var Val: string);
var
Child_Node : IXMLNode;
begin
Child_Node := XML.ChildNodes.First;
if (Child_Node.NodeName = mc) then
Val := Child_Node.Text;
end;
procedure ReadFromStream(Stream: TStream; var Bool: Boolean);
begin
Stream.Read(Bool,SizeOf(Bool));
end;
procedure ReadFromStream(Stream: TStream; var Number: integer);
begin
Stream.Read(Number,SizeOf(Number));
end;
procedure ReadFromStream (stream: TStream; var Number: Int64); overload;
begin
Stream.Read(Number,SizeOf(Number));
end;
procedure ReadFromStream(Stream: TStream; var Filestr: string);
var
Count : integer;
I : integer;
S : Char;
begin
Filestr := '';
Count := ;
ReadFromStream(Stream, Count);
for I := to Count do begin
Stream.Read(S, );
Filestr:= Filestr + s;
end;
end;
procedure WriteToStream(Stream: TStream; const Number: integer);
begin
Stream.Write(Number,SizeOf(Number));
end;
procedure WriteToStream (stream: TStream; const Number: Int64); overload;
begin
Stream.Write(Number,SizeOf(Number));
end;
file://将filestr 写入流中
procedure WriteToStream(Stream: TStream; const Filestr: string);
var
Count : integer;
I : integer;
S : Char;
begin
Count:= length(Filestr);
WriteToStream(Stream,Count);
for I:= to Count do begin
S := FileStr[I];
Stream.Write(S, );
end;
end;
procedure WriteToStream (stream: TStream; const Number: Extended); overload;
begin
Stream.Write(Number,SizeOf(Number));
end;
procedure ReadFromStream (stream: TStream; var v: Extended); overload;
begin
Stream.Read(v,SizeOf(v));
end;
procedure WriteToStream(Stream: TStream; const Bool: Boolean);
begin
Stream.Write(Bool,Sizeof(Bool));
end;
procedure WriteToStream (stream: TStream; const v: Cardinal); overload;
begin
end;
procedure WriteToStream (stream: TStream; const v: Word); overload;
begin
end;
procedure WriteToStream (stream: TStream; const v: Double); overload;
begin
Stream.Write(V , sizeof(V));
end;
procedure ReadFromStream (stream: TStream; var v: Cardinal); overload;
begin
end;
procedure ReadFromStream (stream: TStream; var v: Word); overload;
begin
end;
procedure ReadFromStream (stream: TStream; var v: Double); overload;
begin
Stream.Read(V , sizeof(v));
end;
procedure WriteToStream (stream: TStream; const sList: TStringList); overload;
begin
end;
procedure ReadFromStream (stream: TStream; var sList: TStringList); overload;
begin
end;
procedure WriteToStream (stream: TStream; const iary: array of Integer); overload;
begin
end;
procedure ReadFromStream (stream: TStream; var iary: array of Integer); overload;
begin
end;
function StrLike (sou: String; key: String): Boolean;
begin
result := False;
if pos(sou, key) > then
result := True;
end;
function SRight (s: String; n: Integer): String;
var
I : Integer;
begin
Result := '';
for I := to n do begin
Result := Result + s[I];
end;
end;
procedure LoadFileList (Path: String; slist: TStrings; noPath: Boolean);
begin
end;
function TimeTicket: Longint;
begin
Result := ;
end;
function MonthOfDate (date: TDateTime): Integer;
begin
Result := ;
end;
function DayOfDate (date: TDateTime): Integer;
begin
Result := ;
end;
function YearOfDate (date: TDateTime): Integer;
begin
Result := ;
end;
function GetSplitWord (s: String; splitc: Char): String;
begin
end;
function HexToInt (s: String): Integer;
begin
Result := ;
end;
function TransStrByTable (sou: String; ori: TStringList; des: TStringList): String;
begin
end;
procedure LoadTransTable (fn: String; sou: TStringList; tag: TStringList);
begin
end;
function MakeFilePath (s: String): String;
begin
end;
function RemoveNote (s: String): String;
begin
end;
function MakePath (path: String): String;
begin
end;
function Blone (tj: String; v: String): Boolean;
begin
Result := False;
end;
function CodeStr (s: String): String;
begin
end;
function DeCodeStr (s: String): String;
begin
end;
function GetValueFromStr (vname: String; s: String; txt: String): Boolean;
begin
Result := False;
end;
function GetParaList (txt: String; ss: TStringList): Boolean;
begin
Result := False;
end;
function SReplace (txt: String; sou: String; tag: String): String;
begin
end;
procedure TObjList.LoadFromStream(stream: TStream);
var
I : integer;
tmpCount : integer;
tmp: TObject;
begin
ReadFromStream(Stream, tmpCount);
for I:= to tmpCount - do begin
Stream.Read(tmp, SizeOf(tmp));
Add(tmp);
end;
end;
procedure TObjList.SaveToStream(stream: TStream);
var
I : integer;
tmp: TObject;
begin
WriteToStream(Stream, Count);
for I:= to Count - do begin
tmp := Items[I];
Stream.Write(tmp, Sizeof(tmp));
end;
end;
end.
delphi的一个公用函数库的更多相关文章
- Delphi另一个多线程函数:BeginThread用法
Delphi另一个多线程函数:BeginThread━━━━━━━━━━━━━━━━━━━━━━━━━━ Delphi也提供了一个相同功能的类似函数:function BeginThread( ...
- 一个ASP函数库
<% '****************************** '类名: '名称:通用库 '日期:2008/10/28 '作者:by xilou '网址: '描述:通用库 '版权:转载请注 ...
- linux 函数库使用
程序函数库可分为3种类型:静态函 数库(static libraries).共享函数库(shared libraries)和动态加载函数库(dynamically loaded libraries) ...
- [UE4]蓝图函数库小结
蓝图函数库的功能非常强劲,如果在项目中使用的话有时能达到事半功倍的效果. 蓝图函数库,Blueprint Function Library.可以非常方便的将代码中的函数暴露给所有的蓝图使用,同时也提供 ...
- MySQL函数库
MySQL函数库,这个函数库是一个外部函数库!这个函数提供了对于MySQL数据库进行操作的常用函数,如连接MySQL服务器.打开数据库.执行SQL语句等.所以这个函数库的功能对于我们来说是非常重要的! ...
- Underscore——JS函数库
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826065.html underscore是什么——它是一个js函数库 jQuery统一了不同浏览器之间的 ...
- delphi公用函数
{*******************************************************} { } { Delphi公用函数单元 } { } { 版权所有 (C) 2008 } ...
- 如何持续集成/交付一个开源.NET函数库到Nuget.org
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:这是一个简单的入门向导,涉及到GitHub.AppVeyor和Nuget.org. 最 ...
- 自己的一个LESS工具函数库
自己大概在一年前开始使用LESS编写样式,现在感觉不用LESS都不会写样式了.现在写静态页面完全离不开LESS与Zen Coding,我可以不用什么IDE,但这两个工具却必须要,当然也强烈推荐看到这篇 ...
随机推荐
- ros卸载
sudo apt-get purge ros-*sudo rm -rf /etc/rossudo rm -rf /opt/ros删除.bashrc中的source /opt/ros/indigo/se ...
- Zabbix 3.4.2 install && Configuration
原理: 1)zabbix server:负责接收agent发送的报告信息的核心组件,所有配置.统计数据及操作数据都由它组织进行: 2)database storage:专用于存储所有配置信息,以及由z ...
- 暂停线程执行sleep_yield_join_stop
1.final void join() 调用该方法的线程强制执行完成,其它线程处于阻塞状态,该线程执行完毕,其它线程再执行 public class TestJoin { public static ...
- java 日期与时间类
1.Date类: https://www.cnblogs.com/huangminwen/p/5994927.html 2.DateFormat和SimpleDateFormat (simple简单 ...
- docker数据卷管理及网络基础配置
数据卷 数据卷容器 数据卷迁移数据 端口映射 容器间通信 数据卷的管理 当需要查看容器内应用产生的数据或者把容器内数据备份及多个容器数据共享.有两种方式,数据卷以及数据卷容器. 数据卷 数据卷是一个可 ...
- php实现一个单链表
单链表,节点只有一个指针域的链表.节点包括数据域和指针域. 因此用面向对象的思维,节点类的属性就有两个:一个data(表示存储的数据),一个指针next(链表中指向下一个节点). 链表一个很重要的特性 ...
- MFC入门(一)-- 第一个简单的windows图形化界面小程序(打开计算器,记事本,查IP)
////////////////////////////////序//////////////////////////////// 大约三年前,学过一些简单的编程语言之后其实一直挺苦恼于所写的程序总是 ...
- How to Enable TLS 1.2 on Windows Server 2008 R2 and IIS 7.5
Nowadays there is an SSL vulnerability called POODLE discovered by Google team in SSLv3 protocol. So ...
- TRIO-basic指令--MOVEMODIFY
Syntax: MOVEMODIFY(position) Parameters: position: Absolute position for the current move to complet ...
- kvm虚拟化管理平台WebVirtMgr部署-完整记录(0)
打算部署kvm虚拟机环境,下面是虚拟化部署前的一些准备工作: 操作系统环境安装1)修改内核模式为兼容内核启动[root@ops ~]# uname -aLinux openstack 2.6.32-4 ...