Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 10 sur 10
  1. #1
    Membre Expert
    Avatar de Archimède
    Homme Profil pro anthony LAURENT
    Enseignant
    Inscrit en
    avril 2005
    Messages
    1 196
    Détails du profil
    Informations personnelles :
    Nom : Homme anthony LAURENT
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2005
    Messages : 1 196
    Points : 1 255
    Points
    1 255

    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 :
    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 Confirmé Sénior
    Avatar de Paul TOTH
    Homme Profil pro Paul TOTH
    Freelance
    Inscrit en
    novembre 2002
    Messages
    5 612
    Détails du profil
    Informations personnelles :
    Nom : Homme Paul TOTH
    Âge : 45
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : novembre 2002
    Messages : 5 612
    Points : 16 093
    Points
    16 093

    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
    Produits : UPnP, RemoteOffice, FlashPascal
    Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%

  3. #3
    Membre actif
    Inscrit en
    juillet 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 31

    Informations forums :
    Inscription : juillet 2007
    Messages : 107
    Points : 155
    Points
    155

    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 Expert
    Avatar de Archimède
    Homme Profil pro anthony LAURENT
    Enseignant
    Inscrit en
    avril 2005
    Messages
    1 196
    Détails du profil
    Informations personnelles :
    Nom : Homme anthony LAURENT
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2005
    Messages : 1 196
    Points : 1 255
    Points
    1 255

    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 Expert
    Avatar de Archimède
    Homme Profil pro anthony LAURENT
    Enseignant
    Inscrit en
    avril 2005
    Messages
    1 196
    Détails du profil
    Informations personnelles :
    Nom : Homme anthony LAURENT
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2005
    Messages : 1 196
    Points : 1 255
    Points
    1 255

    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 émérite
    Inscrit en
    janvier 2006
    Messages
    1 557
    Détails du profil
    Informations personnelles :
    Âge : 61

    Informations forums :
    Inscription : janvier 2006
    Messages : 1 557
    Points : 998
    Points
    998

    Par défaut

    Bonsoir à toutes et à tous,

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

    Depuis le dossier de l'application :

    Code :
    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 :
    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 Expert
    Avatar de Archimède
    Homme Profil pro anthony LAURENT
    Enseignant
    Inscrit en
    avril 2005
    Messages
    1 196
    Détails du profil
    Informations personnelles :
    Nom : Homme anthony LAURENT
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2005
    Messages : 1 196
    Points : 1 255
    Points
    1 255

    Par défaut

    Merci Cincap, je teste tout ça...

    @+

  8. #8
    Membre émérite
    Inscrit en
    janvier 2006
    Messages
    1 557
    Détails du profil
    Informations personnelles :
    Âge : 61

    Informations forums :
    Inscription : janvier 2006
    Messages : 1 557
    Points : 998
    Points
    998

    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 :
    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 Confirmé Sénior
    Avatar de Paul TOTH
    Homme Profil pro Paul TOTH
    Freelance
    Inscrit en
    novembre 2002
    Messages
    5 612
    Détails du profil
    Informations personnelles :
    Nom : Homme Paul TOTH
    Âge : 45
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : novembre 2002
    Messages : 5 612
    Points : 16 093
    Points
    16 093

    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 :
    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
    Produits : UPnP, RemoteOffice, FlashPascal
    Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%

  10. #10
    Membre émérite
    Inscrit en
    janvier 2006
    Messages
    1 557
    Détails du profil
    Informations personnelles :
    Âge : 61

    Informations forums :
    Inscription : janvier 2006
    Messages : 1 557
    Points : 998
    Points
    998

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •