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

  1. #1
    Rédacteur/Modérateur

    Faire un écran de veille avec Delphi à partir d'une animation Flash
    Bonjour !

    J'ai vu qu'il existait une multitude d'outils pour convertir une animation Flash en écran de veille. Soit dit en passant, la plupart sont payants, ce qui prouve qu'il doit y avoir une demande pour ce genre de choses.

    J'ai commencé à les essayer et parallèlement, j'ai voulu voir ce que je pourrais faire dans le même genre par moi-même, en partant du code proposé par Paul TOTH dans cette discussion et du tutoriel de nono40.

    Voici l'état actuel de mon travail (un projet Delphi 7).

    Dans le panneau de réglage de l'écran de veille (Windows 8), l'animation s'affiche correctement dans la petite fenêtre de prévisualisation. En revanche si je clique sur "Aperçu", l'animation ne prend pas tout l'écran mais seulement un carré en haut à gauche. Je ne sais pas si le problème est dans le code FlashPascal ou dans le code Delphi.

    Je me suis aperçu par hasard que si je clique sur ce carré, l'animation prend cette fois tout l'écran mais ensuite la fenêtre ne se ferme plus quand j'appuie sur une touche (elle se ferme en appuyant sur ALT + F4).

  2. #2
    Rédacteur/Modérateur

    En visitant le site www.delphiflash.com, je suis tombé sur une page qui (si je comprends bien) décrit un bug de l'objet TShockwaveFlash correspondant à l'expérience que j'ai faite :

    Actually TShockwaveFlash and some its methods do not always work correctly. For example, the movie does not stretch automatically resizing of a parent window;
    Plus bas dans la même page, une façon de corriger ce problème est indiquée. Je vais prendre le temps de regarder tout ça de plus près.

  3. #3
    Rédacteur/Modérateur

    J'ai reconstruit exactement le même projet avec XE2 et cette fois tout fonctionne correctement.

    Du coup je suis moins motivé pour corriger la version D7 mais j'essaierai peut-être quand même.

    Une petite question en passant : dans l'exemple du tutoriel de nono40, il y a cette ligne :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TFenEcran.FormShow(Sender: TObject);
    var i: Integer;
    begin
      // On masque l'application dans la barre des tâches
      ShowWindow(Application.Handle,SW_HIDE);


    Franchement, je n'ai pas trop compris l'utilité de la chose mais toujours est-il que dans le DPR de mon projet XE2 il y a cette ligne :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
      Application.MainFormOnTaskbar := True;


    Est-ce que j'aurais l'équivalent du ShowWindow(..., SW_HIDE) si je faisais la modification suivante dans mon DPR ?

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
      Application.MainFormOnTaskbar := False;

  4. #4
    Expert éminent sénior
    pas le temps de regarde ton code, mais oui à ta dernière question, l'option n'existait pas sous D7
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Rédacteur/Modérateur

    Citation Envoyé par Paul TOTH Voir le message
    pas le temps de regarder ton code, mais oui à ta dernière question, l'option n'existait pas sous D7
    Merci pour la réponse, Paul. Franchement, moi non plus je n'ai pas le temps de le regarder.

    Non, sérieusement, je veux dire que puisqu'en utilisant XE2 tout fonctionne bien, je ne vais pas me casser la tête pour rien. Je vais plutôt peaufiner mon projet XE2 et commencer à réfléchir à l'écran de veille que je pourrais faire avec FlashPascal.

  6. #6
    Rédacteur/Modérateur

    Voici la version D7 corrigée !

    J'ai modifié l'unité ShockwaveFlashObjects_TLB (en suivant les indications données sur le site que j'ai cité plus haut) et j'ai inclus l'unité modifiée dans le répertoire du projet.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.LoadSWF(const AFileName: string);
    ...
      SWF.SetBounds(0, 0, ClientWidth, ClientHeight);
     
      // Appel de la méthode ajoutée CreateWnd pour corriger un défaut dans
      // l'affichage. Le défaut se manifeste lors de l'affichage en plein écran.
     
      if ClientWidth = Screen.Width then
        SWF.CreateWnd;

  7. #7
    Rédacteur/Modérateur

    J'ai fait quelques recherches du côté de Lazarus.

    Il y a ces composants payants : j'ai téléchargé la version gratuite et l'ai essayée avec Delphi 7 mais malheureusement les unités FreePascal ne sont pas incluses. Il faudrait que j'en parle au père Noël.

    J'ai trouvé aussi un projet basé sur un autre composant : j'ai pu le compiler et le faire fonctionner sans avoir rien à installer.

  8. #8
    Rédacteur/Modérateur

    Citation Envoyé par Roland Chastain Voir le message
    J'ai reconstruit exactement le même projet avec XE2 et cette fois tout fonctionne correctement.
    Ou presque ! Les méthodes FormClick et FormMouseMove ne fonctionnent pas (alors que FormKeyDown fonctionne, sauf si j'ai d'abord essayé d'utiliser la souris, auquel cas il n'y a plus aucun moyen de fermer la fenêtre, mis à part ALT + F4).

  9. #9
    Rédacteur/Modérateur

    Une petite démonstration de l'objet TFlashViewerWindow de la bibliothèque DelphiSWFSDK (version gratuite), compilée avec Delphi 7. Utilisez la souris pour déplacer la fenêtre ou la redimensionner (roulette). Appuyez sur ALT+F4 pour fermer.

  10. #10
    Rédacteur/Modérateur

    Une autre démonstration : un programme qui capture différentes vues d'une animation.

    La taille de l'animation est préalablement lue dans le fichier, au moyen de l'unité swffileinfo.

    Faites glisser et déposez le fichier SWF de votre choix sur l'icône de l'application.

  11. #11
    Rédacteur/Modérateur

    J'ai essayé une autre bibliothèque : F-IN-BOX. Les dernières versions de Delphi sont supportées (tandis que le développement de DelphiSWFSDK s'est arrêté à Delphi XE). Dommage qu'il y ait écrit DEMO VERSION absolument partout.

  12. #12
    Rédacteur/Modérateur

    Je vous propose un kit de génération d'écran de veille Windows à partir d'une animation Flash.

    Pour générer l'écran de veille, déposez sample.swf (ou le fichier de votre choix) sur make.bat.

###raw>template_hook.ano_emploi###