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

 Delphi Discussion :

delphi et fichier flash swf


Sujet :

Delphi

  1. #1
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut delphi et fichier flash swf
    Bonjour, j'ai tenté d'intégrer une application flash dans delphi à partir de :
    ShockwaveFlashObjects_TLB.

    ma question n'est qu'une simple histoire de chemin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     procedure TForm1.FormCreate(Sender: TObject);
    begin
     Position:=poscreencenter;
     formstyle:=fsstayontop;
     width:=screen.Width;
     height:=screen.Height;
     ShockwaveFlash1.align:=alclient;
     ShockwaveFlash1.Movie:='../flash/delphi/horloge.swf';
    end;
    Si je donne le chemin complet, pas de soucis, ça marche... En revanche, si mon fichier flash se trouve dans le sous répertoire delphi et que je définisse le chemin en relatif comme montré dans le code, ça ne fonctionne pas...
    Comment déclarer le chemin d'un fichier se trouvant dans le même répertoire que l'exe delphi qui le gère.

    Le but étant de rendre portable le répertoire qui contient l'exe et le fichier flash...

    Merci (question toute bête mais qui m'empoisonne la vie.)

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    le plus mieux c'est de ne pas passer par un fichier non ?

    l'activeX supporte la lecture depuis un flux, je n'ai plus le détail en mémoire mais ça tourne autour de IStream si mon souvenir est bon.

    Google: Delphi SWF IStream
    http://www.delphiflash.com/how-to-open-swf-from-memory
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juillet 2007
    Messages : 113
    Points : 170
    Points
    170
    Par défaut
    Je te propose de passer par ExtractFilePath(Application.ExeName) pour récupérer le dossier d'installation de ton exe.
    Il me semble que les chemins relatif sont impactés lorsque tu utilises des OpenDialog/SaveDialog par exemple...

  4. #4
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Merci Paul, si l'activeX permet le passage par un flux... que demande le peuple
    Je vais évidemment ne pas passer par le fichier...

    merci pour ta réflexion toujours très pertinente.
    Je regarde ça.

  5. #5
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Merci tempiqs pour ta réponse mais je n'avais pas vu toutes les possibilités que pouvait m'offrir l'activeX...cf post réponse à Paul Toth.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 421
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 421
    Points : 1 325
    Points
    1 325
    Par défaut
    Bonsoir à toutes et à tous,

    @ Archimède, voici le code que j'utilise à l'occasion :

    Depuis le dossier de l'application :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var Chemin:string;
      begin
       Chemin := ExtraCtFilePatH(Application.ExeName);
       Chemin[2] := '|';
       Chemin := 'file:///'+ Chemin;
       if op1.Execute then begin
     
       Player.Movie :=  op1.filename;
       Player.Play;
      end;
    Depuis une ressource :
    Fichier RC = ANIM2 FLASH "ANIM2.swf"

    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
     
    var 
     
        Chemin:string;
        temp :array[0..255]of char;
        res :TresourceStream;
      begin
       gettemppath(255, temp);
       Chemin := temp;
     
     
       res := TresourceStream.Create(hinstance, 'ANIM2', 'FLASH');
        res.SaveToFile(Chemin + 'ANIM2.swf');
       res.Free;
     
       Chemin[2] := '|';
       Chemin := 'file:///'+ Chemin;
     
        Player.Movie := Chemin + 'ANIM2.swf';
        Player.Play;
      end;
    Car, avec le "LoadMovieFromStream();" j'avais une erreur sous D6 et "ShockwaveFlashObjects_TLB".

    @+,

    Cincap

  7. #7
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Merci Cincap, je teste tout ça...

    @+

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 421
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 421
    Points : 1 325
    Points
    1 325
    Par défaut
    Bonjour à toutes et à tous,

    @ Paul TOTH, cela m'intéresserait de savoir pourquoi ce code ne fonctionne pas avec D6 et "ShockwaveFlashObjects_TLB":

    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
    var
      mem: TMemoryStream;
    begin
     with TOpenDialog.Create(self) do
      begin
        Filter := 'SWF|*.swf';
        if Execute then
        begin
          mem := TMemoryStream.Create;
          mem.LoadFromFile(FileName);
          mem.Position := 0;
          Player.LoadMovieFromStream(mem); //Erreur ici "Identificateur non déclaré"
          //Player.PutMovieFromStream(mem);
    
        end;
        Free;
      end;
    @+,

    Cincap

  9. #9
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Probablement car cette méthode n'existe pas et que l'ActiveX Adobe ne connait rien au Stream Delphi

    Voici un code qui fonctionne
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    unit Main;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
     
    type
      TForm1 = class(TForm)
        OpenDialog1: TOpenDialog;
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
        procedure LoadSWF(const AFileName: string);
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    uses
      ShockwaveFlashObjects_TLB, ActiveX;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      if OpenDialog1.Execute then
        LoadSWF(OpenDialog1.FileName);
    end;
     
    procedure TForm1.LoadSWF(const AFileName: string);
    var
      SWF       : TShockWaveFlash;
      FileStream: TFileStream;
      MemStream : TMemoryStream;
      Len       : Integer;
      Ptr       : ^Integer;
      PStream   : IPersistStreamInit;
      AStream   : IStream;
    begin
    // Creation de l'ActiveX
      SWF := TShockWaveFlash.Create(Self);
      SWF.Parent := Self;
      SWF.SetBounds(0, 0, ClientWidth, ClientHeight);
     
    // Ouverture du fichier, mais ça pourrait être une ressource
      FileStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyNone);
      try
      // on va le copier en mémoire
        MemStream := TMemoryStream.Create;
        try
          Len := FileStream.Size;
        // il nous faut 8 octets de plus...
          MemStream.SetSize(Len + 8);
          Ptr := MemStream.Memory;
       // 4 pour stocker la valeur "magique"
          Ptr^ := $55665566; // Magic tag !
          Inc(Ptr);
       // 4 pour stocker la taille du fichier
          Ptr^ := Len;
          Inc(Ptr);
       // et on place le fichier à la suite
          FileStream.ReadBuffer(Ptr^, Len);
     
        // maintenant on demande un PersistStream à l'ActiveX
          IUnknown(SWF.OleObject).QueryInterface(IPersistStreamInit, PStream);
        // on créer un wrapper pour notre stream (pas la peine de le libérer c'est un TInterfacedObject)
          AStream := TStreamAdapter.Create(MemStream);
        // et on le charge, c'est tout !
          PStream.Load(AStream);
     
        finally
          MemStream.Free;
        end;
      finally
        FileStream.Free;
      end;
    end;
     
    end.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 421
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 421
    Points : 1 325
    Points
    1 325
    Par défaut
    @ Paul TOTH, merci pour l'info et encore merci pour le code qui fonctionne sous D6 et Seven 64 bits.

    Cela complétera la façon de lire un fichier Flash avec Delphi.

    @+,

    Cincap

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Modifier un fichier flash .swf
    Par ingeniomatique dans le forum Flash
    Réponses: 3
    Dernier message: 09/04/2012, 19h43
  2. insérer un fichier flash (swf)
    Par Stéph utilisateur d'acces dans le forum Dreamweaver
    Réponses: 10
    Dernier message: 18/06/2009, 10h50
  3. intégration d'un fichier flash swf dans page html
    Par manu14 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 24/03/2009, 10h43
  4. Réponses: 4
    Dernier message: 17/01/2007, 15h48
  5. Modification fichier flash à parti du .swf
    Par BaxterFPF dans le forum Flash
    Réponses: 11
    Dernier message: 10/11/2006, 10h47

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