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

Web & réseau Delphi Discussion :

[D10.2] Problème de fonction dans un script Java


Sujet :

Web & réseau Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Points : 161
    Points
    161
    Par défaut [D10.2] Problème de fonction dans un script Java
    Bonjour,
    Dans mon application, J'ai un script contenu dans une page HTML sous forme de String.
    Ce script comprend une fonction ShowMap avec 4 paramètres string.
    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
      strHTML: String =
      '<!DOCTYPE html>' +
      '<html>' +
      '<head>' +
      '<meta charset="utf-8" />' +
      '<title>Esri Leaflet Quickstart</title>' +
      ' <meta name="viewport" content="initial-scale=1.0,maximum-scale=1.0,user-scalable=no" />' +
      '<!-- Load Leaflet from PC -->' +
      '<link rel="stylesheet" href="D:/Developement/CPS-NG/Win64/Debug/Leaflet/leaflet.css"' +
        'integrity="sha512-xodZBNTC5n17Xt2atTPuE1HxjVMSvLVW9ocqUKLsCC5CXdbqCmblAshOMAS6/keqq/sMZMZ19scR4PsZChSR7A=="' +
        'crossorigin=""/>' +
      '<script src="D:/Developement/CPS-NG/Win64/Debug/Leaflet/leaflet.js"' +
        'integrity="sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA=="' +
        'crossorigin=""></script>' +
      '<style>' +
        'body { margin:0; padding:0; }' +
        '#map { position: absolute; top:0; bottom:0; right:0; left:0; }'+
      '</style>' +
      '</head>' +
     '<body>' +
     '<div id="map"></div>' +
     '<script>' +
        'function ShowMap(MaxLat, MaxLon, MinLat, MinLon)' +
        '{' +
        'var map = L.map("map").fitBounds(' +
        '[MaxLat, MaxLon],' +
        '[MinLat, MinLon]' +
    	  ');' +
        'L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","' +
         '{"' +
        'attribution: "&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> CPS-NG"' +
        '}).addTo(map);' +
        '}' +
     '</script>' +
     '</body>' +
     '</html>';
    la fonction de ce script est appelée par une procedure (PlotMap)
    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
    procedure TfrmFlightMap.plotMap;
    var
      MaxLat,
      MaxLon,
      MinLat,
      MinLon :String;
    begin
      MaxLat:= '51';
      MaxLon:= '5';
      MinLat:= '48';
      MinLon:= '-75';
     
      HTMLWindow2.execScript(Format('ShowMap(%s,%s,%s,%s)',[MaxLat, MaxLon,
                                                            MinLat, MinLon]),
                                                            'JavaScript')  ;
    end;
    HTMLWindow2 est défini ici:
    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
    procedure TfrmFlightMap.FormCreate(Sender: TObject);
    var
      aStream : TMemoryStream;
    begin
      wbbMap.Navigate('about:blank');
     
     if Assigned(wbbMap.Document) then
      begin
        aStream :=  TMemoryStream.Create;
        try
          aStream.WriteBuffer(Pointer(strHTML)^, Length(strHTML));
            aStream.Seek(0, soFromBeginning);
            (wbbMap.Document as IPersistStreamInit).Load(TStreamAdapter.
                                                              Create(aStream));
        finally
          aStream.Free;
        end;
        HTMLWindow2:= (wbbMap.Document as iHTMLDocument2).parentWindow;
        wbbMap.Visible:= true;
      end;
    end;
    Lorsque je lance PlotMap, J'obtiens une erreur de script: ShowMap est indéfini.

    Pourriez vous m'aider à comprendre où se situe mon ou mes erreurs?

    Merci
    Cordialement
    Pierre

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 426
    Points : 24 790
    Points
    24 790
    Par défaut
    En dehors que execScript ne devrait pas utilisé, c'est plutôt 'JScript' que 'JavaScript' selon la Doc

    Force dans le code '<script type="text/javascript"> ' pour que cela soit en phase

    Faudrait vérifier que les options IE11 autorise l'exécution du Script dans le WebBrowser, il faut regarder aussi le niveau d'émulation dans 'Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION'.
    Voir si d'ailleurs ça passe par Edge

    Et pouvoir lancer un script depuis l'hote du WebBrowser, j'ai lu que c'était possible, cependant, il faut vérifier que tous les objets OLE soient chargés, un DOM complet, c'est certains via Navigate2 ... mais via une écriture via IPersistStreamInit, j'ai déjà plus de doute que je JS soit chargé, mais mes souvenirs c'est en D7 avec IE5 et plein de problème de compatibilité entre IE4, IE5 et IE6 où le JS ne fonctionnait jamais, une MsgBox d'erreur

    Le WebBrowser affiche la page ?
    Il faut que le WebBrowser soit visible sinon aucun DOM n'est produit.

    D'ailleurs, votre réponse "Certains fichier sont corrompus semble-t-il..." sur un autre sujet Leaflet indique que vous connaissez déjà le sujet depuis un certain temps, même avec Google MAP depuis 2016 ... pas de bol, je tombe que sur vos sujets, dire que cela n'a pas été fréquent comme utilisation en Delphi.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Bonjour

    [ModeRonchon On]Mais bordel, quand les gens qui font du JavaScript arrêteront-ils d'écrire "Java" à la place ? Ca n'a rien à voir ![ModeRonchon Off]

    Si c'est du Delphi 10.2 le TWebBrowser embarqué ne prend en charge que l'API de IE. Ce programme ne devrait pas pouvoir fonctionner sur des versions récentes de Windows 10 (qui sont censées avoir viré IE au profit de Edge) et windows 11 (qui n'a rien d'autre que Edge).

    Si c'est juste pour afficher la carte, pourquoi ne pas passer par l'API de OSM plutôt que par un navigateur ? C'est une autre approche mais au moins c'est durable.

    Il y a des solutions commerciales chez DevExpress et TMS Software, mais aussi open source avec notamment ce projet VCL / LCL : https://github.com/Fr0sT-Brutal/Delphi_OSMMap

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    si je reprends la discussion ancienne https://www.developpez.net/forums/d2...me-webbrowser/
    il faudrait déjà savoir s'il s'agit de FMX ou VCL (certainement le dernier)

    Mais comme c'est résolu, sans que l'on sache quelle est la solution , je ne vais pas aller plus loin
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 336
    Points : 531
    Points
    531
    Billets dans le blog
    2
    Par défaut Delphi_OSMMap ne compile pas sous Lazarus
    Citation Envoyé par pprem Voir le message
    Il y a des solutions commerciales chez DevExpress et TMS Software, mais aussi open source avec notamment ce projet VCL / LCL : https://github.com/Fr0sT-Brutal/Delphi_OSMMap
    Qui ne compile pas du tout sous Lazarus

  6. #6
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Citation Envoyé par JP CASSOU Voir le message
    Qui ne compile pas du tout sous Lazarus
    oui, ok, mais on parle d'une question sur Delphi là, ou j'ai loupé un truc ?

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par pprem Voir le message
    on parle d'une question sur Delphi là, ou j'ai loupé un truc ?
    Rien loupé, c'est bien indiqué dans le titre Delphi 10.2

    @JPCassou s'il s'agit du dépôt Git, autant le signaler à l'auteur
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Points : 161
    Points
    161
    Par défaut
    @SergioMaster
    Bonjour,

    J'ai créé un fichier "geoJSON" qui contient les points de la route aérienne de mon appli.
    Je tente de relier ces points par une ligne "geodesic" (grand cercle).
    Pour cela j'ai modifié mon fichier "geoJSON" en y ajoutant les lignes reliant les points.
    J'ai utilisé pour cela le code trouvé sur la toile ici: https://opensourcelibs.com/lib/leaflet.geodesic et que voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    const geojson = {
        "type": "LineString",
        "coordinates": [
            [13.35, 52.5], [-122.33, 47.56], [18.39, -33.94], [116.39, 39.92], [13.35, 52.5]
        ]
    };
    const geodesic = new L.Geodesic().addTo(map);
    geodesic.fromGeoJson(geojson);
    comme j'ai 25 points sur ma route, voici mon fichier geoJSON.

    flightpoints.zip

    Il fonctionne parfaitement avec seulement les points, mais pas avec les lignes.

    Très novice dans ce domaine, je souhaiterais ton aide.
    Merci
    Cordialement
    Pierre

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Points : 161
    Points
    161
    Par défaut
    Le grand weekend étant propice à la réflexion, J'ai, au moins en partie, résolu mon problème.
    En effet, J'ai modifié le fichier geoJSON en utilisant un outils en ligne:

    https://geojson.io

    Tout fonctionne, excepter le fait que je souhaite afficher les lignes reliant le points sous forme de geodesic (Grand cercle).
    pour l'instant, je cherche...

    Si vous avez une idée, je suis preneur..

    Bon weekend
    Pierre

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Points : 161
    Points
    161
    Par défaut
    Bonjour,
    Nouvelle avancée dans ma quête...

    Je réussi à afficher les lignes géodésiques entre mes markers, mais plus les markers eux-mêmes, avec le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const geodesic = new L.Geodesic().addTo(map);
    	geodesic.fromGeoJson(waypoints);
    je tente donc d'utiliser un filtre pour n'afficher que les markers:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    const geodesic = new L.Geodesic().addTo(map);
    	geodesic.fromGeoJson(waypoints);
     
    	function pointFilter(feature) {
    	if (feature.geometry.type === "Point") return true
        }
     
    	var points =  new L.geoJson(waypoints, {filter: pointFilter}).addTo(map);
    Et mon problème est résolu.

    Nom : Capture1.JPG
Affichages : 138
Taille : 153,2 Ko

    Cordialement
    Pierre

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

Discussions similaires

  1. Problème d'accent dans le script java
    Par anaice dans le forum Pentaho
    Réponses: 1
    Dernier message: 06/11/2009, 16h12
  2. [JS] Appeler une fonction dans un script externe
    Par agent007se dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/03/2007, 13h30
  3. Réponses: 10
    Dernier message: 07/01/2007, 13h03
  4. Réponses: 8
    Dernier message: 30/08/2006, 11h08
  5. [MySQL] Problème de pagination dans un script.
    Par Scurz dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 13/08/2006, 13h47

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