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
[RIA SERVICES] INCLUDE ET DOMAINDATASOURCE[RIA SERVICES] INCLUDE ET DOMAINDATASOURCE par Audrey
Dans un de mes articles précédents , j'avais parlé des DomainDataSource avec RIA Services dans le cas d'une interface Maître - Détail. Dans le même principe, je vais parler d'une autre manière de mettre en forme ce cas d'interface avec RIA Services. Et po...
Cliquez pour lire la suite de l'article par Audrey ZUNE : VERSION ZUNE SOFTWARE V 4.2 ET LA SOCIALISATIONZUNE : VERSION ZUNE SOFTWARE V 4.2 ET LA SOCIALISATION par ROMELARD Fabrice
Une des nouveautés de la version V 3.0 était l'apparition de l'onglet Social qui ne fonctionnait que si le MarketPlace était activé sur son poste. Cela limitait donc son intérêt, car hors du cadre commercial USA-CANADA, peu de monde trouva...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice PRATIQUE DE SILVERLIGHT PAR ERIC AMBROSIPRATIQUE DE SILVERLIGHT PAR ERIC AMBROSI par MPOWARE
Je viens de finir la lecture du dernier livre d'
Eric Ambrosi
éditions PEARSON
Son livre donne une approche pratique de Silverlight qui sera aussi bien comprise par le développeur que par le designeur.
Tous les aspects du développement RIA sont abor...
Cliquez pour lire la suite de l'article par MPOWARE APPRENDRE à DéVELOPPER POUR LES MOBILES AVEC LA NOUVELLE GéNéRATION .NETAPPRENDRE à DéVELOPPER POUR LES MOBILES AVEC LA NOUVELLE GéNéRATION .NET par odewit
2 déclinaisons de Silverlight et 2 déclinaisons de Mono permettent dorénavant (ou permettront prochainement) de développer des applications .NET mobiles pour les principales plates-formes du marché :
Silverlight pour Symbian, basé sur Silverlight 2...
Cliquez pour lire la suite de l'article par odewit ZUNE : NOUVELLE VERSION DU ZUNE SOFTWARE - V 4.2ZUNE : NOUVELLE VERSION DU ZUNE SOFTWARE - V 4.2 par ROMELARD Fabrice
Avec la dernière génération du lecteur MP3 de Microsoft, le ZUNE HD, Microsoft a publié une nouvelle version du logiciel pour PC. Ainsi, je me suis décidé à installer celle-ci sur mon Tablet PC ACER, comme toujours le logiciel est donc tél...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : DELPHIRE : DELPHI par overtaker
Cliquez pour lire la suite par overtaker RE : DELPHIRE : DELPHI par rt15
Cliquez pour lire la suite par rt15
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|