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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fileutil.pas

?? RX Library contains a large number of components, objects and routines for Borland Delphi with full
?? PAS
?? 第 1 頁 / 共 3 頁
字號:
    finally
      Free;
    end;
  end
  else Result := SelectDirectory(AFolderName, [], AHelpContext);
end;

function BrowseComputer(var ComputerName: string; const DlgText: string;
  AHelpContext: THelpContext): Boolean;
begin
  with TBrowseFolderDlg.Create(Application) do
  try
    BrowseKind := bfComputers;
    DialogText := DlgText;
    FolderName := ComputerName;
    HelpContext := AHelpContext;
    Result := Execute;
    if Result then ComputerName := FolderName;
  finally
    Free;
  end;
end;

{ TRxFileOperator }

type
  TFileOperation = (foCopy, foDelete, foMove, foRename);
  TFileOperFlag = (flAllowUndo, flConfirmMouse, flFilesOnly, flMultiDest,
    flNoConfirmation, flNoConfirmMkDir, flRenameOnCollision, flSilent,
    flSimpleProgress, flNoErrorUI);
  TFileOperFlags = set of TFileOperFlag;

  TRxFileOperator = class(TComponent)
  private
    FAborted: Boolean;
    FOperation: TFileOperation;
    FOptions: TFileOperFlags;
    FProgressTitle: string;
    FSource: string;
    FDestination: string;
    function TaskModalDialog(DialogFunc: Pointer; var DialogData): Boolean;
  public
    constructor Create(AOwner: TComponent); override;
    function Execute: Boolean; virtual;
    property Aborted: Boolean read FAborted;
  published
    property Destination: string read FDestination write FDestination;
    property Operation: TFileOperation read FOperation write FOperation
      default foCopy;
    property Options: TFileOperFlags read FOptions write FOptions
      default [flAllowUndo, flNoConfirmMkDir];
    property ProgressTitle: string read FProgressTitle write FProgressTitle;
    property Source: string read FSource write FSource;
  end;

{$IFNDEF RX_D3}
const
  FOF_NOERRORUI = $0400;
{$ENDIF}

constructor TRxFileOperator.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FOptions := [flAllowUndo, flNoConfirmMkDir];
end;

function TRxFileOperator.TaskModalDialog(DialogFunc: Pointer; var DialogData): Boolean;
type
  TDialogFunc = function(var DialogData): Integer stdcall;
var
  ActiveWindow: HWnd;
  WindowList: Pointer;
begin
  ActiveWindow := GetActiveWindow;
  WindowList := DisableTaskWindows(0);
  try
    Result := TDialogFunc(DialogFunc)(DialogData) = 0;
  finally
    EnableTaskWindows(WindowList);
    SetActiveWindow(ActiveWindow);
  end;
end;

function TRxFileOperator.Execute: Boolean;
const
  OperTypes: array[TFileOperation] of UINT = (
    FO_COPY, FO_DELETE, FO_MOVE, FO_RENAME);
  OperOptions: array[TFileOperFlag] of FILEOP_FLAGS = (
    FOF_ALLOWUNDO, FOF_CONFIRMMOUSE, FOF_FILESONLY, FOF_MULTIDESTFILES,
    FOF_NOCONFIRMATION, FOF_NOCONFIRMMKDIR, FOF_RENAMEONCOLLISION,
    FOF_SILENT, FOF_SIMPLEPROGRESS, FOF_NOERRORUI);
var
  OpStruct: TSHFileOpStruct;
  Flag: TFileOperFlag;

  function AllocFileStr(const S: string): PChar;
  var
    P: PChar;
  begin
    Result := nil;
    if S <> '' then begin
      Result := StrCopy(StrAlloc(Length(S) + 2), PChar(S));
      P := Result;
      while P^ <> #0 do begin
        if (P^ = ';') or (P^ = '|') then P^ := #0;
        Inc(P);
      end;
      Inc(P);
      P^ := #0;
    end;
  end;

begin
  FAborted := False;
  FillChar(OpStruct, SizeOf(OpStruct), 0);
  with OpStruct do
  try
    if (Application.MainForm <> nil) and
      Application.MainForm.HandleAllocated then
      Wnd := Application.MainForm.Handle
    else Wnd := Application.Handle;
    wFunc := OperTypes[Operation];
    pFrom := AllocFileStr(FSource);
    pTo := AllocFileStr(FDestination);
    fFlags := 0;
    for Flag := Low(Flag) to High(Flag) do
      if Flag in FOptions then fFlags := fFlags or OperOptions[Flag];
    lpszProgressTitle := PChar(FProgressTitle);
    Result := TaskModalDialog(@SHFileOperation, OpStruct);
    FAborted := fAnyOperationsAborted;
  finally
    if pFrom <> nil then StrDispose(pFrom);
    if pTo <> nil then StrDispose(pTo);
  end;
end;

{$ELSE}

function BrowseDirectory(var AFolderName: string; const DlgText: string;
  AHelpContext: THelpContext): Boolean;
begin
  Result := SelectDirectory(AFolderName, [], AHelpContext);
end;

{$ENDIF WIN32}

function NormalDir(const DirName: string): string;
begin
  Result := DirName;
  if (Result <> '') and
{$IFDEF RX_D3}
    not (AnsiLastChar(Result)^ in [':', '\']) then
{$ELSE}
    not (Result[Length(Result)] in [':', '\']) then
{$ENDIF}
  begin
    if (Length(Result) = 1) and (UpCase(Result[1]) in ['A'..'Z']) then
      Result := Result + ':\'
    else Result := Result + '\';
  end;
end;

function RemoveBackSlash(const DirName: string): string;
begin
  Result := DirName;
  if (Length(Result) > 1) and
{$IFDEF RX_D3}
    (AnsiLastChar(Result)^ = '\') then
{$ELSE}
    (Result[Length(Result)] = '\') then
{$ENDIF}
  begin
    if not ((Length(Result) = 3) and (UpCase(Result[1]) in ['A'..'Z']) and
      (Result[2] = ':')) then
      Delete(Result, Length(Result), 1);
  end;
end;

function DirExists(Name: string): Boolean;
{$IFDEF WIN32}
var
  Code: Integer;
begin
  Code := GetFileAttributes(PChar(Name));
  Result := (Code <> -1) and (FILE_ATTRIBUTE_DIRECTORY and Code <> 0);
end;
{$ELSE}
var
  SR: TSearchRec;
begin
  if Name[Length(Name)] = '\' then Dec(Name[0]);
  if (Length(Name) = 2) and (Name[2] = ':') then
    Name := Name + '\*.*';
  Result := FindFirst(Name, faDirectory, SR) = 0;
  Result := Result and (SR.Attr and faDirectory <> 0);
end;
{$ENDIF}

procedure ForceDirectories(Dir: string);
begin
  if Length(Dir) = 0 then Exit;
{$IFDEF RX_D3}
  if (AnsiLastChar(Dir) <> nil) and (AnsiLastChar(Dir)^ = '\') then
{$ELSE}
  if Dir[Length(Dir)] = '\' then
{$ENDIF}
    Delete(Dir, Length(Dir), 1);
  if (Length(Dir) < 3) or DirectoryExists(Dir) or
    (ExtractFilePath(Dir) = Dir) then Exit;
  ForceDirectories(ExtractFilePath(Dir));
{$IFDEF WIN32}
  CreateDir(Dir);
{$ELSE}
  MkDir(Dir);
{$ENDIF}
end;

{$IFDEF WIN32}
procedure CopyMoveFileShell(const FileName, DestName: string; Confirmation,
  AllowUndo, MoveFile: Boolean);
begin
  with TRxFileOperator.Create(nil) do
  try
    Source := FileName;
    Destination := DestName;
    if MoveFile then begin
      if AnsiCompareText(ExtractFilePath(FileName),
        ExtractFilePath(DestName)) = 0 then
        Operation := foRename
      else Operation := foMove;
    end
    else Operation := foCopy;
    if not AllowUndo then
      Options := Options - [flAllowUndo];
    if not Confirmation then
      Options := Options + [flNoConfirmation];
    if not Execute or Aborted then SysUtils.Abort;
  finally
    Free;
  end;
end;
{$ENDIF}

procedure CopyFile(const FileName, DestName: string;
  ProgressControl: TControl);
begin
  CopyFileEx(FileName, DestName, False, False, ProgressControl);
end;

procedure CopyFileEx(const FileName, DestName: string;
  OverwriteReadOnly, ShellDialog: Boolean; ProgressControl: TControl);
var
  CopyBuffer: Pointer;
  Source, Dest: Integer;
  Destination: TFileName;
  FSize, BytesCopied, TotalCopied: Longint;
  Attr: Integer;
const
  ChunkSize: Longint = 8192;
begin
{$IFDEF WIN32}
  if NewStyleControls and ShellDialog then begin
    CopyMoveFileShell(FileName, DestName, not OverwriteReadOnly,
      False, False);
    Exit;
  end;
{$ENDIF}
  Destination := DestName;
  if HasAttr(Destination, faDirectory) then
    Destination := NormalDir(Destination) + ExtractFileName(FileName);
  GetMem(CopyBuffer, ChunkSize);
  try
    TotalCopied := 0;
    FSize := GetFileSize(FileName);
    Source := FileOpen(FileName, fmShareDenyWrite);
    if Source < 0 then
      raise EFOpenError.CreateFmt(ResStr(SFOpenError), [FileName]);
    try
      if ProgressControl <> nil then begin
        SetProgressMax(ProgressControl, FSize);
        SetProgressMin(ProgressControl, 0);
        SetProgressValue(ProgressControl, 0);
      end;
      ForceDirectories(ExtractFilePath(Destination));
      if OverwriteReadOnly then begin
        Attr := FileGetAttr(Destination);
        if (Attr >= 0) and ((Attr and faReadOnly) <> 0) then
          FileSetAttr(Destination, Attr and not faReadOnly);
      end;
      Dest := FileCreate(Destination);
      if Dest < 0 then
        raise EFCreateError.CreateFmt(ResStr(SFCreateError), [Destination]);
      try
        repeat
          BytesCopied := FileRead(Source, CopyBuffer^, ChunkSize);
          if BytesCopied = -1 then
            raise EReadError.Create(ResStr(SReadError));
          TotalCopied := TotalCopied + BytesCopied;
          if BytesCopied > 0 then begin
            if FileWrite(Dest, CopyBuffer^, BytesCopied) = -1 then
              raise EWriteError.Create(ResStr(SWriteError));
          end;
          if ProgressControl <> nil then
            SetProgressValue(ProgressControl, TotalCopied);
        until BytesCopied < ChunkSize;
        FileSetDate(Dest, FileGetDate(Source));
      finally
        FileClose(Dest);
      end;
    finally
      FileClose(Source);
    end;
  finally
    FreeMem(CopyBuffer, ChunkSize);
    if ProgressControl <> nil then
      SetProgressValue(ProgressControl, 0);
  end;
end;

procedure MoveFile(const FileName, DestName: TFileName);
var
  Destination: TFileName;
  Attr: Integer;
begin
  Destination := ExpandFileName(DestName);
  if not RenameFile(FileName, Destination) then begin
    Attr := FileGetAttr(FileName);
    if Attr < 0 then Exit;
    if (Attr and faReadOnly) <> 0 then
      FileSetAttr(FileName, Attr and not faReadOnly);
    CopyFile(FileName, Destination, nil);
    DeleteFile(FileName);
  end;
end;

procedure MoveFileEx(const FileName, DestName: TFileName;
  ShellDialog: Boolean);
begin
{$IFDEF WIN32}
  if NewStyleControls and ShellDialog then
    CopyMoveFileShell(FileName, DestName, False, False, True)
  else
{$ENDIF}
    MoveFile(FileName, DestName);
end;

{$IFDEF RX_D4}
function GetFileSize(const FileName: string): Int64;
var
  Handle: THandle;
  FindData: TWin32FindData;
begin
  Handle := FindFirstFile(PChar(FileName), FindData);
  if Handle <> INVALID_HANDLE_VALUE then begin
    Windows.FindClose(Handle);
    if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
    begin
      Int64Rec(Result).Lo := FindData.nFileSizeLow;
      Int64Rec(Result).Hi := FindData.nFileSizeHigh;
      Exit;
    end;
  end;
  Result := -1;
end;
{$ELSE}
function GetFileSize(const FileName: string): Longint;
var
  SearchRec: TSearchRec;
begin
  if FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec) = 0 then
    Result := SearchRec.Size
  else Result := -1;
  FindClose(SearchRec);
end;
{$ENDIF RX_D4}

function FileDateTime(const FileName: string): System.TDateTime;
var
  Age: Longint;
begin
  Age := FileAge(FileName);
  if Age = -1 then
    Result := NullDate
  else
    Result := FileDateToDateTime(Age);
end;

function HasAttr(const FileName: string; Attr: Integer): Boolean;
var
  FileAttr: Integer;
begin
  FileAttr := FileGetAttr(FileName);
  Result := (FileAttr >= 0) and (FileAttr and Attr = Attr);
end;

function DeleteFiles(const FileMask: string): Boolean;
var
  SearchRec: TSearchRec;
begin
  Result := FindFirst(ExpandFileName(FileMask), faAnyFile, SearchRec) = 0;
  try
    if Result then
      repeat
//        if (SearchRec.Name[1] <> '.') and
//      !!! BUG !!!
        if (SearchRec.Name <> '.') and
          (SearchRec.Attr and faVolumeID <> faVolumeID) and
          (SearchRec.Attr and faDirectory <> faDirectory) then
        begin
          Result := DeleteFile(ExtractFilePath(FileMask) + SearchRec.Name);
          if not Result then Break;
        end;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区欧美久久| 国产精品正在播放| 国产精品夜夜嗨| 欧美丝袜丝nylons| 国产欧美一区二区三区网站| 亚洲国产精品久久一线不卡| 国产精品123区| 欧美一区二区人人喊爽| 日韩美女精品在线| 国产成人综合网站| 日韩一区二区三区免费观看| 一区二区三区中文在线| 成人动漫在线一区| 中文字幕亚洲不卡| 国内精品伊人久久久久av影院| 在线观看不卡视频| 一区在线观看视频| 99re这里只有精品首页| 国产蜜臀av在线一区二区三区| 韩国中文字幕2020精品| 日韩三级在线观看| 日韩国产欧美在线观看| 欧美日韩电影一区| 亚洲va中文字幕| 欧美在线你懂得| 亚洲亚洲人成综合网络| 日本精品视频一区二区| 日韩伦理av电影| 91在线视频观看| 一区二区在线观看免费 | 91麻豆高清视频| 国产精品剧情在线亚洲| 成人午夜精品在线| 中文字幕不卡的av| 成人免费视频播放| 成人免费一区二区三区视频| 99热精品一区二区| 一区二区在线观看免费视频播放| 欧美高清视频www夜色资源网| 亚洲精品网站在线观看| 色综合久久久久网| 亚洲国产精品嫩草影院| 8x8x8国产精品| 韩国欧美国产1区| 日本一区二区三区久久久久久久久不 | 1区2区3区国产精品| 色中色一区二区| 五月天亚洲婷婷| 精品国产一区久久| 国产成人在线视频网站| 1区2区3区精品视频| 欧洲一区二区三区在线| 丝袜亚洲精品中文字幕一区| 欧美tk丨vk视频| zzijzzij亚洲日本少妇熟睡| 亚洲免费成人av| 欧美α欧美αv大片| 国产伦精品一区二区三区视频青涩| 久久久不卡网国产精品一区| av亚洲精华国产精华精华| 亚洲成av人**亚洲成av**| 精品久久久久久综合日本欧美| 国产精品亚洲第一区在线暖暖韩国 | 天天综合日日夜夜精品| 久久婷婷一区二区三区| 99久久精品免费| 日本欧美在线观看| 国产精品久久久久影视| 欧美日韩性生活| 成人黄色免费短视频| 日韩精品91亚洲二区在线观看| 国产欧美日韩视频在线观看| 欧美自拍偷拍午夜视频| 国产成人aaa| 日韩高清在线一区| 中文字幕亚洲欧美在线不卡| 日韩欧美亚洲国产精品字幕久久久 | 欧美日韩国产高清一区二区三区| 国产精品88888| 日韩精品视频网| 亚洲蜜桃精久久久久久久| www成人在线观看| 制服丝袜中文字幕一区| 一本一道久久a久久精品| 加勒比av一区二区| 亚洲777理论| 亚洲精品国产视频| 欧美国产精品专区| 日韩欧美国产综合| 中文字幕国产一区| 日韩视频一区二区三区在线播放| 色婷婷综合久久久久中文 | 久久国产精品一区二区| 亚洲一区二区av在线| 国产人成一区二区三区影院| 日韩一区二区三区av| 欧美日韩综合在线免费观看| 99久久精品费精品国产一区二区| 国产乱子伦一区二区三区国色天香| 亚洲大片一区二区三区| 一区二区激情小说| 中文字幕日韩一区| 中文一区二区在线观看| 久久免费的精品国产v∧| 欧美mv日韩mv国产网站| 欧美成人三级在线| 日韩午夜精品电影| 日韩欧美激情一区| 日韩一级欧美一级| 日韩精品专区在线影院重磅| 欧美一级高清大全免费观看| 制服.丝袜.亚洲.另类.中文| 欧美色老头old∨ideo| 欧美性欧美巨大黑白大战| 91免费在线播放| 欧美性高清videossexo| 久久美女艺术照精彩视频福利播放 | 在线视频你懂得一区| 日本久久一区二区三区| 色噜噜狠狠成人网p站| 日本精品裸体写真集在线观看| 色爱区综合激月婷婷| 欧美性大战久久久久久久| 欧美日韩国产在线观看| 51精品久久久久久久蜜臀| 日韩午夜中文字幕| 2023国产精华国产精品| 国产日韩一级二级三级| 自拍av一区二区三区| 亚洲成人精品影院| 免费在线观看日韩欧美| 精品一区二区三区视频| 丁香激情综合五月| 91麻豆免费看片| 51精品国自产在线| 精品少妇一区二区三区在线视频| 欧美国产丝袜视频| 亚洲午夜激情网页| 韩国三级电影一区二区| 99精品视频一区| 3atv一区二区三区| 中文字幕免费观看一区| 一区二区三区小说| 麻豆一区二区99久久久久| 国产麻豆成人传媒免费观看| 色哟哟一区二区三区| 日韩亚洲欧美在线| 日本麻豆一区二区三区视频| 国产精品白丝jk黑袜喷水| 91婷婷韩国欧美一区二区| 51精品秘密在线观看| 欧美韩国日本一区| 日韩不卡免费视频| eeuss影院一区二区三区| 日韩一区二区三| 亚洲女同ⅹxx女同tv| 久久99国产精品久久99| 在线免费观看一区| 2020国产成人综合网| 午夜欧美一区二区三区在线播放| 国产不卡免费视频| 欧美丰满嫩嫩电影| 国产精品成人免费精品自在线观看| 天天av天天翘天天综合网色鬼国产 | 色婷婷av久久久久久久| 久久久91精品国产一区二区精品| 亚洲一区二区中文在线| 国产乱码精品一区二区三区av| 精品视频1区2区3区| 国产精品久久久久影视| 精品在线观看视频| 欧美二区三区91| 一卡二卡欧美日韩| 丰满少妇久久久久久久| 欧美一区二区久久久| 亚洲专区一二三| 一本久道久久综合中文字幕| 久久精品亚洲乱码伦伦中文| 久久国产剧场电影| 《视频一区视频二区| 国产成人在线影院| 久久天堂av综合合色蜜桃网| 青青草国产成人av片免费| 欧美日韩国产精选| 亚洲一区精品在线| 在线观看国产91| 亚洲综合视频网| 欧美亚洲综合色| 亚洲综合激情网| 欧美日韩一区高清| 亚洲精品国产精品乱码不99| 91一区一区三区| 亚洲欧美激情在线| 99久久婷婷国产综合精品电影| 欧美极品aⅴ影院| 成人小视频在线观看| 中文字幕一区二区三区在线播放| 国产一区二区在线电影| 久久亚洲精精品中文字幕早川悠里 | 国产精品一区二区91|