28. september 1999 - 19:02Der er
4 kommentarer og 2 løsninger
hjælp med copering
hvordan for jeg delphi til at kopier en hen mappe eller et heldt drev af gangen. Progarmmet skal kopier alt hvad der er på a:\ til en mappe som liger c:\windows\skrivebord\ny mappe
Denne unit viser hvordan du bruger copy, move osv. ligesom hvis du brugte stifinder til at gøre det med. Den viser dog også kopieringsboksen ligesom stifinder!
unit win95;
{For copying, moving and erasing files and folders like Windows 95 Explorer.}
function Win95Copy(Owner: Integer; FromFile,ToFile: String; RenameOnCollision, Confirm: boolean): Boolean; function Win95Move(Owner: Integer; FromFile,ToFile: String; RenameOnCollision, Confirm: boolean): Boolean;
{If SendToRecycleBin is true then files will be sent to Windows RecycleBin else they will be wiped out} function Win95Erase(Owner: Integer; WichFiles: String; SendToRecycleBin, Confirm: Boolean): Boolean;
implementation
function GetFolderPath(Const FolderName: Str10): String; begin with TRegistry.Create do Try RootKey:=HKEY_CURRENT_USER; OpenKey(fpRootKey,False); Result:=ReadString(FolderName); finally Free; end; end;
procedure Win95AddToRecentDocs(Const Filename: string); begin SHAddToRecentDocs(SHARD_PATH, @Filename[1]); end;
procedure Win95ClearRecentDocs; begin SHAddToRecentDocs(SHARD_PATH, nil); end;
function Win95Copy(Owner: Integer; FromFile,ToFile: String; RenameOnCollision, Confirm: boolean): Boolean; var Struct : TSHFileOpStructA; MultDest: boolean; begin FillChar(Struct, SizeOf(Struct), 0); MultDest:=pos(';',ToFile)>0; While pos(';',FromFile)>0 do FromFile[pos(';',FromFile)]:=#0; While pos(';',ToFile)>0 do ToFile[pos(';',ToFile)]:=#0; FromFile:=FromFile+#0#0; ToFile:=ToFile+#0#0; with Struct do begin wnd :=Owner; wFunc :=FO_Copy; pFrom :=PChar(FromFile); pTo :=PChar(ToFile); fFlags:=FOF_ALLOWUNDO or FOF_FILESONLY; If MultDest then fFLags:=fFlags or FOF_MULTIDESTFILES; If RenameOnCollision then fFLags:=fFlags or FOF_RENAMEONCOLLISION; If not Confirm then begin fFLags:=fFlags or FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR; end; hNameMappings:=nil; lpszProgressTitle:=nil; end; result:=(SHFileOperationA(Struct)=0) and (not Struct.fAnyOperationsAborted); end;
function Win95Move(Owner: Integer; FromFile,ToFile: String; RenameOnCollision, Confirm: boolean): Boolean; var Struct : TSHFileOpStructA; MultDest: boolean; begin FillChar(Struct, SizeOf(Struct), 0); MultDest:=pos(';',ToFile)>0; While pos(';',FromFile)>0 do FromFile[pos(';',FromFile)]:=#0; While pos(';',ToFile)>0 do ToFile[pos(';',ToFile)]:=#0;
FromFile:=FromFile+#0#0; ToFile:=ToFile+#0#0; with Struct do begin wnd :=Owner; wFunc :=FO_Move; pFrom :=PChar(FromFile); pTo :=PChar(ToFile); fFlags:=FOF_ALLOWUNDO or FOF_FILESONLY; If MultDest then fFLags:=fFlags or FOF_MULTIDESTFILES; If RenameOnCollision then fFLags:=fFlags or FOF_RENAMEONCOLLISION; If Confirm then fFLags:=fFlags or FOF_NOCONFIRMATION; hNameMappings:=nil; lpszProgressTitle:=nil; end; result:=(SHFileOperationA(Struct)=0) and (not Struct.fAnyOperationsAborted); end;
function Win95Erase(Owner: Integer; WichFiles: String; SendToRecycleBin, Confirm: Boolean): Boolean; var Struct : TSHFileOpStructA; begin FillChar(Struct, SizeOf(Struct), 0); While pos(';',WichFiles)>0 do WichFiles[pos(';',WichFiles)]:=#0; WichFiles:=WichFiles+#0#0; with Struct do begin wnd :=Owner; wFunc :=FO_Delete; pFrom :=PChar(WichFiles); pTo :=nil; If not Confirm then fFlags:=FOF_NOCONFIRMATION; If SendToRecycleBin then fFLags:=fFlags or FOF_ALLOWUNDO or FOF_FILESONLY else fFlags:=fFlags or 0 or FOF_FILESONLY; hNameMappings:=nil; lpszProgressTitle:=nil; end; result:=(SHFileOperationA(Struct)=0) and (not Struct.fAnyOperationsAborted); end;
Hmm.. API måden at gøre det på. Min måde at gøre det på var sjovere at side at lave :) Der kunne man også bedre overskue hvad der foregik.. (se http://www.eksperten.dk/spm.asp?id=4646)
Well, der er altså 2 overordnede måder at gøre det på: Med api som her, hvor man så kan se den fjollede dialog med to mapper og flyvende filer. Eller den anden, som snorga foreslår, hvor det hele foregår i delphi-programmet - og man selv bestemmer hvad der foregår.
Så kan man jo vælge sin stil - er den ikke en explorer-erstatning du er ved at lave, er overstående nok overkill... :)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.