Enregistrer et renomer un fichier apres utilisation de "opendialog", m

diabolic Messages postés 4 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 9 octobre 2003 - 18 janv. 2003 à 15:03
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 18 janv. 2003 à 16:38
bonjour

J'ai crée un composant "opendialog" qui apparait au clique sur un bouton, dans le but de selectionner une image bmp,
puis une fois l'image selectionné, je voudrais que le programme enregistre automatiquement l'image selectionné dans le répertoire "system de windows et qu'il la renomme automatiquement en oemlogo.bmp

je suis un débutant en delphi, pouvez vous me dire comment je peux copier l'image automatiquement dans "system" et la renomer apres avoir selectionné une image avec un "opendialog"

voici la source de la partie du programme

begin
//charger image
OpenDialog1.InitialDir:='c:\Windows';
OpenDialog1.Execute;
if OpenDialog1.FileName= '' then
begin
beep;
ShowMessage('Vous n''avez pas sélectionné une image !');
end
end;

merci d'avance pour votre aide

cordialement

sylvain SOUZY

3 réponses

magicvinni Messages postés 235 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 26 juillet 2010
18 janv. 2003 à 16:01
Il y a un exemple de l'utilisation de BlockRead et BlockWrite dans delphi va voir il montre comment faire une copie de fichier. N'hesite pas si tu ne comprend pas
MagicVinni
0
cs_RMD Messages postés 84 Date d'inscription mercredi 25 septembre 2002 Statut Membre Dernière intervention 21 mai 2004
18 janv. 2003 à 16:16
Bonjour,
Essaye cela :

if OpenDialog1.Execute Then
Begin
//Copie en écrasant le fichier s'il existe (False)
if CopyFile(PChar(OpenDialog1.Filename),
PChar(c:\Windows\System\oemlogo.bmp),False) then
//Copie Ratée
Begin
//...
End;
End;

Pense à mettre le filtre de l'OpenDialog à *.BMP pour éviter les erreurs de format d'image...

@+ RMD

pro.wanadoo.fr/rmd/
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
18 janv. 2003 à 16:38
Pour quelqu'un qui débute, l'utilisation de BloRead et BlockWrite est un peu compliqué. A mon sens, celà n'a d'utilité que si l'on souhaite afficher une progression lors de la copie.
Aussi, voici un code standard qui fonctionne

{$A+,B-,C+,D+,E-,F-,G+,H+,I+,J-,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1}
{$MINSTACKSIZE $00004000}
{$MAXSTACKSIZE $00100000}
{$IMAGEBASE $00400000}
{$APPTYPE GUI}
{-----------------------------------------------------------------------------
 Unit Name: UMainDeplacForm
 Author:    delphiprog
 Purpose:   Copier un fichier .BMP, choisi par l'utilisateur, dans le
            répertoire où est installé Windows et nomme la copie en
            OEMLogo.bmp
 History:  18/01/2003 création pour Diabolic (Sylvain SOUZY)
-----------------------------------------------------------------------------}

unit UMainDeplacForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 =  class(TForm)
    OpenDialog1: TOpenDialog;
    btnSaveAndRename: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btnSaveAndRenameClick(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;
  //WinDir reçoit le chemin de Windows
  WinDir : array[0..Max_Path] of char;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  //Recherche du chemin où est installé Windows
  GetWindowsDirectory(Windir, SizeOf(WinDir));
  //obliger à sélectionner un fichier existant
  with OpenDialog1 do
  begin
    Options := Options + [ofFileMustExist];
    DefaultExt := 'BMP';
    InitialDir := Windir;
    Filter := 'Fichiers bitmap|*.bmp';
  end;
end;

procedure TForm1.btnSaveAndRenameClick(Sender: TObject);
var
  Source, Target : TFileStream;
begin
  //Si l'utilisateur a appuyé sur OK
  if OpenDialog1.Execute then
  begin
    //Ouverture de la source en lecture
    Source := TFileStream.Create(Opendialog1.FileName, fmOpenRead or fmShareDenyWrite);
    try
      //Ouverture du fichier de destination en écriture
      Target := TFileStream.Create(Windir + 'OEMLogo.bmp', fmOpenWrite or fmShareDenyRead);
      try
        //Copier le contenu de Source dans Target
        Target.CopyFrom(Source, Source.Size);
      finally
        Target.Free;
      end;
    finally
      Source.Free;
    end;
  end;
end;

end.


Il y a plusieurs manières de réaliser une copie de fichier.
-> copie binaire (BlockRead/BlockWrite)
-> caractères par caractères...
-> en utilisant les flux de fichiers (TFileStream).
NB : ici, je n'ai pas fixé le chemin de Windows à 'c:\Windows' car ce chemin n'est pas valable pour Win2k, NT, etc.
J'ai préférré le demander à Windows lui-même.
Attention aussi à l'utilisation de la méthode Execute sur les composants boites de dialogue : elle renvoie vrai si l'utilisateur a appuyé sur Ok et faux dans les autres cas.
En mettant ofFileMustExists dans les options, tu es dispensé de vérifier que le fichier sélectionné existe bien. C'est beaucoup plus sûr.

Bonne continuation et bon apprentissage de Delphi.
May Delphi be with you
0
Rejoignez-nous