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 :

[TSaveDialog] Problèmes avec type de fichier [FAQ]


Sujet :

Delphi

  1. #1
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut [TSaveDialog] Problèmes avec type de fichier
    Salut à tous
    Dans mon appli, j'ai une TSaveDialog (intégrée à une TAction).
    Sur cette dialog, j'ai mis plusieurs types:
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Fichiers TopoPR textes (*.prdt)
    Fichiers TopoPR binaires (*.prdb)
    Tous les fichiers (*.*)
    avec le filtre qui va bien

    Seulement voila: si je fais enregistrer sous, mon appli lance cette dialog. Elle est par défaut à *.prdt
    Si je change à *.prdb, je voudrais que ça modifie le nom du fichier. par exemple, s'il y a "Test.prdt", ça se change en "Test.prdb".

    Autre chose, dans cette même boîte, Si je tape juste "Test", je voudrais qu'il m'ajoute le .prdb ou .prdb automatiquement que je n'ai pas à le faire moi-même... Bon ça à la limite, c'est pas trop grave, je sais comment faire mais bon...

    Il me semblait que c'étaient des comportements par défaut mais visiblement, ce n'est pas le cas

    Evidemment, j'ai essayé de passer par les évènements de la TSaveDialog. Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TMain.FileSaveAsSaveDialogTypeChange(Sender: TObject);
    begin
      FileSaveAs.Dialog.FileName := 'Test';
    end;
    Mais ça ne fait rien du tout. L'évènement est bien déclenché mais la modification de FileName ne change rien Me dites pas qu'il faut récupérer le TEdit avec son handle et tout le bazar!

    Bref si quelqu'un sait comment faire tout ceci...
    Merci d'avance

    Note: je suis sous Turbo Explorer et Win Xp Pro SP2.

  2. #2
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Salut,
    Essaye ce code pour voir ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Procedure TForm1.Button1Click(Sender: TObject);
    const
      cTabExt: array[0..2]of PChar = ('txt','asc','dat');
    begin
      if SaveDialog1.Execute then
        label1.caption := ChangeFileExt(SaveDialog1.FileName,cTabExt[SaveDialog1filterIndex-1]);
    end;

  3. #3
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Merci de ta réponse JLOUIS
    Mais je voudrais que cette action se fasse pendant que la boite de dialogue est affichée pas après

  4. #4
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par Pedro
    Merci de ta réponse JLOUIS
    Mais je voudrais que cette action se fasse pendant que la boite de dialogue est affichée pas après
    J'y réfléchi

    Au passage, j'aime bien ton bonnet de père Noël

  5. #5
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Déjà, tu as une propriété DefaultExt, pour la classe TSaveDialog
    Dedans, tu mets prdb

  6. #6
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par waskol
    Déjà, tu as une propriété DefaultExt, pour la classe TSaveDialog
    Dedans, tu mets prdb
    Non cette option sert juste à déterminer si le type par défaut à été changé ou non
    Donc ça ne convient pas
    Citation Envoyé par waskol
    Au passage, j'aime bien ton bonnet de père Noël
    Merci

  7. #7
    Membre confirmé
    Avatar de Philippe Gormand
    Inscrit en
    Mars 2002
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 330
    Points : 647
    Points
    647
    Par défaut
    Salut Pedro.

    C'est vrai, il est bien ton bonet de père noël.

    Pour ton problème, à part modifier le source du composant je ne vois pas, mais...
    Ce que j'emplois comme technique, c'est de changer l'extension du fichier après fermeture de la boite de dialogue.
    -1- On peut connaitre l'indexe du filtre sélectionné : Propriété "FilterIndex".
    -2- Je force l'extension du nom du fichier avec la fonction ChangeFileExt.

    Si cela peut t'aider

    A+

  8. #8
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par Philippe Gormand
    Salut Pedro.

    C'est vrai, il est bien ton bonet de père noël.

    Pour ton problème, à part modifier le source du composant je ne vois pas, mais...
    Ce que j'emplois comme technique, c'est de changer l'extension du fichier après fermeture de la boite de dialogue.
    -1- On peut connaitre l'indexe du filtre sélectionné : Propriété "FilterIndex".
    -2- Je force l'extension du nom du fichier avec la fonction ChangeFileExt.

    Si cela peut t'aider

    A+
    Merci Philippe mais à vrai dire c'est plutôt l'autre problème qui m'intéresse
    En fait, je savais et je comptais déjà faire comme ça. Je voulais juste savoir si je n'étais pas en train de réinventer la roue

    Mais pour l'autre histoire, le problème reste entier

  9. #9
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Allez, hop, rien ne résiste au maître waskol

    A mettre dans le OnTypeChange :


    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
    uses CommDlg,Dlgs,windows,dialogs,etc...; 
     
    procedure TForm1.SaveDialog1TypeChange(Sender: TObject);
    var NomFic,NewFic,NewExt,s:string;
        AHandle:HWND;
         buf:array [0..MAX_PATH] of char;
         MaSaveDialog:TSaveDialog;
         HandleParent:THandle;
    begin
      MaSaveDialog := (Sender as TSaveDialog);
      //obtenir le Handle du parent de la boite de dialogue
      HandleParent:= GetParent(MaSaveDialog.Handle);
      // obtenir le nom de fichier entré par l'utilisateur
      SendMessage(H, CDM_GETSPEC, MAX_PATH,integer(@buf));
      S := buf;
      if ExtractFileExt(s)='' then s:=s+'.prdb';
      NomFic:=s;
      NewFic:=NomFic;
     
      case (MaSaveDialog.FilterIndex div 2) of
      //"div 2" parce que la liste des filtres va par tranche de 2
      0:NewExt:='.prdt';
      1:NewExt:='.prdb';
      end;
      if NewExt<>''
      then NewFic:=ChangeFileExt(NomFic,NewExt);
    // Et hop, changement du nom de fichier ;)
      SendMessage(H,CDM_SETCONTROLTEXT,edt1,integer(PChar(NewFic)));
    end;
    Je te laisse rédiger la QR qui va avec pour la peine

  10. #10
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par waskol
    Allez, hop, rien ne résiste au modeste waskol
    Ah tu m'en diras tant
    Merci mon gars

    J'essaie ce soir

  11. #11
    Membre confirmé
    Avatar de Philippe Gormand
    Inscrit en
    Mars 2002
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 330
    Points : 647
    Points
    647
    Par défaut
    Bien vu Waskol.

    J'aurais du chercher un peu plus.

    merci pour le tuyau.

  12. #12
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par Pedro
    Ah tu m'en diras tant
    Merci mon gars

    J'essaie ce soir

    J'ai hésité à mettre ta version, mais faut bien se congratuler de temps en temps (surtout que ça ne m'arrive pas souvent) : y'a pas de mal a se faire du bien

  13. #13
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    C'est bon merci waskol ça marche impec

    Voici le code que j'ai utilisé qui modifie un peu le code de notre waskol international mais néanmoins étourdi
    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
     
    var NomFich: string;
        buf: array [0..MAX_PATH] of char;
        MaSaveDialog: TSaveDialog;
        HandleParent: THandle;
    begin
      MaSaveDialog := (Sender as TSaveDialog);
      //obtenir le Handle du parent de la boite de dialogue
      HandleParent:= GetParent(MaSaveDialog.Handle);
      // obtenir le nom de fichier entré par l'utilisateur
      SendMessage(HandleParent, CDM_GETSPEC, MAX_PATH, integer(@buf));
      NomFich := buf;
     
      case (MaSaveDialog.FilterIndex div 2) of
      //"div 2" parce que la liste des filtres va par tranche de 2
        0: NomFich := ChangeFileExt(NomFich, '.prdt');
        1: NomFich := ChangeFileExt(NomFich, '.prdb');
      end;
    // Et hop, changement du nom de fichier ;)
      SendMessage(HandleParent, CDM_SETCONTROLTEXT, edt1, integer(PChar(NomFich)));
    end;
    PS: c'est donc bien ce que je pensais: cette fonction nécessite de récupérer l'Edit par son identifiant et Handle... C'est vraiment dommage

    Merci en tout cas

  14. #14
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par Pedro
    C'est bon merci waskol ça marche impec

    Voici le code que j'ai utilisé qui modifie un peu le code de notre waskol international mais néanmoins étourdi
    Traitre !!!

  15. #15
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    et si en fait un peut de modif avec ce code en remplassant un peut le case
    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
    Function  GetFiltre(s:string;t:integer):string;
    var  i,j:integer;
    begin
         result:='';j:=0;
         i:=0;
         t:=(t-1)*2+1;
         while (j<Length(s)) and (i<>t) do
           begin
             inc(j);
             if s[j]='|' then inc(i);
           end;
         inc(j);
         while (j<=Length(s)) and (s[j]<>'|') do
           begin
            result:=result+s[j];
            inc(j);
           end;
    end;
    procedure TForm1.SaveDialog1TypeChange(Sender: TObject);
    begin
         ShowMessage(GetFiltre(SaveDialog1.Filter,SaveDialog1.FilterIndex));
     
    end;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème avec type de fichier
    Par Invité dans le forum Langage
    Réponses: 1
    Dernier message: 21/04/2011, 16h43
  2. [Tableaux] problème récupération type de fichier
    Par Methode dans le forum Langage
    Réponses: 2
    Dernier message: 13/02/2007, 22h11
  3. Problème avec type de données
    Par yancimer dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/09/2006, 16h54
  4. [debutant] problème avec type à utiliser
    Par mlequim dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 15/07/2005, 16h08
  5. Réponses: 18
    Dernier message: 30/06/2005, 13h30

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