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
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
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
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
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
Bonjour à toutes et à tous,
@ djeckelle, Génial cette astuce et merci, cela me servira certainement.
@+,
Cincap
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
La tout de suite je dirais qu'il faut intercepter l'événement, faire un truc du genre:
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
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;
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
@ 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
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;Utilisation :
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;
@+,
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
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 :
Utilisation :
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
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MonTOpenDialog.onfolderchange := ODFolderChange;
Valable aussi pour TSaveDialog ou TSavePictureDialog.
@+,
Cincap
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
@ djeckelle, tout le mérite te revient, j'ignorai le tableau des différentes constances.
@+,La connaissance s'accroit quand on la partage !
Cincap
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager