begin process at 2008 07 05 18:28:25
1 205 296 membres
267 nouveaux aujourd'hui
14 119 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CRÉEZ VOTRE PROPRE SLIDESHOW (DIAPORAMA) FACILEMENT


Information sur la source

Catégorie :Graphique Classé sous : animatewindow, slideshow, diaporama, transition, bitmap Niveau : Débutant Date de création : 13/08/2006 Date de mise à jour : 14/08/2006 15:33:18 Vu / téléchargé: 6 780 / 827

Note :
8,75 / 10 - par 4 personnes
8,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (22)
Ajouter un commentaire et/ou une note

Description

Voici une petite source qui vous montre comment faire un SlideShow où Diaporama avec très peut de code

L'idée m'est venue après avoir vu une source ici sur AnimateWindow, incomplète et qui à été supprimé ....
Je me suis dit que ça pouvait être une bonne utilisation (le Diaporama) pour AnimateWindow

Le projet utilise l'unité UPath (Fournie dans le zip)
pour plus de renseignement sur cette unité suivre ce lien :
http://www.delphifr.com/codes/UTILITAIRE-ACCEDEZ-FACILEMENT-REPERTOIRES-SYSTEME-PEUT-IMPORTE-LEURS_39080.aspx

il n'y a aucun composant à installer
j'ai fait attention à ce que le code soit facilement réutilisable
et il a ét testé sous D4 et D2005

Je connais quelqu'un qui l'attend depuis longtemps :-)

Utilisation:
le programme pointe dès le départ sur le répertoire "Mes Images" de Windows (même si vous avez changer son emplacement dans la BDR)
Sinon vous pouvez changer le répertoire en cliquant sur le bouton "Change Dir"
où sélectionner une série d'images (2 minimum) en cliquant sur "Select Image"
Appuyez sur "Start" pour démarrer le diaporama
"  "    "  "F6"    pour passer en plein écran et pour revenir
"  "    "  "Échap" pour quitter l'application

Le reste se passe de commentaires :-)

@+

Conclusion

Deux problèmes connues :

Quand on change le mode d'affichage (Mosaïc, Stretch...) où quand on passe du mode normal au mode plein écran (F6)
l'actualisation de l'image ne se fait pas de suite

Et le Type AW_BLEND de AnimateWindow ne fonctionne pas avec les Panel (où j'ai pas trouvé comment) l'image s'affiche en instantané
C'est pourquoi cette possibilité est en commentaire dans le code.

Si quelqu'un à une idée pour l'un où l'autre problème (voir les deux) qu'il n'hésite pas :-)

Le fait d'avoir dérivé TcrSlideShow de TObject n'est peut être pas la bonne méthode ?
Dites moi ce que vous en pensez ...
Merci à Matt pour les Testes éffectués
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

13 août 2006 19:37:05 :
Nouvelle version : Sur les conseils de Florenth : TcrImgPanel hérite directement de TCustomControl TcrSlideShow hérite de TComponent avec possibilité de l'installer (.DPK non fourni) Autres changements : Résolution du problème de rafraîchissement C'est justement un Refresh qui manquait (en fait deux) :-) L'utilisation reste la même pas de changement ... Le problème de AW_BLEND perciste toujours
13 août 2006 22:47:49 :
Ajout d'une propriété Color pour changer le fond du SlideShow -- Ajout d'un controle de taille pour l'affichage (psMosaic) --
14 août 2006 15:33:18 :
Correction du Bug sur AW_Blend -****- Problème règlé par l'ajout de ma propre fonction DoBlend (Interne à DoAnimate) -****- Sur les conseils de Florenth : LabelName est remplacé par une propriété ImageName -****- Et un évenement OnImageChange à été ajouté -****- Et d'autres petites modifications proposées par Florenth
  • signaler à un administrateur
    Commentaire de Matt 261 le 13/08/2006 10:02:35

    Tout simplement excellent ! Les effets sont super bien fait... Bravo !

  • signaler à un administrateur
    Commentaire de florenth le 13/08/2006 12:30:52

    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()

  • signaler à un administrateur
    Commentaire de Matt 261 le 13/08/2006 12:33:36

    >>>AnimateWindow "vole" la main au programme

    ca a toujours été le gros problème d'AnimateWindow... Dommage...

  • signaler à un administrateur
    Commentaire de cirec le 13/08/2006 16:24:05 administrateur CS

    Merci pour vos messages
    ça fait plisir ;-)

    "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."

    En fait je ne me suis pas posé la question.
    L'idée m'est venue d'essayer avec un panel, ça à fonctionner, j'ai ajouté l'image et voilà TcrImgPanel est né :-)

    Mais je vais explorer cette piste

    "Disons que tu aurais pu le faire dériver de TComponent ce qui aurant permi un mode design-time "
    Ben disons que comme beaucoup de membres n'aiment pas forcément devoir installer un composant de plus sur leur palette (qui est déjà bien remplie)...

    Et comme la mise en oeuvre est facile :
    SlideShow := TcrSlideShow.Create(Panel1);
    SlideShow.Start;
    Dans la majorité des cas ça suffit !
    Bien sur il ne faut pas oublier de faire :
    SlideShow.Free;

    Donc voilà pourquoi j'ai fait le choix de TObject

    "- ParentBackground n'existe pas sous D6"
    Je ne le savais pas ... je corrigerais donc ceci
    "- Je n'ai pas la constante BIF_NEWDIALOGSTYLE (en l'enlevant, ça fonctionne parfaitement)"
    Donc si j'ai bien compris tu as D6 et BIF_NEWDIALOGSTYLE n'y est pas déclaré ?
    Par contre il ne faut pas le retirer ... ici ça ne pose pas de problème regarde l'autre source que j'ai déposé ici (je corrigerais également ceci):
    http://www.delphifr.com/codes/UTILITAIRE-ACCEDEZ-FACILEMENT-REPERTOIRES-SYSTEME-PEUT-IMPORTE-LEURS_39080.aspx

    "- StretchDraw, c'est bof. StretchBlt, c'est mieux (un peu plus lent par contre). Le best étant les méthodes de la librairie GraphicEx."
    Oui c'est vrai c'est bof (quoi que chez moi avec mes images ça le fait :-))

    Mais je corrigerais ceci :-)
    Bon ça fait déjà du boulot

    Merci encore
    @+
    Cirec

  • signaler à un administrateur
    Commentaire de florenth le 13/08/2006 16:40:42

    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 !

  • signaler à un administrateur
    Commentaire de cirec le 13/08/2006 19:52:07 administrateur CS

    [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

  • signaler à un administrateur
    Commentaire de florenth le 13/08/2006 21:04:50

    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."

  • signaler à un administrateur
    Commentaire de cirec le 13/08/2006 21:35:27 administrateur CS

    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 ?

  • signaler à un administrateur
    Commentaire de florenth le 13/08/2006 21:57:10

    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)

  • signaler à un administrateur
    Commentaire de cirec le 13/08/2006 22:58:26 administrateur CS

    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 ?

  • signaler à un administrateur
    Commentaire de florenth le 14/08/2006 11:42:21

    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

  • signaler à un administrateur
    Commentaire de florenth le 14/08/2006 11:56:15

    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

  • signaler à un administrateur
    Commentaire de cirec le 14/08/2006 16:04:27 administrateur CS

    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

  • signaler à un administrateur
    Commentaire de florenth le 14/08/2006 18:44:21

    "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+

  • signaler à un administrateur
    Commentaire de cirec le 14/08/2006 19:33:30 administrateur CS

    Et que penses-tu de la procedure DoBlend ?

    Merci
    @+

  • signaler à un administrateur
    Commentaire de florenth le 14/08/2006 20:52:04

    Justement, c'est ça que je suis en train d'étudier car ça m'intéresse drolement

  • signaler à un administrateur
    Commentaire de florenth le 14/08/2006 20:58:03

    Bug : si tu cliques sur le bouton "change dir" et que tu referme la fenetre sans rien selectionner : ça plante

  • signaler à un administrateur
    Commentaire de mcapp le 15/08/2006 02:23:56

    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 !

  • signaler à un administrateur
    Commentaire de ThWilliam le 17/08/2006 18:10:08

    Salut Cirec,

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

    Thierry

  • signaler à un administrateur
    Commentaire de Francky23012301 le 22/08/2006 16:58:04

    Salut Cirec,

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

    Code : Propre et fluide.

    Allez un petit 10/10.

  • signaler à un administrateur
    Commentaire de Gecko62 le 27/08/2006 18:54:01

    Superbe source

    Bravo et merci

    Tout comme Francky23012301, je mets un 10 / 10

  • signaler à un administrateur
    Commentaire de cincap le 21/10/2007 10:10:22

    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

Ajouter un commentaire

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€
creation de marque et ...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS