Accueil > > > COPYFILEEX ET PROGRESSBAR
COPYFILEEX ET PROGRESSBAR
Information sur la source
Description
C'est un petit programme de démonstration de l'utilisation de la fonction CopyFileEx avec une procédure de rappel. Le programme effectue une simple copie de fichier, avec mise à jour d'un progressbar pendant la copie. Ce programme a été testé ( et amélioré ) par DelphiProg que je remercie particulièrement. ATTENTION : CopyFileEx n'est pas compatible avec Windows 95,Windows 98 et Windows Me ! Il a été testé sous Windows 2000 mais doit normalement fonctionner avec Windows NT et Windows XP
Source
- // Fonction "CallBack" appelée par CopyFileEx pour signaler l'avancement de la copie
- function CopyCallBack(
- TotalFileSize: LARGE_INTEGER; // Taille totale du fichier en octets
- TotalBytesTransferred: LARGE_INTEGER; // Nombre d'octets déjàs transférés
- StreamSize: LARGE_INTEGER; // Taille totale du flux en cours
- StreamBytesTransferred: LARGE_INTEGER; // Nombre d'octets déjà tranférés dans ce flus
- dwStreamNumber: DWord; // Numéro de flux actuem
- dwCallbackReason: DWord; // Raison de l'appel de cette fonction
- hSourceFile: THandle; // handle du fichier source
- hDestinationFile: THandle; // handle du fichier destination
- ProgressBar : TProgressBar // paramètre passé à la fonction qui est une
- // recopie du paramètre passé à CopyFile Ex
- // Il sert à passer l'adresse du progress bar à
- // mettre à jour pour la copie. C'est une
- // excellente idée de DelphiProg
- ): DWord; far; stdcall;
- var
- EnCours: Int64;
- begin
- // Calcul de la position du progresbar en pourcent, le calcul doit être effectué dans
- // une variable intermédiaire de type Int64. Pour éviter les débordement de calcul
- // dans la propriété Position de type integer.
- EnCours := TotalBytesTransferred.QuadPart * 100 div TotalFileSize.QuadPart;
- If ProgressBar<>Nil Then ProgressBar.Position := EnCours;
- // La fonction doit définir si la copie peut être continuée.
- Result := PROGRESS_CONTINUE;
- end;
-
- procedure TForm1.Button1Click(Sender: TObject);
- var Retour: LongBool;
- begin
- if (Edit1.Text = '') or (Edit2.Text = '') or (Edit1.Text = Edit2.Text) then
- Exit;
- if FileExists(Edit2.Text) and
- (MessageDlg('Le fichier de destination existe, voulez-vous le remplacer ?',
- mtconfirmation, [mbYes, mbNo], 0) <> mrYes) then
- Exit;
- Retour := False;
- if not CopyFileEx(
- PChar(Edit1.Text), // Nom du fichier d'origine
- PChar(Edit2.Text), // Nom du fichier de destination
- @CopyCallBack, // Adresse de la fonction appelée durant la copie
- ProgressBar1, // Paramètre auxiliaire qui sert ici à définir le progress bar
- // à mettre à jour [DelphiProg]
- @Retour, // adresse d'une variable booléène que la fonction teste
- // en permanence pour éventuellement stopper la copie
- COPY_FILE_RESTARTABLE) // Si la copie est stoppée, un nouvel appel avec les mêmes
- // paramètres permet de la continuer
- then ShowMessage(IntToStr(GetLastError));
- end;
-
// Fonction "CallBack" appelée par CopyFileEx pour signaler l'avancement de la copie
function CopyCallBack(
TotalFileSize: LARGE_INTEGER; // Taille totale du fichier en octets
TotalBytesTransferred: LARGE_INTEGER; // Nombre d'octets déjàs transférés
StreamSize: LARGE_INTEGER; // Taille totale du flux en cours
StreamBytesTransferred: LARGE_INTEGER; // Nombre d'octets déjà tranférés dans ce flus
dwStreamNumber: DWord; // Numéro de flux actuem
dwCallbackReason: DWord; // Raison de l'appel de cette fonction
hSourceFile: THandle; // handle du fichier source
hDestinationFile: THandle; // handle du fichier destination
ProgressBar : TProgressBar // paramètre passé à la fonction qui est une
// recopie du paramètre passé à CopyFile Ex
// Il sert à passer l'adresse du progress bar à
// mettre à jour pour la copie. C'est une
// excellente idée de DelphiProg
): DWord; far; stdcall;
var
EnCours: Int64;
begin
// Calcul de la position du progresbar en pourcent, le calcul doit être effectué dans
// une variable intermédiaire de type Int64. Pour éviter les débordement de calcul
// dans la propriété Position de type integer.
EnCours := TotalBytesTransferred.QuadPart * 100 div TotalFileSize.QuadPart;
If ProgressBar<>Nil Then ProgressBar.Position := EnCours;
// La fonction doit définir si la copie peut être continuée.
Result := PROGRESS_CONTINUE;
end;
procedure TForm1.Button1Click(Sender: TObject);
var Retour: LongBool;
begin
if (Edit1.Text = '') or (Edit2.Text = '') or (Edit1.Text = Edit2.Text) then
Exit;
if FileExists(Edit2.Text) and
(MessageDlg('Le fichier de destination existe, voulez-vous le remplacer ?',
mtconfirmation, [mbYes, mbNo], 0) <> mrYes) then
Exit;
Retour := False;
if not CopyFileEx(
PChar(Edit1.Text), // Nom du fichier d'origine
PChar(Edit2.Text), // Nom du fichier de destination
@CopyCallBack, // Adresse de la fonction appelée durant la copie
ProgressBar1, // Paramètre auxiliaire qui sert ici à définir le progress bar
// à mettre à jour [DelphiProg]
@Retour, // adresse d'une variable booléène que la fonction teste
// en permanence pour éventuellement stopper la copie
COPY_FILE_RESTARTABLE) // Si la copie est stoppée, un nouvel appel avec les mêmes
// paramètres permet de la continuer
then ShowMessage(IntToStr(GetLastError));
end;
Conclusion
http://Delphiprog.fr.fm http://nono40.developpez.c om
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|