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

WinDev Discussion :

Projet WD17+ FFplayer (player video universel)


Sujet :

WinDev

  1. #21
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,

    Citation Envoyé par Patrice Terrier Voir le message
    JP
    Si vous avez une idée pour afficher la fenêtre FFplay dans un champ windev, de telle façon que la vidéo continue de jouer pendant le déplacement de la fenêtre, je suis preneur. Car le système de région que j'utilise ne marche pas avec la version 100J de WD26.
    Au besoin je peux sauvegarder le code source en format texte pour vous permettre de le récupérer en WD16, si vous me donnez une adresse mail où envoyer un zip.
    Pour me joindre utilisez "objreader at gmail dot com"
    je veux bien regarder si je trouve quelque chose par rapport au projet mais comme je n'ai que WD16 , il faudrait me transmettre les sources en mode texte (j'ai transmis mon adresse à objreader). Par contre il y a peut-être un souci avec le source des fenêtres.
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  2. #22
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    JP

    Le format compatible GIT n'est guère lisible, j'ai essayé de télécharger une version 16 mais sans succès.
    Je vais donc faire du copier coller mais c'est long, merci PC_SOFT !!!!

    J'ai retrouvé une version 16 sur l'un des mes vieux disque de sauvegarde...

  3. #23
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    je crois que j'ai trouvé une astuce pour ne pas tout copier coller :

    imprimer le dossier en format pdf ( je pourrais faire du copier coller à partir de ce pdf) et en plus je pourrais voir les champs des fenêtre
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  4. #24
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    JP

    J'ai bientôt fini, je me suis farci le copier-coller de l'interface et des différentes procédures dans WD16.
    Je pense pouvoir vous envoyer le tout d'ici ce soir...

  5. #25
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Le ZIP est parti, n'oubliez pas de mettre FFplay.exe dans le répertoire EXE du projet.

    Pas de dépendances externes hormis les appels à l'API bas niveau en mode procédural.
    Ce code devrait marcher exactement de la même façon en C/C++ natif, avec la vitesse en plus.

  6. #26
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    Ok merci, désolé pour le dérangement. J'ai bien reçu le projet. J'ai eu des soucis avec les fonctions GetWindowLongPtrA et SetWindowLongPtrA qui n'étaient pas trouvées dans le user32 mais en les remplaçant par GetWindowLongA et SetWindowLongA maintenant j'arrive à exécuter le projet. Il ne me reste plus à voir si je peux faire quelque chose pour mettre la fenêtre ffplay dans un champ windev . Suite au prochain épisode.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #27
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    GetWindowLongPtrA et SetWindowLongPtrA sont des API standards !!!

    Le projet est conçu pour fonctionner en 64-bit, il ne peuvent en aucun cas être remplacé par GetWindowLongA et etWindowLongA qui fonctionnent uniquement en 32-bit.

    Voir la doc Microsoft
    https://docs.microsoft.com/en-us/win...windowlongptra

  8. #28
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 805
    Points : 5 253
    Points
    5 253
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Citation Envoyé par Patrice Terrier Voir le message
    J'ai bientôt fini, je me suis farci le copier-coller de l'interface et des différentes procédures dans WD16.
    Je pense pouvoir vous envoyer le tout d'ici ce soir...
    Pourquoi ne pas utiliser l'éditeur de dossier de prog ? (Fichier/Imprimer le dossier dans le menu, Accueil/Imprimer le dossier dans le ruban)
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  9. #29
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    Citation Envoyé par Patrice Terrier Voir le message
    GetWindowLongPtrA et SetWindowLongPtrA sont des API standards !!!

    Le projet est conçu pour fonctionner en 64-bit, il ne peuvent en aucun cas être remplacé par GetWindowLongA et etWindowLongA qui fonctionnent uniquement en 32-bit.

    Voir la doc Microsoft
    https://docs.microsoft.com/en-us/win...windowlongptra
    Effectivement j'avais passé le projet en 32 bits donc attention si on utilise le projet en 32 bits.

    Sinon comme je l'avais écrit dans un message précédent, on peut mettre la fenêtre ffplay dans un champ image. Cela simplifie la gestion des fenêtres et le déplacement est fluide .

    Voici comment procéder.
    1 - Ajouter un champ image (Image1) qui se superpose au champ Player_Template dans la fenêtre principale. Il servira de conteneur à la fenêtre FFPlay

    2 - Dans l'initialisation de la fenêtre principale ajouter un élément entier système hContainer dans la structure PROP et initialiser cet élément avec le handle du champ Image1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gP.hMain = Handle()
    gP.hContainer = Handle(Image1)
    3 - Dans la procédure WindowInit ne plus utiliser l'événement FocusChange
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     WindowInit()
    // To handle the caption focus state
    // Event("FocusChange", MyWindow, WM_NCACTIVATE)
    // To handle system command
    Event("WinRestore", MyWindow, WM_SYSCOMMAND)
    4 - Simplifier la procédure ResizeWindow de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PROCEDURE ResizeWindow(LOCAL hWnd is system int)
    IF gP.IsIconize = 0 THEN
        IF IsWindow(gP.hPlayer) THEN
            SetWindowPos(gP.hPlayer, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_ASYNCWINDOWPOS | SWP_NOMOVE | SWP_NOSIZE)// | 0x0020)//SWP_DRAWFRAME)        
            MoveWindow(gP.hPlayer, 0, 0, Image1..Width, Image1..Height, True)
        END
    END
    hWnd = 0
    5 - Modifier la procédure StartPlayer de la manière suivante
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    PROCEDURE StartPlayer(LOCAL sVideo is string)
    // If a video is already playing, then close it in order to play the new video
    IF (IsWindow(gP.hPlayer)) THEN
        SendMessageW(gP.hPlayer, WM_CLOSE, 0, 0)
        gP.hPlayer = 0
        Sleep(200)
    END
     
     
    EndTimerSys(1)
    // Fire the player
    hWnd is system int = CreatePlayerProcess(sVideo)
     
     
    IF hWnd THEN
        OldStyle is unsigned int = GetWindowLongPtr(hWnd, GWL_EXSTYLE)
        SetWindowLongPtr(hWnd, GWL_EXSTYLE, OldStyle | WS_EX_TOOLWINDOW)
        SetWindowLongPtr(hWnd, GWL_STYLE, WS_POPUP)
        SetWindowLongPtr(hWnd, GWL_HWNDPARENT, gP.hMain)    
        gP.hPlayer = hWnd
        // on met Image1 comme parent de FFPlay
        API("user32","SetParent",gP.hPlayer ,gP.hContainer)
        ResizeWindowJP(gP.hPlayer)
        ShowWindow(gP.hPlayer, SW_SHOW)
        BringWindowToTop(gP.hPlayer)
        Player_Template..Visible=False
        WindowRedraw(gP.hMain)
        IF gP.hConsole THEN        
            MultitaskRedraw(WIN_Main)    
        END
        TimerSys(TimerProc, 5, 1)
    END
    6 - Simplifier la procédure TimerProc de la faon suivante :
    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
    19
    20
    PROCEDURE TimerProc()
    IF gP.IsIconize THEN RETURN
     
     
    IF gP.hPlayer THEN
        IF IsWindow(gP.hPlayer) THEN            
            IF gP.duration THEN ReadSeekerPos()
     
        ELSE // FFplayer has been closed ...
            gP.hPlayer = 0
            IF BTN_Pause..Visible THEN BTN_Pause..Visible = False
            IF BTN_Step..Visible THEN BTN_Step..Visible = False
            IF BTN_Mute..Visible THEN BTN_Mute..Visible = False
            IF BTN_Quit..Visible THEN BTN_Quit..Visible = False
            LIB_Duration = DURATION_NUL; LIB_Seeker = DURATION_NUL; gP.duration = 0; gP.seeker = 0; Gauge..Value = 0
            BringWindowToTop(gP.hMain)
            Player_Template..Visible=True
        END
    END
    CenterDialog()
    7 - Dans les événements de redimensionnement de la fenêtre principale, je pense que ce n'est plus la peine de faire un WindowRedraw(gP.hMain)

    Voilà, si je n'ai rien oublié cela devrait fonctionner.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  10. #30
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    J.P

    Voici mon premier retour,.

    C'est effectivement beaucoup plus fluide !

    Dans la version WD16, j'ai oublié de rendre BTN_Restore invisible au démarrage.

    En cas d'utilisation de BTN_Iconize, puis restore depuis la barre des tâches le contenu n'est pas réaffiché.
    Il faut modifier la procédure WinRestore en conséquence.

    Lors du redimensionnement de la fenêtre par les côtés, l'affichage clignote énormément (d'où l'utilité de la région dans la version d'origine)

  11. #31
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    J.P

    Concernant la procédure FocusChange,
    celle-ci est nécessaire pour maintenir l'aspect de la barre de titre, qui doit être identique lorsque gP.hMain ou gP.hPlayer prennent tour à tour le focus, et donner l'illusion d'un seul et même process.

    Je propose
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    FUNCTION FocusChange(LOCAL uMsg is unsigned int, LOCAL wParam is unsigned int, LOCAL lParam is system int)
     
    OnOff is boolean = LOINT(wParam)
    FromPlayer is int = HIINT(wParam)
     
    nFocus is int = 1
    IF GetForegroundWindow() = gP.hMain THEN nFocus = 2
    IF GetForegroundWindow() = gP.hPlayer THEN nFocus = 2
     
    IF nFocus <> gP.wasFocus THEN
        IF nFocus = 2 THEN //GetForegroundWindow() = gP.hMain then// OR API(USER32, "WindowFromPoint", &p) = gP.hPlayer THEN
            Caption_bar..BrushColor = RGB(105,105,105)
            Caption_Main..Color = RGB(255,255,255)
        ELSE
            Caption_bar..BrushColor = RGB(153,153,153)
            Caption_Main..Color = RGB(192,192,192)
        END
    END
    gP.wasFocus = nFocus
     
    //IF OnOff THEN
    //	IF IsWindow(gP.hPlayer) THEN
    //		IF FromPlayer = WM_NCACTIVATE THEN
    //			SetWindowPos(gP.hPlayer, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_ASYNCWINDOWPOS | SWP_NOMOVE | SWP_NOSIZE)
    //			SetWindowPos(gP.hMain, gP.hPlayer, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_ASYNCWINDOWPOS | SWP_NOMOVE | SWP_NOSIZE)
    //		ELSE
    //			SetWindowPos(gP.hPlayer, gP.hMain, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_ASYNCWINDOWPOS | SWP_NOMOVE | SWP_NOSIZE)
    //		END
    //	END
    //END
    uMsg = uMsg; wParam = wParam; lParam = lParam
    RESULT 1 // <---- Pour éviter que la barre de titre ne se réaffiche par dessus mon Skin
    et à la fin de TimerProc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FocusChange(0,0,0)
    CenterDialog()

  12. #32
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    J'ai réussi à faire une version qui est compatible avec le déplacement des fenêtres de WD26 révision 100j (comment faire simple quand on peut faire compliqué).

    Que ceux qui sont intéressés lève le doigt

  13. #33
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 180
    Points : 275
    Points
    275
    Par défaut
    bonjour,

    je veux bien continuer les tests
    Cordialement JeAn-PhI

  14. #34
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    J.P JeAn-Phi

    J'ai posté dans la section contribution, une mise-à-jour qui je l'espère devrait fonctionner avec toutes les versions WinDev, de la 16 à la 26, y compris la version buggée 100j.

    Je sais pas ce qu'ils attendent pour corriger la 100j

Discussions similaires

  1. FFplayer (player video universel)
    Par Patrice Terrier dans le forum Contribuez
    Réponses: 10
    Dernier message: 27/07/2021, 09h39
  2. soucis avec player Video
    Par glenouve dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 10/05/2008, 08h59
  3. Player Video avec SilverLight 1.0
    Par BigWill dans le forum Silverlight
    Réponses: 19
    Dernier message: 15/04/2008, 11h05
  4. Player video - Lenteur de chargement
    Par d.w.d dans le forum Vidéo
    Réponses: 3
    Dernier message: 08/02/2008, 11h20
  5. [FLASH MX2004 PRO] Créer un player Video
    Par MELANIE12 dans le forum Flash
    Réponses: 9
    Dernier message: 24/11/2004, 20h51

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