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 :

Convertir code JavaScript en code Delphi !


Sujet :

Delphi

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut Convertir code JavaScript en code Delphi !
    Bonjour à toutes et à tous,

    Je ne sais pas si c'est possible mais avec ce code dans une page au format html cela fonctionne comme si je filmais pourtant je n'affiche qu'une image.

    J'aurai aimé pouvoir faire l'identique en Delphi 6 avec un TTimer mais malgré tous mes tests, je n'arrive qu'a obtenir une image saccadée.

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     <IMG src="http://192.168.1.83:88/snapshot.cgi?user=&pwd=&t=" name="vdp" width="790" height="495" border="5" id="refresh"></div>
     
    <SCRIPT language="JavaScript" type="text/javascript"> 
     var t = 25 // Interval en Secondes
     image = "http://192.168.1.83:88/snapshot.cgi?user=&pwd=&t=" 
     function Start() { 
     tmp = new Date(); 
     tmp = "?"+tmp.getTime() 
     
    document.getElementById("refresh").src = image+tmp
     setTimeout( Start, t*10)
     } 
     Start(); 
     </SCRIPT>

    Si cela est possible merci d'avance,

    @+,

    cincap

  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 445
    Points
    28 445
    Par défaut
    a priori il suffit de charger l'URL http://192.168.1.83:88/snapshot.cgi?user=&pwd= toutes les 250ms, une webcam je suppose ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Et si tu ouvres la page simplement dans un TWebBrowser ?

    Sinon un exemple du getElementById en Delphi :

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

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

    @ Paul TOTH et @ retwas, merci pour votre réponse.

    une webcam je suppose ?
    Et non cher ami, c'est un videoparlophone Wifi (type Konx), j'affiche l'image car impossible d'afficher le flux (je ne connais pas la commande cgi) et avec le fichier en html, c'est comme si j'affichais le flux cela fonctionne en temps réel.

    Avec le TTimer régler à value 1000 cela donne ceci comme code mais l'image et légèrement saccadée :

    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
     
    procedure TFmonitor1.Timer1Timer(Sender: TObject);
    begin
        Mystreamt.clear ;
        Try
          IdHTTP1.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows 
     
    NT 6.0; SLCC1';
     
          IdHTTP1.Get('http://' +Edurl.Text+ ':88/snapshot.cgi?user='+Eduser.text
     
    +'&pwd='+Edpass.Text+'',Mystreamt);
     
        except
          //ShowMessage('Fichier indisponible');
          Exit;
        End;
        Mystreamt.Seek(0, soFromBeginning);  { on rembobine le stream }
     
        Try
     
      jpg.LoadFromStream(MyStreamt);
     
      Image1.Picture.Assign(jpg);
        Finally 
     
      End;
     
    end;
    Voila,

    @+,

    cincap

  5. #5
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Règle le TTimer sur 250 au lieu de 1000, comme sur le fichier JavaScript.

  6. #6
    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 445
    Points
    28 445
    Par défaut
    Citation Envoyé par retwas Voir le message
    Règle le TTimer sur 250 au lieu de 1000, comme sur le fichier JavaScript.
    pour ce genre de chose on peux même lire les images en boucle dans un Thread et les afficher dans un TImage en Synchronize, ça donne le meilleur taux de rafraîchissement possible (à réduire éventuellement par un Sleep() dans le Thread si le FPS est trop important ou que la CPU monte trop haut).
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    Merci à vous deux.

    @ retwas,

    Et si tu ouvres la page simplement dans un TWebBrowser ?
    j'avais oublié de te confirmer que j'avais aussi réalisé une application en Delphi qui lisait mon fichier en html et forcément pas de problème de lecture mais j'utilisais Vlc pour mes 2 caméras Wifi H264 mais avec le vidéoparlophone c'était aussi saccadé.

    Par contre, l'autre petite application aussi en Delphi6, j'ai déjà réglé le timer en 250ms et il y avait une nette différence par rapport au fichier en html d'où mon post.

    @ Paul TOTH merci de ta suggestion aurais tu un exemple ?

    @+,

    cincap

  8. #8
    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 445
    Points
    28 445
    Par défaut
    vite fait, voici ce que ça pourrait donner

    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
     
    type
      TMyThread = class(TThread)
        procedure Execute; override;
      end;
     
    procedure TMyThread.Execute;
    begin
      repeat
        Fmonitor1.LoadImage;
        Synchronize(FMonitor1.ShowImage);
        Sleep(0);
      until Terminated;
    end;
     
    procedure TFmonitor1.LoadImage;
    begin
        Mystreamt.clear ;
        Try
          IdHTTP1.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows 
     
    NT 6.0; SLCC1';
     
          IdHTTP1.Get('http://' +Edurl.Text+ ':88/snapshot.cgi?user='+Eduser.text
     
    +'&pwd='+Edpass.Text+'',Mystreamt);
     
        except
          //ShowMessage('Fichier indisponible');
          Exit;
        End;
    end;
     
    procedure TFMonitor1.ShowImage;
    begin
        Mystreamt.Seek(0, soFromBeginning);  { on rembobine le stream }
     
        Try
     
      jpg.LoadFromStream(MyStreamt);
     
      Image1.Picture.Assign(jpg);
        Finally 
     
      End;
     
    end;
    reste plus qu'à créer le thread sur on OnCreate par exemple.

    EDIT: trop vite fait il n'est pas recommandé d'appeler des méthodes d'objets de la VCL depuis un Thread, donc l'URL doit être constituée une fois pour toute dans un string au chargement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      url := 'http://' +Edurl.Text+ ':88/snapshot.cgi?user='+Eduser.text +'&pwd='+Edpass.Text+'';
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

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

    @ Paul TOTH, merci pour ton exemple que je n'ai pas pu exploiter malgré un projet de test car je ne reçoit aucune image du parlophone, certainement que je n'ai pas bien codé !

    Par contre en mettant la valeur du TTimer à 250ms j'obtiens un meilleur résultat.

    Voici mon code de test :

    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
    87
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, IdBaseComponent, IdComponent, jpeg, IdTCPConnection,
      IdTCPClient, IdHTTP;
     
    type
      TMyThread = class(TThread)
        procedure Execute; override;
      end;
     
    type
      TFMonitor1 = class(TForm)
        Image1: TImage;
        IdHTTP1: TIdHTTP;
        procedure LoadImage;
        procedure ShowImage;
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      FMonitor1: TFMonitor1;
     
      IdHTTP1:Tidhttp;
      MyStreamt:TMemoryStream;
      Jpg:TJpegImage;
      BMP : TBitmap;
     
    implementation
     
    {$R *.dfm}
     
     
     
      procedure TMyThread.Execute;
    begin
      repeat
        Fmonitor1.LoadImage;
        Synchronize(FMonitor1.ShowImage);
        Sleep(0);
      until Terminated;
    end;
     
    procedure TFmonitor1.LoadImage;
    begin
        Mystreamt.clear ;
        Try
          IdHTTP1.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1';
     
          IdHTTP1.Get('http://192.168.1.83:88/snapshot.cgi?user=&pwd=',Mystreamt);
     
        except
          //ShowMessage('Fichier indisponible');
          Exit;
        End;
    end;
     
    procedure TFMonitor1.ShowImage;
    begin
        Mystreamt.Seek(0, soFromBeginning);  { on rembobine le stream }
     
        Try
     
      jpg.LoadFromStream(MyStreamt);
     
      Image1.Picture.Assign(jpg);
        Finally 
     
      End;
     
    end;
     
    procedure TFMonitor1.FormCreate(Sender: TObject);
    begin
    //url := 'http://192.168.1.83:88/snapshot.cgi?user=&pwd=';
    IdHTTP1.Get('http://192.168.1.83:88/snapshot.cgi?user=&pwd=',Mystreamt);
    end;
     
    end.
    @+,

    cincap

  10. #10
    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 445
    Points
    28 445
    Par défaut
    pas testé, mais ça doit donner quelque chose comme ça

    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, IdBaseComponent, IdComponent, jpeg, IdTCPConnection,
      IdTCPClient, IdHTTP;
     
    type
      TMyThread = class(TThread)
        procedure Execute; override;
      end;
     
    type
      TFMonitor1 = class(TForm)
        Image1: TImage;
        IdHTTP1: TIdHTTP;
        procedure LoadImage;
        procedure ShowImage;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        { Déclarations privées }
        url: string;
        MyStreamt:TMemoryStream;
        Jpg:TJpegImage;
        thread: TThread;
      public
        { Déclarations publiques }
      end;
     
    var
      FMonitor1: TFMonitor1;
     
    //  IdHTTP1:Tidhttp;
    //  MyStreamt:TMemoryStream;
    //  Jpg:TJpegImage;
    //  BMP : TBitmap;
     
    implementation
     
    {$R *.dfm}
     
     
     
      procedure TMyThread.Execute;
    begin
      repeat
        Fmonitor1.LoadImage;
        Synchronize(FMonitor1.ShowImage);
        Sleep(0);
      until Terminated;
    end;
     
    procedure TFmonitor1.LoadImage;
    begin
        Mystreamt.clear ;
        Try
          IdHTTP1.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1';
     
          IdHTTP1.Get(url,Mystreamt);
     
        except
        End;
    end;
     
    procedure TFMonitor1.ShowImage;
    begin
        Mystreamt.Seek(0, soFromBeginning);  { on rembobine le stream }
     
      jpg.LoadFromStream(MyStreamt);
     
      Image1.Picture.Assign(jpg);
     
    end;
     
    procedure TFMonitor1.FormCreate(Sender: TObject);
    begin
      url := 'http://192.168.1.83:88/snapshot.cgi?user=&pwd=';
      Mystreamt := TMemoryStream.Create;
      jpg := TJPEGImage.Create;
      thread := TMyThread.Create;
    // IdHTTP1.Get('http://192.168.1.83:88/snapshot.cgi?user=&pwd=',Mystreamt);
    end;
     
    procedure TFMonitor1.FormDestroy(Sender: TObject);
    begin
      thread.Free
      mystreamt.Free;
      jpg.Free;
    end;
     
    end.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

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

    @ Paul TOTH, merci de ta réponse.

    J'ai vu mes erreurs mais j'obtiens quand même une erreur de compilation ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TFMonitor1.FormCreate(Sender: TObject);
    begin
      url := 'http://192.168.1.83:88/snapshot.cgi?user=&pwd=';
      Mystreamt := TMemoryStream.Create;
      jpg := TJPEGImage.Create;
      thread := TMyThread.Create;
    // IdHTTP1.Get('http://192.168.1.63:81/snapshot.cgi?user=&pwd=',Mystreamt);
    end;
    "Pas assez de paramètres originaux"

    Je pensais à TThread au lieu de TMythread mais non.

    @+,

    cincap

  12. #12
    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 445
    Points
    28 445
    Par défaut
    thread := TMyThread.Create(false)
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

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

    @ Paul TOTH, grand merci pour ce code qui permet sans timer de vérifier la vue du vidéoparlophone Wifi.

    J'ai juste ajouté dans le oncreate de la fiche afin d'éviter la saccade de l'image:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    doublebuffered := true;
    @ Paul TOTH, j'avais suivi tous tes travaux concernant la vidéo et je te félicite pour tous ces exemples qui m'ont permis de réaliser de petites applications personnelles.

    Merci à tous, je ferme ce topic.

    Cordialement,

    cincap

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

Discussions similaires

  1. Fermeture fenetre crée par code javascript
    Par Kerod dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 27/02/2010, 00h04
  2. Appel fonction php dans code javascript
    Par licorne dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 05/03/2008, 10h55
  3. Convertir un code builder C++ en Delphi
    Par ramanov dans le forum Langage
    Réponses: 7
    Dernier message: 21/09/2007, 18h02
  4. pas moyen de trouver l'erreur de ce code Javascript !!!
    Par NATHW dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/11/2004, 21h47
  5. Deboggage de code Javascript...
    Par michel baily dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/11/2004, 16h32

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