IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Boite de dialogue enregistrer sous


Sujet :

Delphi

  1. #1
    Invité(e)
    Invité(e)
    Par défaut Boite de dialogue enregistrer sous
    Bonjour,

    j'ai un problème qui peut sembler bizarre que je vous expose :

    Je souhaite créer une petite appli qui automatiquement ouvre une boite de dialogue "enregistrer sous" et demande à l'utilisateur un nom de fichier et un emplacement de sauvegarde.

    - Puis une fois le nom et l'emplacement récupéré en variable,

    - un fichier défini est copié à l'emplacement définit et renommé selon le nom de fichier par l'utilisateur.

    Exemple :

    j'ai un fichier qui s'appelle toto.txt l
    localisé ici c:\toto.txt

    L'utilisateur a lancé depuis un programme Y un programme delphi créé qui s'appelle myapp.exe

    Partie 1
    A l'ouverture myapp.exe lui demande automatiquement un nom de fichier et un lieu de sauvegarde

    L'utilisateur choisit "lulu" et l'emplacement de stockage "mes documents"

    myapp.exe va récupérer en variable le nom de fichier choisit et l'emplacement de suvegarde choisi


    Partie 2
    Puis myapp.exe va :


    1. copier le fichier c:\toto.txt à l'emplacement c:\mes documents\toto.txt

    2. puis renommer c:\mes documents\toto.txt en c:\mes documents\lulu.txt

    3. Et myapp.exe quitte

    Mon problème ? Je n'arrive pas à coder la partie 1
    Quelqu'un pourrait-il maider SVP ?

    Merci d'avance à vous !

    Arnaud

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 104
    Par défaut
    Peux tu déjà fourni le code que tu as commencé, ... un simple TSaveDialog (ou même un SelectDirectory) et un CopyFile ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Merci pour ta réponse !!!

    voilà mon pauvre code de la partie 2où je n'ai pas encore réussi à mettre les variables...

    Encore MERCI pour ton aide,

    Arnaud


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    program Projectconsole;
     
    {$APPTYPE CONSOLE}
     
    uses
      SysUtils,  FileCtrl, Windows, shellapi;
     
    begin
      { TODO -oUser -cConsole Main : implementation
     
    {$R *.dfm}
     
     
    //Copie du fichier
     
    begin
      { TODO -oUser -cConsole Main :}
     CopyFile(PChar(('c:\program files\toto.txt), PChar('c:\toto.txt), False);
    end;
     
     
    //nommage du fichier
     
    begin
      { TODO -oUser -cConsole Main :}
     RenameFile(PChar(('c: \toto.txt), PChar('c:\lulu.txt), False);
     
     
    end.

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Bon, après quelques heures tardives passées sur mon Delphi préféré, j'ai réussi (le croirez-vous ?) à faire apparaître la boite de dialogue "enregistrer sous" (je vous l'ai dit : je suis nul ).

    J'ai même réussi à la faire apparaitre automatiquement dès le lancement de l'appli avec la propriété "oncreate" cochée dans mon Form

    Voilà mon Code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    unit Backup;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        SaveDialog1: TSaveDialog;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    // pour commencer je fais appel à la boite de dialogue enregistrer (j'ai 2 composants : SaveDialog et Button1
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       SaveDialog1.filename:='';
       SaveDialog1.execute
    end;
     
    end.
    Là ce qu'il faut, c'est que je récupère la valeur de filename dans un variable et l'emplacement de la sauvegarde dans une autre variable.

    Si ce n'est pas possible, je pensais demander à mon appli d'écrire un petit fichier ridicule à l'endroit choisi par l'utilisateur, puis récpurérer le nom du ficher et l'emplacement du fichier dans 2 variables distinctes.

    POURQUOI CELA
    J'ai besoin d'appeler cette fonction depuis une très vieille appli (qui n'est pas écrite en Delphi) et qui offre des possibilités de sauvegarde minuscules.
    Donc vous comprenez que je trompe mon utilisateur en lui faisant croire qu'il est dans son appli au moment de la sauvegarde du fichier, alors qu'il est dans le petit .exe que je suis en train d'écrire.

    Ne vaut-il pas mieux tout reprendre et ré-écrire en Delphi me direz-vous ? Oh que oui !!! Mais je pare au plus pressé ! Please, s'il vous plait, vous pourriez m'aider ? Merci d'avance !!!

    Arnaud

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,
    TSaveDialog ne créer pas un fichier met d'aider l'utilisateur à indiquer où sauvegarder et nommer le fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var T:TextFile;
    ....
    if SaveDialog1.Execute then begin
       AssignFile(T,(SaveDialog1.FileName + '.txt'));
       Rewrite(T);
     end;

  6. #6
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Par défaut
    J'ai pas trop compris mais avec un SaveDialogue, tu vas demander le nom du fichier ainsi que le dossier ou il va le mettre comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      if SaveDialogue1.Execute then
      begin
    //    varNomdeFichier := ExtractFileName(SaveDialogue1.FileName);
    //    varNomrepertoire := ExtractFileDir(SaveDialogue1.FileName);
    //    CopyFile('C:\toto.txt', varNomrepertoirt + varNomdeFichier);
    // ou
        CopyFile('C:\toto.txt', SaveDialogue1.FileName);
      end;
    Voilà.

  7. #7
    Invité(e)
    Invité(e)
    Par défaut
    Un très très grand MERCI pour vos réponses !

    Voilà mon code et celà ne fonctionne pas

    Merci d'avance pour votre aide !

    Arnaud


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    unit Backup;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        SaveDialog1: TSaveDialog;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1
     
     
    implementation
     
    {$R *.dfm}
     
    // pour commencer je fais appel à la boite de dialogue enregistrer (j'ai 2 composants : SaveDialog et Button1
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       SaveDialog1.filename:='';
       SaveDialog1.Execute;
       CopyFile('C:\toto.txt',SaveDialog1.FileName);
    end;
     
    end.

  8. #8
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Salut,

    Déjà, il faut prendre une petit précaution, et mettre le code tel qu'Andry l'a posté, à savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    unit Backup;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        SaveDialog1: TSaveDialog;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1
     
     
    implementation
     
    {$R *.dfm}
     
    // pour commencer je fais appel à la boite de dialogue enregistrer (j'ai 2 composants : SaveDialog et Button1
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       SaveDialog1.filename:='';
       if SaveDialog1.Execute then
       begin
         CopyFile('C:\toto.txt',SaveDialog1.FileName);
       end;
    end;
     
    end.
    Ensuite, peux-tu nous dire en quoi ça ne fonctionne pas ?
    Qu'est ce qu'il se passe ?

  9. #9
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Par défaut
    Normal car j'ai oublier de menstionner que la source de CopyFile se trouve dans ma FAQ Delphi.

    A+

  10. #10
    Invité(e)
    Invité(e)
    Par défaut
    Merci beaucoup pour vos 2 réponses, MERCI.

    Quand je copie strictement le code dans mon "backup.pas", le code ci-dessus,

    j'obtiens des erreurs à la compilation. On dirait qu'il y a un problème au niveau de l'implémentation qui est souligné en rouge.

    [Erreur] Backup.pas(24): ';' attendu(e) mais 'IMPLEMENTATION' trouvé(e)
    [Erreur] Backup.pas(35): Types incompatibles : 'TFileName' et 'PChar'
    [Erreur fatale] Backu.dpr(5): Impossible de compiler l'unité utilisée 'Backup.pas'

    le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    unit Backup;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        SaveDialog1: TSaveDialog;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1
     
     
    implementation
     
    {$R *.dfm}
     
    // pour commencer je fais appel à la boite de dialogue enregistrer (j'ai 2 composants : SaveDialog et Button1
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       SaveDialog1.filename:='';
       if SaveDialog1.Execute then
       begin
         CopyFile('C:\toto.txt',SaveDialog1.FileName);
       end;
    end;
     
    end.
    Merci beaucoup pour votre aide !

    Arnaud

  11. #11
    Membre Expert

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Par défaut
    Alors, tu as oublié un ; apres la déclaration de Form1
    Et pour CopyFile, tu met :

    CopyFile('C:\toto.txt',PChar(SaveDialog1.FileName));

    Et ca devrait aller

  12. #12
    Invité(e)
    Invité(e)
    Par défaut
    Merci 1000 fois à vous, merci Mick !!!

    Après ce que tu m'a dit Mick, il a encore fallu que je rajoute un False et çà a marché !

    Voilà le code définitif :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    unit Backup;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        SaveDialog1: TSaveDialog;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
     
    implementation
     
    {$R *.dfm}
     
    // pour commencer je fais appel à la boite de dialogue enregistrer (j'ai 2 composants : SaveDialog et Button1
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       SaveDialog1.filename:='*.tot';
       if SaveDialog1.Execute then
       begin
         CopyFile('C:\toto.txt', PChar(SaveDialog1.FileName),False);
       end;
    end;
     
    end.
    Encore un grand MERCI,

    Je ne mets pas résolu car j'aurais encore une petite question : pour obliger mon programme à rajouter une extension précise au nom du fichier si l'utilisateur à oublié de la mettre ?

    J'ai déjà mis un filtre au composant Savedialog qui indique à l'utilisateur le nom de l'extension à mettre. mais souvent, ils effacent l'extension par erreur.

    Arnaud
    Dernière modification par Invité(e) ; 27/08/2009 à 13h25.

  13. #13
    Membre Expert

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Par défaut
    Alors, le nom de fichier complet est stocké dans FileName. C'est un string. Il suffit donc de faire FileName+'.ext'. Attention : si l'utilisateur a tapé comme nom de fichier : toto2.txt, ca donnera toto2.txt.txt !! Alors il faut d'abord savoir si il existe une extension. Pour cela, tu peux utiliser la FAQ : http://delphi.developpez.com/faq/?pa...ulernomfichier

    Voila, bonne chance !

  14. #14
    Invité(e)
    Invité(e)
    Par défaut
    Merci beaucoup Mick, merci !!!

  15. #15
    Membre Expert

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Par défaut
    J'ajouterai que si tu as plusieurs filtres, tu peux savoir lequel est choisi, pour pouvoir rajouter l'extension correspondante. (je crois que c'est filterIndex ou un truc comme ca, F1)

    Bonne chance pour la suite. (n'oublies pas le tag Résolu )

Discussions similaires

  1. [C#] Boîte de dialogue "Enregistrer sous"
    Par TmDsbsBs dans le forum ASP.NET
    Réponses: 22
    Dernier message: 31/10/2013, 17h55
  2. Réponses: 1
    Dernier message: 15/06/2007, 17h37
  3. [VBA] Renseignements sur boite de dialogue "enregistrer sous"
    Par p'tite Sandrine dans le forum Access
    Réponses: 40
    Dernier message: 22/02/2007, 10h53
  4. boite de dialogue enregistrer sous
    Par maxeur dans le forum Access
    Réponses: 8
    Dernier message: 23/01/2007, 16h23
  5. Pb Boite de dialogue "enregistrer sous"
    Par tangueros dans le forum Access
    Réponses: 2
    Dernier message: 31/07/2006, 11h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo