• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 245
  • Last Modified:

Follow up on: I want to copy the favorites to another location for restoring it later.....

Following up on http://www.experts-exchange.com/Programming/Programming_Languages/Delphi/Q_21904991.html

Hi all

The person for whom i was making this program asked if it was possible for her, to choose the backup location instead of me setting the folder in advance, I managed to get the selected location in an editfield, but how to go from there?

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Folders, StdCtrls, ShellApi, FileCtrl, ShlObj, ActiveX;

type
  TForm1            =  class(TForm)
    btn1: TButton;
    btn2: TButton;
    btn3: TButton;
    edt1: TEdit;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
  private
     // Private declarations
  public
     // Public declarations
  end;

var
  Form1:            TForm1;
  lpbi: TBrowseInfo;
  pidlStart: PItemIDList;
  Malloc: IMalloc;
  whichfolder: string;
  pidlSelected: PItemIDList;

implementation
{$R *.DFM}



function Transfer(FromPath, ToPath: String): Boolean;
var  lpOpStruct:    TSHFileOpStruct;
begin

  // Clear struct
  FillChar(lpOpStruct, SizeOf(TSHFileOpStruct), 0);

  // Set params
  lpOpStruct.Wnd:=GetDesktopWindow;
  lpOpStruct.wFunc:=FO_COPY;
  lpOpStruct.pFrom:=PChar(FromPath+'\*'#0#0);
  lpOpStruct.pTo:=PChar(ToPath+#0#0);
  lpOpStruct.fFlags:=FOF_NOCONFIRMATION or FOF_SILENT or FOF_NOERRORUI or FOF_NOCONFIRMMKDIR;

  // Perform the operation
  result:=(SHFileOperation(lpOpStruct) = 0) and (lpOpStruct.fAnyOperationsAborted = False);

end;


// Import the favorites
procedure TForm1.btn2Click(Sender: TObject);
var  szFavorites:   String;
begin

  // Get favorites folder
  szFavorites:=GetFolderPath(CSIDL_FAVORITES);

  // Check folder
  if ((GetFileAttributes(PChar(szFavorites)) and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) then
  begin
     // Transfer from backup loaction
     Transfer('d:\backup\favorites', szFavorites);
  end;

end;



//this lets the user select a backupfolder with variable name = whichfolder
procedure TForm1.btn3Click(Sender: TObject);
 var
 lpbi: TBrowseInfo;
  pidlStart: PItemIDList;
  Malloc: IMalloc;
  whichfolder: string;
  pidlSelected: PItemIDList;

begin
SHGetSpecialFolderLocation(Handle, $00, pidlStart);
  SHGetMalloc(Malloc);
  with lpbi do
  begin
    hwndOwner := Handle;
    pidlRoot := pidlStart;
    GetMem(pszDisplayName, MAX_PATH);
    lpszTitle := PChar('Kies map voor het opslaan....');
    ulFlags := $00000051;
    lpfn := nil;
  end;
  pidlSelected := SHBrowseForFolder(lpbi);
  if pidlSelected <> nil then
  begin
    if SHGetPathFromIDList(pidlSelected, lpbi.pszDisplayName) then
    whichfolder := StrPas(lpbi.pszDisplayName);
    edt1.Text:=whichfolder; //here i will have the user selected location
    Malloc.Free(pidlSelected);
  end;
  FreeMem(lpbi.pszDisplayName);
  Malloc.Free(pidlStart);

end;


// Export the favorites
procedure TForm1.btn1Click(Sender: TObject);
var  szFavorites:   String;
begin

  // Get favorites folder
  szFavorites:=GetFolderPath(CSIDL_FAVORITES);

  // Check folder
  if ((GetFileAttributes(PChar(szFavorites)) and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) then
  begin
     // Transfer to backup location
     Transfer(szFavorites, 'd:\backup\favorites');
  end;

end;
end.
0
fdehell
Asked:
fdehell
1 Solution
 
Russell LibbySoftware Engineer, Advisory Commented:
In the export routine (under btn1Click), just substitue the TO path with the edit field contents. The routine I gave you will create the path if it does not exit. To enhance the code, you should probably check for a blank edit field, and very that the Transfer routine is successful eg:

  if not(Transfer(frompath, topath)) then ShowMessage('export failed');


Russell

---

// Export the favorites
procedure TForm1.btn1Click(Sender: TObject);
var  szFavorites:   String;
begin

  // Get favorites folder
  szFavorites:=GetFolderPath(CSIDL_FAVORITES);

  // Check folder
  if ((GetFileAttributes(PChar(szFavorites)) and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) then
  begin
     // Transfer to backup location
     Transfer(szFavorites, Edit1.Text);
  end;

end;
0
 
fdehellAuthor Commented:
Perfect thx!!!!
0

Featured Post

[Webinar] Cloud and Mobile-First Strategy

Maybe you’ve fully adopted the cloud since the beginning. Or maybe you started with on-prem resources but are pursuing a “cloud and mobile first” strategy. Getting to that end state has its challenges. Discover how to build out a 100% cloud and mobile IT strategy in this webinar.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now