亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? hutil32.pas

?? 解元 傳奇2客戶端delphi源程序
?? PAS
字號(hào):
unit HUtil32;

//提供大量的輔助函數(shù)

interface

uses
   Classes, SysUtils, WinTypes, WinProcs, Graphics, Messages, Dialogs;

type
   Str4096 = array [0..4096] of char;
   Str256 = array [0..256] of char;
   //名稱、值對(duì)照表
   TyNameTable = record
     Name: string;
     varl: Longint;
   end;

   TLRect = record
      Left, Top, Right, Bottom: Longint;
   end;

const
   MAXDEFCOLOR = 16;
   //顏色名稱、值對(duì)照
   ColorNames: array [1..MAXDEFCOLOR] of TyNameTable = (
      (Name: 'BLACK'; 		varl: clBlack),
      (Name: 'BROWN';		varl: clMaroon),
      (Name: 'MARGENTA';	varl: clFuchsia),
      (Name: 'GREEN';		varl: clGreen),
      (Name: 'LTGREEN';		varl: clOlive),
      (Name: 'BLUE';		varl: clNavy),
      (Name: 'LTBLUE';		varl: clBlue),
      (Name: 'PURPLE';		varl: clPurple),
      (Name: 'CYAN';		varl: clTeal),
      (Name: 'LTCYAN';		varl: clAqua),
      (Name: 'GRAY';		varl: clGray),
      (Name: 'LTGRAY';		varl: clsilver),
      (Name: 'YELLOW';		varl: clYellow),
      (Name: 'LIME';		varl: clLime),
      (Name: 'WHITE';		varl: clWhite),
      (Name: 'RED';		varl: clRed)
   );

   //標(biāo)記、值對(duì)照
   MAXLISTMARKER    = 3;
   LiMarkerNames: array [1..MAXLISTMARKER] of TyNameTable = (
      (Name: 'DISC';		varl: 0),
      (Name: 'CIRCLE';		varl: 1),
      (Name: 'SQUARE';		varl: 2)
   );

   //
   MAXPREDEFINE    = 3;
   PreDefineNames: array [1..MAXPREDEFINE] of TyNameTable = (
      (Name: 'LEFT';		varl: 0),
      (Name: 'RIGHT';		varl: 1),
      (Name: 'CENTER';		varl: 2)
   );


function  ArrestStringEx (Source, SearchAfter, ArrestBefore: string; var ArrestStr: string): string;
function  ExtractFileNameOnly (const fname: string): string;
function  FloatToStrFixFmt (fVal: Double; prec, digit: Integer): string;
function  FileSize (const FName: string): Longint;
function  FileCopy(source,dest: String): Boolean;
function  GetValidStr3 (Str: string; var Dest: string; const Divider: array of Char): string;
function  GetValidStrVal (Str: string; var Dest: string; const Divider: array of Char): string;
function  Str_ToInt (Str: string; def: Longint): Longint;
procedure SpliteBitmap (DC: HDC; X, Y: integer; bitmap: TBitmap; transcolor: TColor);
function _MIN (n1, n2: integer): integer;
function _MAX (n1, n2: integer): integer;

implementation

//返回文件名(不包括路徑和擴(kuò)展名)
function  ExtractFileNameOnly (const fname: string): string;
var
   extpos: integer;
   ext, fn: string;
begin
   ext := ExtractFileExt (fname);
   fn := ExtractFileName (fname);
   if ext <> '' then begin
      extpos := pos (ext, fn);
      Result := Copy (fn, 1, extpos-1);
   end else
      Result := fn;
end;

function ArrestStringEx (Source, SearchAfter, ArrestBefore: string; var ArrestStr: string): string;
var
   BufCount, SrcCount, SrcLen: integer;
   GoodData, Fin: Boolean;
   i, n: integer;
begin
   ArrestStr := ''; {result string}
   if Source = '' then begin
      Result := '';
      exit;
   end;

   try
      SrcLen := Length (Source);
      GoodData := FALSE;
      if SrcLen >= 2 then
         if Source[1] = SearchAfter then begin
            Source := Copy (Source, 2, SrcLen-1);
            SrcLen := Length (Source);
            GoodData := TRUE;
         end else begin
            n := Pos (SearchAfter, Source);
            if n > 0 then begin
               Source := Copy (Source, n+1, SrcLen-(n));
               SrcLen := Length(Source);
               GoodData := TRUE;
            end;
         end;
      Fin := FALSE;
      if GoodData then begin
         n := Pos (ArrestBefore, Source);
         if n > 0 then begin
            ArrestStr := Copy (Source, 1, n-1);
            Result := Copy (Source, n+1, SrcLen-n);
         end else begin
            Result := SearchAfter + Source;
         end;
      end else begin
         for i:=1 to SrcLen do begin
            if Source[i] = SearchAfter then begin
               Result := Copy (Source, i, SrcLen-i+1);
               break;
            end;
         end;
      end;
   except
      ArrestStr := '';
      Result := '';
   end;
end;

//
function FloatToStrFixFmt (fVal: Double; prec, digit: Integer): string;
var
   cnt, dest, Len, I, j: Integer;
   fstr: string;
   Buf: array[0..255] of char;
label end_conv;
begin
   cnt := 0;  dest := 0;
   fstr := FloatToStrF ( fVal, ffGeneral, 15, 3 );
   Len  := Length (fstr);
   for i:=1 to Len do begin
      if fstr[i]='.' then begin
         Buf[dest] := '.'; Inc(dest);
         cnt := 0;
         for j:=i+1 to Len do begin
            if cnt < digit then begin
               Buf[dest] := fstr[j]; Inc(dest);
            end
            else begin
               goto end_conv;
            end;
            Inc(cnt);
         end;
         goto end_conv;
      end;
      if cnt < prec then begin
         Buf[dest] := fstr[i]; Inc(dest);
      end;
      Inc(cnt);
   end;
   end_conv:
   Buf[dest] := char(0);
   Result := strPas(Buf);
end;

//文件大小
function  FileSize (const FName: string): Longint;
var
  SearchRec: TSearchRec;
begin
  if FindFirst(ExpandFileName(FName), faAnyFile, SearchRec) = 0 then
    Result := SearchRec.Size
  else Result := -1;
end;

//文件拷貝
function FileCopy(source,dest: String): Boolean;
var
  fSrc,fDst,len: Integer;
  size: Longint;
  buffer: packed array [0..2047] of Byte;
begin
  Result := False; { Assume that it WONT work }
  if source <> dest then begin
    fSrc := FileOpen(source,fmOpenRead);
    if fSrc >= 0 then begin
      size := FileSeek(fSrc,0,2);
      FileSeek(fSrc,0,0);
      fDst := FileCreate(dest);
      if fDst >= 0 then begin
        while size > 0 do begin
          len := FileRead(fSrc,buffer,sizeof(buffer));
          FileWrite(fDst,buffer,len);
          size := size - len;
        end;
        FileSetDate(fDst,FileGetDate(fSrc));
        FileClose(fDst);
        FileSetAttr(dest,FileGetAttr(source));
        Result := True;
      end;
      FileClose(fSrc);
    end;
  end;
end;

//獲取指定字符串中以指定分割符結(jié)尾的子串
function GetValidStr3 (Str: string; var Dest: string; const Divider: array of Char): string;
const
   BUF_SIZE = 20480; //$7FFF;
var
   Buf: array[0..BUF_SIZE] of char;
   BufCount, Count, SrcLen, I, ArrCount: Longint;
   Ch: char;
label
	CATCH_DIV;
begin
   try
      SrcLen := Length(Str);
      BufCount := 0;
      Count := 1;

      if SrcLen >= BUF_SIZE-1 then begin
         Result := '';
         Dest := '';
         exit;
      end;

      if Str = '' then begin
         Dest := '';
         Result := Str;
         exit;
      end;
      ArrCount := sizeof(Divider) div sizeof(char);

      while TRUE do begin
         if Count <= SrcLen then begin
            Ch := Str[Count];
            for I:=0 to ArrCount- 1 do
               if Ch = Divider[I] then
                  goto CATCH_DIV;
         end;
         if (Count > SrcLen) then begin
            CATCH_DIV:
            if (BufCount > 0) then begin
               if BufCount < BUF_SIZE-1 then begin
                  Buf[BufCount] := #0;
                  Dest := string (Buf);
                  Result := Copy (Str, Count+1, SrcLen-Count);
               end;
               break;
            end else begin
               if (Count > SrcLen) then begin
                  Dest := '';
                  Result := Copy (Str, Count+2, SrcLen-1);
                  break;
               end;
            end;
         end else begin
            if BufCount < BUF_SIZE-1 then begin
               Buf[BufCount] := Ch;
               Inc (BufCount);
            end;// else
               //ShowMessage ('BUF_SIZE overflow !');
         end;
         Inc (Count);
      end;
   except
      Dest := '';
      Result := '';
   end;
end;

function GetValidStrVal (Str: string; var Dest: string; const Divider: array of Char): string;
//箭磊甫 盒府秦晨 ex) 12.30mV
const
	BUF_SIZE = 15600;
var
	Buf: array[0..BUF_SIZE] of char;
   BufCount, Count, SrcLen, I, ArrCount: Longint;
   Ch: char;
   currentNumeric: Boolean;
   hexmode: Boolean;
label
	CATCH_DIV;
begin
	try
   	//EnterCriticalSection (CSUtilLock);
      hexmode := FALSE;
      SrcLen := Length(Str);
      BufCount := 0;
      Count := 1;
      currentNumeric := FALSE;

      if Str = '' then begin
         Dest := '';
         Result := Str;
         exit;
      end;
      ArrCount := sizeof(Divider) div sizeof(char);

      while TRUE do begin
         if Count <= SrcLen then begin
            Ch := Str[Count];
            for I:=0 to ArrCount- 1 do
               if Ch = Divider[I] then
                  goto CATCH_DIV;
         end;
         if not currentNumeric then begin
            if (Count+1) < SrcLen then begin
               if (Str[Count] = '0') and (UpCase(Str[Count+1]) = 'X') then begin
                  Buf[BufCount] := Str[Count];
                  Buf[BufCount+1] := Str[Count+1];
                  Inc (BufCount, 2);
                  Inc (Count, 2);
                  hexmode := TRUE;
                  currentNumeric := TRUE;
                  continue;
               end;
               if (Ch = '-') and (Str[Count+1] >= '0') and (Str[Count+1] <= '9') then begin
                  currentNumeric := TRUE;
               end;
            end;
            if (Ch >= '0') and (Ch <= '9') then begin
               currentNumeric := TRUE;
            end;
         end else begin
            if hexmode then begin
               if not (((Ch >= '0') and (Ch <= '9')) or
                       ((Ch >= 'A') and (Ch <= 'F')) or
                       ((Ch >= 'a') and (Ch <= 'f'))) then begin
                     Dec (Count);
                     goto CATCH_DIV;
               end;
            end else
               if ((Ch < '0') or (Ch > '9')) and (Ch <> '.') then begin
                  Dec (Count);
                  goto CATCH_DIV;
               end;
         end;
         if (Count > SrcLen) then begin
            CATCH_DIV:
            if (BufCount > 0) then begin
               Buf[BufCount] := #0;
               Dest := string (Buf);
               Result := Copy (Str, Count+1, SrcLen-Count);
               break;
            end else begin
               if (Count > SrcLen) then begin
                  Dest := '';
                  Result := Copy (Str, Count+2, SrcLen-1);
                  break;
               end;
            end;
         end else begin
            if BufCount < BUF_SIZE-1 then begin
               Buf[BufCount] := Ch;
               Inc (BufCount);
            end else
               ShowMessage ('BUF_SIZE overflow !');
         end;
         Inc (Count);
      end;
	finally
   	//LeaveCriticalSection (CSUtilLock);
	end;
end;

//等價(jià)于StrtoIntDef()
function Str_ToInt (Str: string; def: Longint): Longint;
begin
   Result := def;
   if Str <> '' then begin
      if ((word(Str[1]) >= word('0')) and (word(str[1]) <= word('9'))) or
         (str[1] = '+') or (str[1] = '-') then
         try
            Result := StrToInt64 (Str);
         except
         end;
   end;
end;

function DuplicateBitmap (bitmap: TBitmap): HBitmap;
var
	hbmpOldSrc, hbmpOldDest, hbmpNew : HBitmap;
   hdcSrc, hdcDest						: HDC;

begin
   hdcSrc := CreateCompatibleDC (0);
   hdcDest := CreateCompatibleDC (hdcSrc);

   hbmpOldSrc := SelectObject(hdcSrc, bitmap.Handle);

   hbmpNew := CreateCompatibleBitmap(hdcSrc, bitmap.Width, bitmap.Height);

   hbmpOldDest := SelectObject(hdcDest, hbmpNew);

   BitBlt(hdcDest, 0, 0, bitmap.Width, bitmap.Height, hdcSrc, 0, 0,
     SRCCOPY);

   SelectObject(hdcDest, hbmpOldDest);
   SelectObject(hdcSrc, hbmpOldSrc);

   DeleteDC(hdcDest);
   DeleteDC(hdcSrc);

   Result := hbmpNew;
end;

procedure SpliteBitmap (DC: HDC; X, Y: integer; bitmap: TBitmap; transcolor: TColor);
var
   hdcMixBuffer, hdcBackMask, hdcForeMask, hdcCopy 	 : HDC;
   hOld, hbmCopy, hbmMixBuffer, hbmBackMask, hbmForeMask : HBitmap;
   oldColor: TColor;
begin
   hbmCopy := DuplicateBitmap (bitmap);
   hdcCopy := CreateCompatibleDC (DC);
   hOld := SelectObject (hdcCopy, hbmCopy);

   hdcBackMask := CreateCompatibleDC (DC);
   hdcForeMask := CreateCompatibleDC (DC);
   hdcMixBuffer:= CreateCompatibleDC (DC);
   hbmBackMask := CreateBitmap (bitmap.Width, bitmap.Height, 1, 1, nil);
   hbmForeMask := CreateBitmap (bitmap.Width, bitmap.Height, 1, 1, nil);
   hbmMixBuffer:= CreateCompatibleBitmap (DC, bitmap.Width, bitmap.Height);

   SelectObject (hdcBackMask, hbmBackMask);
   SelectObject (hdcForeMask, hbmForeMask);
   SelectObject (hdcMixBuffer, hbmMixBuffer);
   oldColor := SetBkColor (hdcCopy, transcolor); //clWhite);

   BitBlt (hdcForeMask, 0, 0, bitmap.Width, bitmap.Height, hdcCopy, 0, 0, SRCCOPY);
   SetBkColor (hdcCopy, oldColor);
   BitBlt( hdcBackMask, 0, 0, bitmap.Width, bitmap.Height, hdcForeMask, 0, 0, NOTSRCCOPY );

   BitBlt( hdcMixBuffer, 0, 0, bitmap.Width, bitmap.Height, DC, X, Y, SRCCOPY );
   BitBlt( hdcMixBuffer, 0, 0, bitmap.Width, bitmap.Height, hdcForeMask, 0, 0, SRCAND );
   BitBlt( hdcCopy, 0, 0, bitmap.Width, bitmap.Height, hdcBackMask, 0, 0, SRCAND );
   BitBlt( hdcMixBuffer, 0, 0, bitmap.Width, bitmap.Height, hdcCopy, 0, 0, SRCPAINT );
   BitBlt( DC, X, Y, bitmap.Width, bitmap.Height, hdcMixBuffer, 0, 0, SRCCOPY );

   {DeleteObject (hbmCopy);}
   DeleteObject( SelectObject( hdcCopy, hOld ) );
   DeleteObject( SelectObject( hdcForeMask, hOld ) );
   DeleteObject( SelectObject( hdcBackMask, hOld ) );
   DeleteObject( SelectObject( hdcMixBuffer, hOld ) );
   DeleteDC( hdcCopy );
   DeleteDC( hdcForeMask );
   DeleteDC( hdcBackMask );
   DeleteDC( hdcMixBuffer );
end;

//取兩個(gè)整數(shù)中的最小值
function _MIN (n1, n2: integer): integer;
begin
	if n1 < n2 then Result := n1
   else Result := n2;
end;
//取兩個(gè)整數(shù)中的最大值
function _MAX (n1, n2: integer): integer;
begin
   if n1 > n2 then Result := n1
   else Result := n2;
end;


end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品视频一区| 日本sm残虐另类| 欧美大肚乱孕交hd孕妇| 99久久精品国产导航| 麻豆久久久久久久| 亚洲免费观看高清完整版在线 | 亚洲欧美日韩小说| 2024国产精品| 欧美久久一二区| caoporm超碰国产精品| 精品系列免费在线观看| 亚洲va韩国va欧美va精品| 中文字幕一区二区三区精华液 | 欧美日韩电影在线播放| 成人av在线网站| 国产美女一区二区三区| 视频一区二区三区在线| 一级女性全黄久久生活片免费| 久久亚洲免费视频| 欧美一级片免费看| 欧美色图激情小说| 91视视频在线观看入口直接观看www | 中文字幕不卡的av| 久久久五月婷婷| 欧美tk—视频vk| 日韩一卡二卡三卡| 欧美精品1区2区3区| 欧美图区在线视频| 欧美综合欧美视频| 一本一道波多野结衣一区二区| 国产成人高清在线| 国产成人av一区| 国产呦精品一区二区三区网站| 日本在线不卡视频一二三区| 午夜精品视频在线观看| 亚洲国产精品久久久久秋霞影院 | 国产suv精品一区二区三区| 精品一区二区在线视频| 久久99精品视频| 精品在线播放免费| 国产综合色产在线精品| 国产一区二区中文字幕| 国产精品自产自拍| 成人综合日日夜夜| 成人精品免费网站| 91在线视频网址| 色婷婷综合久久久久中文| 97久久超碰精品国产| 一本色道久久综合亚洲精品按摩| 91麻豆免费观看| 欧美日韩免费一区二区三区视频 | 日韩欧美一级片| 欧美成人aa大片| 国产午夜亚洲精品理论片色戒| 国产香蕉久久精品综合网| 国产精品久久久久久久久久久免费看 | 国产精品性做久久久久久| 韩国精品一区二区| 成人免费视频播放| 在线观看不卡一区| 日韩视频一区二区| 国产日韩欧美综合一区| 亚洲色欲色欲www| 亚洲成av人片在线观看无码| 久久99国产精品久久| 国产乱子伦视频一区二区三区| av在线一区二区| 欧美日韩的一区二区| 日韩午夜在线影院| 国产精品乱码一区二区三区软件| 亚洲你懂的在线视频| 日韩精品一二三四| 国产成人精品影视| 在线中文字幕一区| 精品美女在线观看| 亚洲女性喷水在线观看一区| 免费人成在线不卡| 成a人片国产精品| 欧美日韩日日摸| 亚洲国产成人私人影院tom| 亚洲一区视频在线| 国产乱码精品一区二区三区忘忧草 | 欧美国产禁国产网站cc| 一区二区理论电影在线观看| 欧美aⅴ一区二区三区视频| 成人午夜在线免费| 欧美精品欧美精品系列| 国产亚洲欧美激情| 亚洲成人动漫在线观看| 高清在线观看日韩| 欧美一区二区在线免费观看| 国产精品久久久久毛片软件| 日本不卡的三区四区五区| 99久久婷婷国产精品综合| 日韩欧美www| 亚洲一区二区在线免费观看视频 | 欧美性感一区二区三区| 久久久久国产一区二区三区四区 | zzijzzij亚洲日本少妇熟睡| 5858s免费视频成人| 国产精品久久久久久久岛一牛影视 | 中文字幕久久午夜不卡| 日韩av高清在线观看| 成人短视频下载| 精品国一区二区三区| 亚洲成人免费av| 99久久国产综合精品色伊| 精品毛片乱码1区2区3区| 夜夜精品浪潮av一区二区三区| 国产福利91精品一区| 日韩一级免费观看| 午夜久久久久久电影| 色婷婷精品大视频在线蜜桃视频| 久久久综合精品| 久久er精品视频| 91精品国模一区二区三区| 亚洲国产成人av网| 日本韩国一区二区三区| 国产精品久久久久久久蜜臀 | 亚洲欧洲日本在线| 国产传媒一区在线| 欧美v亚洲v综合ⅴ国产v| 午夜电影网亚洲视频| 欧美性色综合网| 亚洲精品大片www| 91丨porny丨在线| ㊣最新国产の精品bt伙计久久| 国产电影精品久久禁18| 26uuu久久综合| 久久99九九99精品| 久久综合九色综合97婷婷| 久久国产欧美日韩精品| 欧美va亚洲va| 国产乱码精品一区二区三区av | 日韩中文字幕av电影| 在线观看视频一区二区欧美日韩 | 国模大尺度一区二区三区| 日韩午夜在线观看视频| 蜜桃av一区二区在线观看| 欧美一区二区三区在| 日本午夜精品视频在线观看| 51久久夜色精品国产麻豆| 免费视频一区二区| 久久综合色婷婷| 国产福利不卡视频| 国产精品嫩草99a| 色婷婷精品久久二区二区蜜臂av| 亚洲免费在线观看视频| 欧美日韩中文国产| 奇米色一区二区三区四区| 精品毛片乱码1区2区3区| 国产精品资源在线| 国产精品成人一区二区艾草| 91福利在线播放| 午夜久久福利影院| 精品国产一区二区在线观看| 成人综合日日夜夜| 一区二区三区蜜桃| 欧美一区二区三区色| 国产精品中文欧美| 亚洲欧美日韩系列| 4438成人网| 国产91丝袜在线18| 亚洲午夜羞羞片| 精品嫩草影院久久| 91影视在线播放| 偷拍一区二区三区| 2欧美一区二区三区在线观看视频| 成人综合婷婷国产精品久久| 亚洲国产中文字幕| 久久综合精品国产一区二区三区| 99久久精品一区| 日韩av在线播放中文字幕| 国产蜜臀av在线一区二区三区| 99精品视频在线播放观看| 日韩在线a电影| 欧美韩日一区二区三区| 欧美无砖专区一中文字| 国产一区二区三区最好精华液| 亚洲免费av网站| 欧美成人精精品一区二区频| 91丨九色丨蝌蚪富婆spa| 另类小说综合欧美亚洲| 亚洲男女一区二区三区| 欧美va亚洲va| 欧美自拍偷拍一区| 国产成人亚洲精品青草天美| 亚洲国产日日夜夜| 亚洲国产精品二十页| 欧美精品电影在线播放| 成人免费三级在线| 久久精品国产精品亚洲综合| 亚洲精品久久嫩草网站秘色| 精品国产露脸精彩对白| 在线观看亚洲成人| 不卡的av中国片| 蜜臀va亚洲va欧美va天堂 | 久久综合久久综合久久综合| 欧美日韩一区二区三区在线看| 国产成人综合在线观看|