CRÉEZ VOTRE PROPRE SLIDESHOW (DIAPORAMA) FACILEMENT

Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 - 13 août 2006 à 10:02
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 - 14 mars 2015 à 23:16
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39083-creez-votre-propre-slideshow-diaporama-facilement

hamlog Messages postés 1 Date d'inscription mercredi 5 décembre 2007 Statut Membre Dernière intervention 14 mars 2015
13 mars 2015 à 16:01
salut
SVP comment faire dans votre exemple pour mettre le chemain des photos non changeable par exemple dans la partie formCreate sans utiliser opendialog
merci d'avance
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17 > hamlog Messages postés 1 Date d'inscription mercredi 5 décembre 2007 Statut Membre Dernière intervention 14 mars 2015
14 mars 2015 à 23:16
Dans l'évènement OnCreate du Form, après la création du SlideShow, tu ajoutes cette ligne qui contient le répertoire des images que tu veux afficher :

SlideShow.Directory := 'C:\Mon_répertoire_images';

Tu pourras ensuite décortiquer cet excellent code pour apprendre la programmation en Delphi.

Bonne chance !
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656 > hamlog Messages postés 1 Date d'inscription mercredi 5 décembre 2007 Statut Membre Dernière intervention 14 mars 2015
14 mars 2015 à 22:45
Bonsoir, je ne connais pas Delphi, mais dans les langages que je connais un chemin est contenu dans une chaine de caractères, et en général c'est ce que retourne un OpenDialog.
Tu devrais mettre un point d'arrêt au moment ou le programme enregistre le retour de cette boite de dialog, regarder le format de la chaine, en espionnant le contenu de la variable en question, et mettre ton chemin à la place au bon format.
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
21 oct. 2007 à 10:10
Bonjour à toutes et à tous,

@ Cirec, bravo pour ce logiciel qui pourra être personnalisé.

Au démarrage de l'application, je pense que ce serait une idée de ne pas avoir accès aux boutons 'Start, Stop et reset) avant d'avoir choisis les photos.

Par contre, après un 1er diaporama et si on veut changer de directory mais qu'après avoir ouvert le dialogue on décide d'annuler, il y a un sérieux bug.

@ Florent, décidément tu maitrises sérieusement le bitmap.

@+,

Cincap
cs_Gecko62 Messages postés 25 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 21 octobre 2012
27 août 2006 à 18:54
Superbe source

Bravo et merci

Tout comme Francky23012301, je mets un 10 / 10
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
22 août 2006 à 16:58
Salut Cirec,

Bien Bien tout ca : une visionneuse avec des chtit effets visuels bien sympathique.

Code : Propre et fluide.

Allez un petit 10/10.
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
17 août 2006 à 18:10
Salut Cirec,

je n'ai pas eu trop le temps de voir ton code, mais le résultat est magnifique. Bravo à toi.

Thierry
cs_mcapp Messages postés 71 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 15 décembre 2011
15 août 2006 à 02:23
Encore un projet qui est très intéressant à étudier.

Et d'excellente qualité !

Une suggestion : dans la capture, il faudrait présenter une véritable photo (paysage par exemple) sinon elle n'incite pas trop à s'y intéresser avec la capture que tu présentes actuellement.

Je mets 10 bien sûr !
Bug : si tu cliques sur le bouton "change dir" et que tu referme la fenetre sans rien selectionner : ça plante
Justement, c'est ça que je suis en train d'étudier car ça m'intéresse drolement
Utilisateur anonyme
14 août 2006 à 19:33
Et que penses-tu de la procedure DoBlend ?

Merci
@+
"jette ton jouet et achète toi un vrai PC ... lol "
>> Tu rigoles, il est meilleur que le tien ^^
Mouais c'est ça, ma carte graphique est trop puissante pour ton programme ... mdr
En plus, e remarque d'apres la capture que tu te sert du compte administrateur. C'est pas bien du tout ça ^^ lol

Pour TPath, comme je le disais, j'étais dans les nuages à ce moment là.

Pour le contructeur, par contre, je ne suis pas d'accord. AOwner est de type TComponent. C'est sur que si tu le pose sur une fiche, ce sera forcément un TWinControl puisque c'est la fiche qui sera le propriétaire. Et du coup, l'animation se fera uniquement sur la fiche. Donc ce n'est pas la bonne méthode. En même temps, je n'ai pas d'autre idée donc ... ben laisse comme ça quoi !

"Merci beaucoup à Florenth pour l'intérêt que tu portes à cette source."
>> Ca fait partie des rares sources qui utilisent des objets, qui est faite pour les autres et qui en plus est plutot novatrice. A part pour l'autre qui va se faire bannir, évidemment que cette source intéresse du monde. Par contre, elle est peut-être un peu compliquée pour les débutants, c'est pour cela qu'elle n'est que peu commentée

A+
Utilisateur anonyme
14 août 2006 à 16:04
Voilà j'ai presque tout fait sauf "aOwner as TWinControl"
D'ailleurs l'aide de Delphi dit ceci :

Description
Les contrôles fenêtrés sont des contrôles qui :
Peuvent recevoir la focalisation pendant l'exécution de l'application.
Les autres contrôles peuvent afficher des données, mais l'utilisateur ne peut interagir avec un contrôle que
s'il s'agit d'un contrôle fenêtré.
Peuvent contenir d'autres contrôles.
Un contrôle contenant d'autres contrôles est un parent. Seul un contrôle fenêtré peut être le parent d'un ou
de plusieurs contrôles enfant.
Disposent d'un handle de fenêtre.
Un handle de fenêtre est l'identificateur fourni pour une fenêtre par Windows. Les contrôles fenêtrés peuvent
représenter des fenêtres contrôle standard fournies par l'environnement Windows ou des fenêtres personnalisées
définies par l'application.

Donc je me dit à partir du moment ou tu peux poser le composant celui qui l'accèpte est forcément un TWinControl ou enfant ?

Et de plus la méthode que tu proposes limite l'utilisation à un Panel alors que la je peut le mettre ailleurs (Form par Ex.)
Je vais donc encore réfléchir à ce problème ...

Pour la création avec Nil c'est une habitude que j'ai pris ce que je crée manuellement je le libère manuellement (bon c'était pas faux mais inutile)

En ce qui concerne TPath :
Comme le constructeur et le Destructeur ne sont pas surchargés et qu'ils sont vide au départ
je n'ai rien mis...
Et dans les sources de Delphi j'ai vu des utilisations identiques donc ...

Sinon pour le bug d'affichage que tu as avec les Slides ... ce doit être chez toi, moi j'ai pas ce phénomène ... jette ton jouet et achète toi un vrai PC ... lol
Non ... un peut de sérieux ... m'enfin !!!

Ah oui j'oubliais ...
J'ai déclarer une Fonction externe AlphaBlend
qui existe depuis D4 dans Windows.pas mais comme MS à fait des changement dans les Dll système (entre les versions) aujourd'hui cette fonction n'est plus accessible depuis D4 et peut être d'autres versions
Avant AlphaBlend se trouvait dans "gdi32.dll" et maintenant elle se trouve dans "msimg32.dll" ?
Ceci explique pourquoi avoir re-déclarer cette fonction

ps : Merci beaucoup à Florenth pour l'intérêt que tu portes à cette source.

Voilà amusez-vous bien
@+
Cirec
Et tiens, puisque j'y suis :
- Pourquoi mettre "nil" comme paramètre AOwner quand tu construit tes TcrIMGPanel ? Après tout, comme c'est un composant qui les possède, tu pourrais mettre "Self". Comme ça, pas besoin de les détruire (tu te souviens ??)
- Et d'ailleurs, que fait ce "SlideShow.Free" dans le FormClose ?? Vire moi ça tout de suite !!!! C'est un composant donc il se détruit AUTOMATIQUEMENT (si tu as mis autre chose que nil comme Owner) et c'est le cas.
- "FDisplay[I].parent := aOwner as TWinControl" Et si aOwner n'est pas un TWinControl ? Tu l'as dans le baba ! Il faut que tu mettes une propriété publiée "PanelParent: TWinControl" avec un getter et un setter qui l'affecte aux deux panels de ton array. (oui je te l'accorde, ça fait un peu lourd) Au passage, array[Boolean] of ... je trouve cela très très bien pensé.
- Il est crée et détruit où et quand ton TPath ? Je ne vois pas (là par contre, ça doit être moi qui suis bigleux)

Bon, je crois que c'est tout ! lol
En fait je ne sais pas vraiment si c'est un bug ....
Après vérification, tous ceux qui ont le parametre AW_SLIDE sont concernés donc c'est surement dû à la présence de ce flag.
Pour asSLeft, asSright, asSTop et asSBottom, l'effet rand bien, mais pour ceux qui proviennent d'un coin (les 4 autres), je trouve que cela rend bof bof pour ne pas dire plus !
Donc ce n'est peut être pas un bug mais juste une option que je trouve "moche" (bon, c'est exagéré bien sûr ^^)

Bon sinon, quelques suggestion auniveau du code et des fonctionnalités :
- Si tu ne mets rien dans Paint(), tu n'es pas obligé de le déclarer car il est "virtual" par défaut dans TCustomControl.
- Je trouve que ta propriété NameLabel n'est pas une bonne idée. En effet, tu figes l'utilisation de ce composant avec un label pour afficher le nom de la photo (ou ne pas en mettre). Moi j'aurais vu ça différement avec une propriété "ImageName: string read FImageName;" que tu remplis dans DoAnimate() et un évenement "OnImageChange: TNotifyEvent read FOnChange write FOnChange;" que tu appelles aussi dans DoAnimate() juste après avoir changé la propriété. Comme ça, libre à nous d'utiliser ou non l'évenement (en plus comme c'est un TComponent, c'est accessible directement depuis l'inspecteur d'objets) pour mettre à jour le composant de notre choix et d'afficher au besoin, par exemple, seulement de nom de la photo sans les répertoires. Chose impossible à faire avec ton implémentation.

A +
Florent
Utilisateur anonyme
13 août 2006 à 22:58
C'est corrigé :-)
(En faite ça ne marchait pas c'est en reconstruisant que je m'en suis apperçu j'avais juste fait Run "F9")

par contre pour bug
j'ai pas ce phénomène chez moi ?
Peut être ta carte vidéo ?
Essaye un DoubleBuffered !

C'est avec la nouvelle version que tu as ce souci ?
Ha ha ha, j'ai trouvé un bug ^^
Pour mieux le voir, met à AnimateSpeed une valeur élevée.
Ensuite, tu règles animate type à SBottomLeft (y'en a d'autres, d'ailleurs, je crois que ça concerne tous ceux qui commencent par S et qui ont Top et/ou Left) et tu verras lors de la transition qu'il y a un rectangle de couleur clButtonFace qui se trouve à droite.
Tout ceci en mode proportionnel bien sûr.

Je crois savoir d'où ça vient (du panel forcément !) mais pas comment y résoudre.

Sinon oui, niveau conception, c'est OK. Le composant, ce sera pratique pour toi comme ça tu n'auras pas à le créer dans tes futurs programmes.

Par contre, dans l'unité UPath, à partir de la ligne 154, tu ne peux pas concaténer sLineBreak sans l'opérateur "+".
Tu peux faire :
- 'Salut'#10#13'C''est florent !'
mais pas
- 'Salut'sLineBreak''C''est florent !'
Il faut mettre
- 'Salut' + sLineBreak' + 'C''est florent !'

Bizarre que chez toi ça marche ... (d'ailleurs, dans la version de tout à l'heure, c'était correct)
Utilisateur anonyme
13 août 2006 à 21:35
argh!!!
j'avais pas pensé à aller voir la MSDN ...
Dommage pour AW_BLEND mais bon il faudra bien faire avec ...

Sinon as-tu essayé depuis ?
Ahh la là, ce genre de commentaire ...
Michèle, pour quelqu'un qui fait (est sensé faire) des reportages et qui utilise Delphi pour les représenter, tu ne trouve pas bizarre que ce code ne t'intéresse pas ?
C'est vrai que : "Attention ! Ce code utilise une API !"

Cirec, pour le AW_BLEND, c'est pas la peine d'essayer ça ne marche ra pas. Voila ce que dit la MSDN la dessus : "AW_BLEND uses a fade effect. This flag can be used only if hwnd is a top-level window."
Utilisateur anonyme
13 août 2006 à 19:52
[Wolf_Hunter]
Comme toujours le loup rôde ...
Quand on ne comprend pas la programmation on ne peut pas apprécier ...

Si c'est pas du ("Image1.Left := Image1.Left + 1") c'est fini ... tu paniques c'est trop compliqué !!!
/Wolf_Hunter

Sinon nouvelle version ...
Correction du défaut de rafraîchissement
et sur les conseils de Florenth :
TcrImgPanel hérite directement de TCustomControl
TcrSlideShow hérite de TComponent avec possibilité de l'installer
le fichier DPK n'est pas fournis (je n'ai pas testé l'installation)
Suppression du StretchDraw remplacé StretchBlt en Halfton (Merci à DrJérome pour l'astuce)

voilà testez et ...
@+
Cirec
Je répond au sujet du composant: même si tu le déclare comme descendant de TComponent, tu peux l'utiliser sans l'installer, et en plus, tu n'a même pas à le détruire.

Pour BIF_NEWDIALOGSTYLE, oui oui, j'ai remarqué avec ton autre source.

Et pour TCustomControl au lieu de TCustomPanel, tu n'as que ça à changer dans la déclaration et tout le reste fonctionne parfaitement. Magique !
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
13 août 2006 à 12:33
>>>AnimateWindow "vole" la main au programme

ca a toujours été le gros problème d'AnimateWindow... Dommage...
Bien, bien tout ça.
Quelques remarques cependant:
- Pourquoi dériver TcrImgPanel de TCustomPanel alors que TcustomControl me parait mieux. Je n'ai pas testé mais peut être quel AW_BLEND fonctionne avec TCustomControl.

"Le fait d'avoir dérivé TcrSlideShow de TObject n'est peut être pas la bonne méthode ?"
>> Disons que tu aurais pu le faire dériver de TComponent ce qui aurant permi un mode design-time 8pour ceux qui l'installent) alors qu là, tu te reduit au mode run-time (création dynamique)

Sinon :
- ParentBackground n'existe pas sous D6
- Je n'ai pas la constante BIF_NEWDIALOGSTYLE (en l'enlevant, ça fonctionne parfaitement)
- StretchDraw, c'est bof. StretchBlt, c'est mieux (un peu plus lent par contre). Le best étant les méthodes de la librairie GraphicEx.
- AnimateWindow "vole" la main au programme ce qui veut dire qu'il est impossible de modifier une des propriétés en cliquant sur les composant de la fiche pendant qu'une animation est en cours. Mais là, il n'y a rien à faire, sauf threader (et encore, je n'ai pas testé non plus)

Je regarde le code plus en détails et je t'en dit des nouvelles.
En tout cas l'idée est novatrice. Je n'avais jamais pensé à cette utilisation de AnimateWindow()
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
13 août 2006 à 10:02
Tout simplement excellent ! Les effets sont super bien fait... Bravo !
Rejoignez-nous