您的位置:首页 > 编程语言 > Delphi

DELPHI常用函数

2010-11-29 10:39 274 查看
一 生成一个GUID字符串,并且把左右花括弧

function GetNewGuid: String;
var
TmpGuid: TGUID;
begin
Result := '';
CreateGUID(TmpGUID);
Result := GUIDToString(TmpGUID);
Result := StringReplace(Result, '{', '', []);
Result := StringReplace(Result, '}', '', []);
end;

如果数据库中级联的表之间出错了,要重新整理或者干脆删除,这个字段就很好处理,因为它是唯一的,不会重复的。

二 字符串转化为十六进制

function StrToHex(Value: String): String;
var
i: integer;
begin
Result := '';
for i := 1 to Length(Value) do
begin
Result := Result + IntToHex(ord(Value[i]), 2);
end;
end;

三 十六进制转化为字符串

function HexToStr(Value: String): String;
var
Pos: Integer; HexStr: String;
begin
Result := ''; Pos := 1;
if (Length(value) mod 2) <> 0 then Value := '0' + Value; //如果长度为奇数则补0。
while pos < Length(Value) do
begin
HexStr := Copy(Value, Pos, 2);
Result := Result + Chr(StrToInt('$' + HexStr));
Pos := Pos + 2;
end;
end;

四 数组转化为字符串

TBuffer = array [0..65535] of byte;

function Buffer2String(Buffer: TBuffer; BufferSize: Integer): String;
var
i: Integer;
begin
Result := '';
for i := 0 to BufferSize - 1 do Result := Result + Char(Buffer[i]);
end;


五 字符串转化为数组

TBuffer = array [0..65535] of byte;

function String2Buffer(Data: String; var BufferSize: Integer): TBuffer;
var
i: Integer;
begin
FillChar(Result, SizeOf(TBuffer), #0);
BufferSize := Length(Data);
for i := 0 to BufferSize - 1 do Result[i] := Ord(Data[i + 1]);
end;


六 存储为文本文件函数

procedure WriteTxtFile(FileName: string; Data: string);
var
TF: TextFile;
begin
AssignFile(TF, FileName);
if not FileExists(FileName) then Rewrite(TF) else Append(TF);
Writeln(TF, Data);
CloseFile(TF);
end;


七 Stream的压缩和解压

procedure Compress(var CompressedStream: TMemoryStream);
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
begin
Count := CompressedStream.Size; DestStream := TMemoryStream.Create;
SourceStream := TCompressionStream.Create(clMax, DestStream);
try
CompressedStream.SaveToStream(SourceStream); SourceStream.Free; CompressedStream.Clear;
CompressedStream.WriteBuffer(Count, SizeOf(Count)); CompressedStream.CopyFrom(DestStream, 0);
finally
DestStream.Free;
end;
end;

procedure UnCompress(const CompressedStream: TMemoryStream);
var
Buffer: PChar;
Count: Integer;
DestStream: TMemoryStream;
SourceStream: TDecompressionStream;
begin
CompressedStream.Position := 0;
CompressedStream.ReadBuffer(Count, SizeOf(Count));
GetMem(Buffer, Count); DestStream := TMemoryStream.Create;
SourceStream := TDecompressionStream.Create(CompressedStream);
try
SourceStream.ReadBuffer(Buffer^, Count); DestStream.WriteBuffer(Buffer^, Count);
DestStream.Position := 0; CompressedStream.LoadFromStream(DestStream);
finally
FreeMem(Buffer); DestStream.Free; SourceStream.Free;
end;
end;


七 控制台调试函数

procedure WriteCon1(Data: variant; CloseConsole: Boolean = False);
var
Temp: string;
begin
try
if ParamStr(1) <> 'debug' then Exit;
AllocConsole;
Temp := ParamStr(0) + Char(9) + string(Data) + #$0D + #$0A;
FileWrite(GetStdHandle(STD_OUTPUT_HANDLE), Temp[1], length(Temp));
if CloseConsole then FreeConsole;
except
FreeConsole;
end;
end;


八 取函数版本号

function GetFileVersion1(FileName: string): string;
var
n, Len: DWORD;
Buf : PChar;
Value: Pointer;
szName: array [0..255] of Char;
Transstring: string;
begin
Result := '';
Len := GetFileVersionInfoSize(PChar(FileName), n);
if Len > 0 then
begin
Buf := AllocMem(Len);
if GetFileVersionInfo(Pchar(FileName), n, Len, Buf) then
begin
Value := nil;
VerQueryValue(Buf, '/VarFileInfo/Translation', Value, Len);
if Value <> nil then
Transstring := IntToHex(MakeLong(HiWord(LongInt(Value^)),
LoWord(LongInt(Value^))),8);
StrPCopy(szName, '/stringFileInfo/' + Transstring + '/FileVersion');
if VerQueryValue(Buf, szName, Value, Len) then
Result := StrPas(Pchar(Value));
end;
FreeMem(Buf, n);
end;
end;


九 取文件大小

function FileSizeEx(const FileName: string): Int64;
var
Info: TWin32FindData;
Hnd: THandle;
begin
Result := -1;
try
Hnd := FindFirstFile(PChar(FileName), Info);
if (Hnd <> INVALID_HANDLE_VALUE) then
begin
Windows.FindClose(Hnd);
Int64Rec(Result).Lo := Info.nFileSizeLow;
Int64Rec(Result).Hi := Info.nFileSizeHigh;
end;
except

end;
end;


十 取文件修改日期

function GetFileModifyDate(FileName: String): TDateTime;
var
vSearchRec: TSearchRec;
LocalFileTime: TFileTime;
I: Integer;
begin
Result := 0 ;
try
if FindFirst(FileName, faAnyFile, vSearchRec) = 0 then
begin
FileTimeToLocalFileTime(vSearchRec.FindData.ftLastWriteTime, LocalFileTime);
FileTimeToDosDateTime(LocalFileTime, LongRec(I).Hi, LongRec(I).Lo);
Result := FileDateToDateTime(I);
FindClose(vSearchRec);
end;
except

end;
end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: