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 :

Affichage dans TOpenDialog


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 54
    Points : 36
    Points
    36
    Par défaut Affichage dans TOpenDialog
    Bonjour à tous
    avec : if OpenDialog.Execute
    OpenDialog s'exécute par défaut en mode affichage Liste.
    Comment faire pour qu'à l'ouverture, il soit directement
    en mode affichage Détails ?
    Merci de m'aider.
    Pierre

  2. #2
    Membre régulier Avatar de djeckelle
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2004
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2004
    Messages : 87
    Points : 101
    Points
    101
    Par défaut
    Et voilà ..Je te donne même le choix de l'affichage


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TfCalculatrice.oDlgSaveFolderChange(Sender: TObject);
    const
      FCIDM_SHVIEW_LARGEICON = $7029;
      FCIDM_SHVIEW_SMALLICON = $702A;
      FCIDM_SHVIEW_LIST = $702B;
      FCIDM_SHVIEW_REPORT = $702C;
      FCIDM_SHVIEW_THUMBNAIL = $702D;
      FCIDM_SHVIEW_TILE = $702E;
    var
      newStyle: dWord;
    begin
      newStyle := FCIDM_SHVIEW_REPORT;
      SendMessage(FindWindowEx(GetParent(oDlgSave.Handle), 0, 'SHELLDLL_DefView', nil), WM_COMMAND, newStyle, 0);
    end;
    "Il vaut mieux échouer, apprendre et s'améliorer
    que ne pas avancer."

    [Définition de l'échec en extrême programming d'après la revue programmez de Mai 2008]

    PS : Pensez au petit

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Bonjour djeckelle,
    Merci pour ta réponse.
    ... et de plus, ça fonctionne !
    Il y a vraiment des sympas et compétents sur ce forum...
    Amitiés
    Pierre

  4. #4
    Membre régulier Avatar de djeckelle
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2004
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2004
    Messages : 87
    Points : 101
    Points
    101
    Par défaut
    A charge de revanche
    "Il vaut mieux échouer, apprendre et s'améliorer
    que ne pas avancer."

    [Définition de l'échec en extrême programming d'après la revue programmez de Mai 2008]

    PS : Pensez au petit

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut Génial cette astuce !
    Bonjour à toutes et à tous,

    @ djeckelle, Génial cette astuce et merci, cela me servira certainement.

    @+,

    Cincap

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut Et dans le cas d'un TopenDialog en création !
    Voila ma question si mon TopenDialog est créé à l'exécution de la fiche, il y a aussi un moyen de choisir son affichage ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    soppd1:=TOpenPictureDialog.Create(self);
    @+,

    Cincap

  7. #7
    Membre régulier Avatar de djeckelle
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2004
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2004
    Messages : 87
    Points : 101
    Points
    101
    Par défaut
    La tout de suite je dirais qu'il faut intercepter l'événement, faire un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure WMUser(var Msg: TMessage); message WM_USER + 1;
    ...
    ...
    ...
    procedure WMUser(var Msg: TMessage);
    var
      nvlAffichage: dWord;
    begin
      nvlAffichage:= FCIDM_SHVIEW_REPORT;
      SendMessage(FindWindowEx(GetParent(oDlgSave.Handle), 0,    'SHELLDLL_DefView', nil), WM_COMMAND, newStyle, 0);
    end;
    Mais je ne suis pas certaine de mon coup pour le choix du message je n'ai pas le temps de tester si ça fonctionne mais ça doit te mettre sur la voie

    Tu peux aussi utiliser le polymorphisme et surcharger l'événement OnFolderChange de TOpenPictureDialog
    "Il vaut mieux échouer, apprendre et s'améliorer
    que ne pas avancer."

    [Définition de l'échec en extrême programming d'après la revue programmez de Mai 2008]

    PS : Pensez au petit

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut Pas de solution après mes essais !
    @ djeckelle, voila après des essais non concluants ou je m'y prends mal ou ce n'est peut être pas possible !

    Je ne vais pas abuser de ton temps, encore merci pour cette astuce.

    @+,

    Cincap

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut Solution avec TopenDialog(self)
    Bonsoir à toutes et à tous,

    Voici une solution qui utilise l'astuce de djeckelle mais avec la création d'un TopenDialog(self) sur la fiche.

    Créer une procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     private
        { Déclarations privées }
        procedure ODFolderChange(Sender: TObject);
      public
        { Déclarations publiques }
      end;
    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
    procedure TFTest.ODFolderChange(Sender: TObject);
    var 
     H, H2: THandle;
     OD: TOpenDialog; 
     begin 
     try 
     H := FindWindowEx(GetParent(OD.Handle), 0, PChar('SHELLDLL_DefView'), nil); 
     H2 := FindWindowEx(H, 0, PChar('SysListView32'), nil); 
     if (H <> 0) and (H2 <> 0) then 
     begin 
     SendMessage(H, WM_COMMAND, $702d, 0); //Voir Tableau des Constance de l'astuce proposée
     Windows.SetFocus(H2); 
     PostMessage(H2, WM_KEYDOWN, VK_SPACE, 0); 
     end; 
     except 
     end; 
     end;
    Utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Var
    Spd1 : TOpenDialog; //Ou Od : TOpenDialog
     
    Begin
    spd1:=TOpenDialog.Create(self);
    spd1.OnFolderChange := ODFolderChange;
    @+,

    Cincap

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut J'ai oublié de préciser !
    Bonjour à toutes et à tous,

    @ berpi, j'ai oublié de préciser que ma solution proposée est aussi valable dans le cas de l'utilisation du composant TOpenDialog ou dans le cas d'une création dynamique.

    Dans le cas d'un composant, ne pas mettre en variable le TOpenDialog et de mettre le nom du composant dans le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TFTest.ODFolderChange(Sender: TObject);
    var 
     H, H2: THandle;
     OD: TOpenDialog;  //A enlever
     begin 
     try 
     H := FindWindowEx(GetParent(MonTOpenDialog.Handle), 0, PChar('SHELLDLL_DefView'), nil); //MonTOpenDialog nom du composant TOpenDialog
    Utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MonTOpenDialog.onfolderchange := ODFolderChange;
    De plus, à l'exécution, la sélection sur la 1ère image est automatique et permet donc d'utiliser un TOpenPictureDialog pour l'afficher dans le preview.

    Valable aussi pour TSaveDialog ou TSavePictureDialog.

    @+,

    Cincap

  11. #11
    Membre régulier Avatar de djeckelle
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2004
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2004
    Messages : 87
    Points : 101
    Points
    101
    Par défaut
    Pas mal..j'ai toujours pensé que 2 cerveaux valent mieux qu'1
    "Il vaut mieux échouer, apprendre et s'améliorer
    que ne pas avancer."

    [Définition de l'échec en extrême programming d'après la revue programmez de Mai 2008]

    PS : Pensez au petit

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut Tout le mérite te revient !
    @ djeckelle, tout le mérite te revient, j'ignorai le tableau des différentes constances.

    La connaissance s'accroit quand on la partage !
    @+,

    Cincap

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

Discussions similaires

  1. [CR8.5] Pbm d'affichage dans un While
    Par .:Tieri:. dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 14/07/2004, 10h17
  2. [mfc] affichage dans une boite de dialog
    Par chronos dans le forum MFC
    Réponses: 3
    Dernier message: 14/06/2004, 15h12
  3. [Flash MX] Pb d'affichage dans un textfield
    Par dens63 dans le forum Flash
    Réponses: 2
    Dernier message: 04/11/2003, 10h49
  4. Problème a l'affichage dans la console (printf)
    Par PhoneKilleR dans le forum C
    Réponses: 21
    Dernier message: 23/09/2003, 17h21
  5. affichage dans le front buffers ne marche pas!
    Par jamal24 dans le forum OpenGL
    Réponses: 3
    Dernier message: 22/08/2003, 19h14

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