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

API, COM et SDKs Delphi Discussion :

Avec un ActiveX Firefox (via libvlc.ddl), accéder au contenu texte d'un élément HTML


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre habitué

    Homme Profil pro
    Informaticien retraité
    Inscrit en
    Mars 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 287
    Points : 164
    Points
    164
    Billets dans le blog
    1
    Par défaut Avec un ActiveX Firefox (via libvlc.ddl), accéder au contenu texte d'un élément HTML
    Bonjour,

    Je suis sous W10 avec Delphi 6 Personal Edition. Je dévelope une vaste DLL de soutien pour un langage tiers.

    Dans ce contexte, j'ai créé un objet basé sur TMozillaBrowser défini dans MOZILLACONTROLLib_TLB. Je peux le lancer, naviguer vers une URL, piloter les fonctions de base, exécuter du JavaScript etc.

    Maintenant, je voudrais pourvoir identifier et "prendre" un élément HTML dans une variable OleVariant, puis lire et modifier le contenu texte de cet élément par mon code Delphi. J'arrive très bien à faire cela avec le TWebBrowser de MicroSoft, basé sur Internet Explorer, mais je n'arrive pas à trouver comment faire cela avec TMozillaBrowser. Je me suis tourné vers TMozillaBrowser car avec TWebBrowser, l'exécution de JavaScript n'est pas possible. Or, c'est une contrainte essentielle pour ce que je veux faire.

    Est-ce quelqu'un prmi vous pourrait me montrer un exemple de code comment accéder à un élément HTML sous TMozillaBrowser ?

    Merci d'avance !

  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
    Citation Envoyé par KlausGunther Voir le message
    Je suis sous W10 avec Delphi 6 Personal Edition. Je dévelope une vaste DLL de soutien pour un langage tiers.
    Vous devriez peut-être passé à une version gratuite plus récente ou même aller sur Lazarus ou CodeTyphon.
    Car l'édition "Personal" ne doit pas autoriser en théorie une distribution à usage commercial, qui sont les utilisateurs du langage tiers ?
    Delphi 6 pour un vaste projet, est-ce prudent d'utiliser un compilateur vieux de 20 ans ?


    Sinon, est-ce que l'OLE Mozilla prévoit cette utilisation, une sorte de DOM.
    Vous êtes sur que cette ActiveX Mozilla n'est pas obsolète ?

    VLC ? quel rapporte avec Mozilla ?

    Vous devriez reprendre votre projet, voir si c'est vraiment pertinent, partir sur Web Took Kit et Chromium ne serait-ce pas une meilleure idée ?
    Delphi 6 pour servir de pseudo Navigateur Web, il y a quelques choses qui cloche, peut-être voir les composants TMS Web


    EDIT : Curieusement MOZILLACONTROLLib contiendrait aussi une implémentation IWebBrowser2 comme pour IE
    Faudrait pousser voir si il y a une propriété Document qui supporte IHTMLDocument2 et à partir de là Body.InnerHTML si la structure a été copié sur cette de IE
    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 habitué

    Homme Profil pro
    Informaticien retraité
    Inscrit en
    Mars 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 287
    Points : 164
    Points
    164
    Billets dans le blog
    1
    Par défaut
    Vous devriez peut-être passé à une version gratuite plus récente ou même aller sur Lazarus ou CodeTyphon.
    J'ai essayé Lazarus, il y a deux ans. A priori, cela semblait simple, pourtant il y a des différences réelles, et cela impliquait de recoder une part substancielle, et pour certaines parties, je n'ai pas trouvé de solution. J'ai laiss" tomber. Je ne connais pas CodeTyphon - je vas regarder cela.

    l'édition "Personal" ne doit pas autoriser en théorie une distribution à usage commercial, qui sont les utilisateurs du langage tiers ?
    J'en suis conscient. Cependant, les utilisateurs de ce langane (Panoramic pour ne pas le nommer) sont tous des fans de ce langage et qui codent totues sortes de jeux, de petits utilitaires, des programmes à usage personnel etc. La contrainte de licence a été documentée et est connue. A partir de là, c'est la responsabilité de chacun...

    Delphi 6 pour un vaste projet, est-ce prudent d'utiliser un compilateur vieux de 20 ans ?
    Probablement pas. Cependant, le choix a été fait initialement parce que le langage Panoramic pour lequel je développe, a été réalisé lui-même en Delphi 6, et j'ai choisi ce qu'il y avait de plus "proche", en outil gratuit. Mais il y a une autre raison, en-dehors de la gratuité, il me faut la possibilité d'ajouter toute une série de composants tiers (tous gratuits), mais je n'ai pas besoin de lien natif vers des bases de données - j'ai les miennes, créées par moi.

    VLC ? quel rapporte avec Mozilla ?
    LOups... en effet, aucun rapport ! C'est juste un aute ActiveX que j'utilise, mais sans aucun rapport avec ma question actuelle. Désolé pour l confusion.

    Vous devriez reprendre votre projet, voir si c'est vraiment pertinent, partir sur Web Took Kit et Chromium ne serait-ce pas une meilleure idée ?
    J'ai essaye Chromium,, mais je n'ai pas réussi à l'installer dans mon Delphi 6 PE...

    voir les composants TMS Web
    Ce sont des composant commerciaux, payants. Donc, exclus pour moi.

    Curieusement MOZILLACONTROLLib contiendrait aussi une implémentation IWebBrowser2 comme pour IE
    Ben, c'est ce que je pensais, mais je n'ai pas réussi...

  4. #4
    Membre habitué

    Homme Profil pro
    Informaticien retraité
    Inscrit en
    Mars 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 287
    Points : 164
    Points
    164
    Billets dans le blog
    1
    Par défaut
    J'ai essayé CodeTyphon.

    Première impression:

    L'installation est TRES longue, quoique presque entièrement automatisée. On a juste quelques choix à faire au début.
    Pendant l'installation, il y a une série d'anomalies, de fichiers manquants et d'erreurs de compilation. Mais l'installation continue. Et à la fin, aucun résumé des anomalies. Si je nen les avais pas entr'aperçus lors de l'installation, je n'en aurais rien su. Ceci dit, très difficile d'être plus précis - ça défile très vite.
    Au moins une dizaine d'exécutables n'on pas été générés? Là encore, ça défile trop vite pour être plus précis.
    Il manque au moins deux DLLs liées à DirectX, sans message d'anomalie concernant cela.

    Comparaison Lazarus <-> CodeTyphon:
    Les deux sont basés sur Freeäscal, mais CodeTyphon utise une version plus récente. Cependant, la version FreePascal utilisée par CodeTyphon n'est pas une versiion stable. CodeTyphon est plus riche en compsants que Lazarus. La palette est en effet impressionnante.

    Premiers essais:
    Un simple projet "application" avec un seul objet MaskEdit dans la Form1 ne marche pas. Voici les captures:
    Nom : aa1.png
Affichages : 507
Taille : 23,5 Ko
    Nom : aa2.png
Affichages : 495
Taille : 7,6 Ko
    Nom : aa3.png
Affichages : 490
Taille : 17,8 Ko
    Nom : aa4.png
Affichages : 492
Taille : 9,0 Ko
    En ajoutant l'objet MaskEdit à la Form1, Typhon a ajoute "MaskEdit" dans la liste des unites USE. Or, lors de la compilation, le programme indique que cette unité n'est pas utilisée. Et, de fait, la retirer ne change rien, et plus d'avertissement. Cependant, lors de la génération de l'EXE, il y a le message d'erreur documenté dans la première capture, dans le modure FORMS ! Et donc, l'exécution est impossible.

    Conclusion:
    CodeTyphon étant basé sur FreePascal tout comme Lazarus, j'aurais les mêmes contraintes de conversion de code qu'avec Lazarus. Et cela déscend aussi loin dans les détails techniques que pour la gestion des pointeurs. Avec mes 260 unites, 950 fonctions documentées et rendues publiques, 1500 fonctions exportées dont plus de 500 concernant des projets en cours de développement, l'effort est beaucoup trop grand pour tenter l'aventure. Je suis tout seul pour faire tout cela, je suis à la retraite et fais cela pour mon plaisir, sans aucune rétribution de quelque sorte que ce soit.
    Pour ces raisons, je compte bien rester avec Delphi 6 PE, malgré son "ancienneté". Au moins, cela fonctionne parfaitement et est stable.

  5. #5
    Membre habitué

    Homme Profil pro
    Informaticien retraité
    Inscrit en
    Mars 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 287
    Points : 164
    Points
    164
    Billets dans le blog
    1
    Par défaut
    Donc, je reviens vers ma question initiale:
    Est-ce que quelqu'on aurait une expérience avec TMozillaBrowser, en particulier pour pouvoir accéder le contenu texte des éléments du DOM ?

    Ou alors, autre solution:
    est-ce qu'il y a un moyen par Delphi de lever le bloquage de JavaScript dans le TWebBrowser ? D'après ce que j'ai pu trouver sur le net, ce bloquage a été instauré pour des raisons de sécurité (ce qui peut se comprendre), peut-être même au niveau des paramètres de Windows dans le registre. Je n'en sais rien, je sais seulement que le bloquage existe.

    Evidemment, pour moi, lever ce bloquage au niveau de TWebBrowser serait une solutiion parfaite. Sachant que par ailleurs, je peux accéder au contenu d'un élément HTML du DOM du TWebBrowser sans difficulté, le pourrais laisser tomber le TMozillaBrowser, définitivement. Ce serait même mieux...

  6. #6
    Membre habitué

    Homme Profil pro
    Informaticien retraité
    Inscrit en
    Mars 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 287
    Points : 164
    Points
    164
    Billets dans le blog
    1
    Par défaut
    J'ai fait d'autres recherches et essais pour pouvoir activer JavaScript dans TWebBrowser.
    J'ai utilisé ceci
    https://stackoverflow.com/questions/...from-localhost
    Mais c'est l'échec sur toute la ligne.

    Ni la première solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    ni la seconde solution
    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
    function GetExeName(): String;
    begin
        Result := extractfilename  ( ParamStr(0) );
    end;
     
    procedure SetBrowserEmulationDWORD(const value: DWORD);   //     j'ai ignoré ce paramètre et placé IE9_Quirks directement dans WriteInteger !
    const
      registryPath = 'Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION';
      IE9_Quirks     = 9999;
    var
        registry:   TRegistry;
        exeName:   String;
    begin
        exeName := GetExeName();
     
        registry := TRegistry.Create(KEY_SET_VALUE);
        try
           registry.RootKey := HKEY_CURRENT_USER;
           Win32Check( registry.OpenKey(registryPath, True) );
           registry.WriteInteger(exeName, IE9_Quirks);
        finally
           registry.Destroy();
        end;
    end;
    ne fonctionnent.

  7. #7
    Membre habitué

    Homme Profil pro
    Informaticien retraité
    Inscrit en
    Mars 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 287
    Points : 164
    Points
    164
    Billets dans le blog
    1
    Par défaut
    J'ai fait encore de multiples essais pour faire marcher JavaScript dans TWebBrowser. Rien ne marche - c'est bloqué au niveau des paramètres de sécurité de Windows, malgré mes essais avec les codes proposés sur Internet pour contourner ce problème.

    J'ai également utilisée divers outils comme Besen (ne compile pas), Chakra (violation de mémoire à l'exécution) etc.

    Donc, je renouvelle mon appel à l'aide:
    J'ai besoins d'accéder à JavaScript et au contenu texte d'éléments du DOM de la page HTML active, par un des deux moyens:
    1. préférentiellement, TWebBrowser. Je peux facilement accéder au contenu texte d'un élément du DOM, mais impossible d'exécuter JavaScript
    2. avec TMozillaBrowser provenant de MOZILLACONTROLLib_TLB.pas. Je peux facilement exécuter JavaScript, mais je n'arrive pas à accéder au contenu texte d'un élément du DOM.

  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 430
    Points
    28 430
    Par défaut
    il va falloir te rendre à l'évidence...personne n'utilise ni IE ni Mozilla dans le cas de figure où tu es.

    Besen c'est un moteur JS développé sous Delphi, ça n'a rien à voir avec ton problème.

    de toute façon même Microsoft a renoncé à développer Edge, ils utilisent maintenant Chromium, donc l'approche la plus logique serait de passer à https://github.com/salvadordf/CEF4Delphi ou équivalent
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  9. #9
    Membre habitué

    Homme Profil pro
    Informaticien retraité
    Inscrit en
    Mars 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 287
    Points : 164
    Points
    164
    Billets dans le blog
    1
    Par défaut
    J'avais également tenté cette solution. Cela fait des mois que je me bats avec ce problème.

    CEF4Delphi ne s'installe pas sous D6 PE, car la version la plus ancienne supportée est D7:
    CEF4Delphi was developed and tested on Delphi 10.4 and it has been tested in Delphi 7, Delphi XE, Delphi 10, Delphi 10.2, Delphi 10.3 and Lazarus 2.0.10/FPC 3.2.0. CEF4Delphi includes VCL, FireMonkey (FMX) and Lazarus components.
    Je continue à chercher - oui, je suis patient et obstiné. Et j'espère toujours que quelqu'un pourra me donner un coup de main... En fait, le problème avec TWebBrowser, ma solution préférée, c'est les droits d'accès, l'autorisation d'exécuter du code JavaScript qui est bloqué via les paramètres de sécurité de Windows et InternetExplorer. Le TWebBrowser n'est pas directement en cause - je sais exactement ce qu'il faut coder pour exécuter du JavaScript par TWebBrowser, mais je n'arrive pas à trouver le moyen de contourner cette restriction. Pourtant, ça doit être possible - la preuve, avec TMozillaBrowser, ça marche.

    Selon le viel adage: "Impossible n'est pas français"...

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 390
    Points : 620
    Points
    620
    Par défaut
    tu as essayé la technique d'injecter ton script directement dans un node ? j'avais du l'employer lorsqu'une mise à jour de sécurité avait bloqué l'utilisation executeScript

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var
      Doc2     : IHtmlDocument2;
      Script   : IHtmlDOMNode;
    begin
     Doc2 := Webbrowser1.Document as IHtmlDocument2;
     if Assigned(Doc2.body) then
      begin
       Script := Doc2.createElement('script') as IHTMLDOMNode;
       (Script as IHTMLScriptElement).text := 'function helloWorld() { alert("hello world!") }';
       (Doc2.body as IHtmlDomNode).appendChild(Script);
    end;

  11. #11
    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
    Citation Envoyé par KlausGunther Voir le message
    J'avais également tenté cette solution. Cela fait des mois que je me bats avec ce problème.

    CEF4Delphi ne s'installe pas sous D6 PE, car la version la plus ancienne supportée est D7:


    Je continue à chercher - oui, je suis patient et obstiné. Et j'espère toujours que quelqu'un pourra me donner un coup de main... En fait, le problème avec TWebBrowser, ma solution préférée, c'est les droits d'accès, l'autorisation d'exécuter du code JavaScript qui est bloqué via les paramètres de sécurité de Windows et InternetExplorer. Le TWebBrowser n'est pas directement en cause - je sais exactement ce qu'il faut coder pour exécuter du JavaScript par TWebBrowser, mais je n'arrive pas à trouver le moyen de contourner cette restriction. Pourtant, ça doit être possible - la preuve, avec TMozillaBrowser, ça marche.

    Selon le viel adage: "Impossible n'est pas français"...
    entre D6 et D7 les différences du compilateur sont minimes...je doute que cela soit bloquant.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  12. #12
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    entre D6 et D7 les différences du compilateur sont minimes...je doute que cela soit bloquant.
    Bonjour,

    je confirme, j'ai téléchargé "CEF4Delphi" et au prix de petites modifications et l'ajout d'une fonction "PosEx" (qui n'existe pas sous D6)
    le dpk à compilé et c'est installé sans soucis sous D6 PE

    Mais à mon avis il ne compilait pas sous D7 non plus ni tout < D2009!

    @KlausGunther:
    Si tu as des problèmes pour le faire je te donnerai la liste

    Cordialement,
    @+

  13. #13
    Membre habitué

    Homme Profil pro
    Informaticien retraité
    Inscrit en
    Mars 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 287
    Points : 164
    Points
    164
    Billets dans le blog
    1
    Par défaut
    Merci à vous deux, Cirec et exoseven !

    J'étais absent un bon moment, pour raison de santé. Je reprends les choses en main, lentement.

    Je vais essayer ta méthode, exoseven. Ca paraît étrange, mais si ça marche, ce sera parfait.

    Cirec, tu veux bien me donner la liste des modifications ? Je veis télécharger CEF4Delphi et retenter ma chance avec tes modifications...

  14. #14
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Content d'apprendre ton retour

    Les modifications ne sont pas compliquées,
    j'ai fait des captures des différentes étapes.

    légende:
    en entouré rouge - le nom de l'unité a modifier
    Texte en rouge - code à ajouter
    pour les étapes 1 à 3 se trouve, sous le nom d'unité, le code original avant modification.

    pour l'étape 4 il faut créer une unité "crStrUtils.pas" (ou tout autre nom)
    avec comme code la fonction manquante (PosEx):
    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    unit crStrUtils;
     
    interface
    uses Windows, SysUtils, StrUtils;
     
    {$if CompilerVersion < 15.0}
    function PosEx(const SubStr, Str: string; Offset: integer = 1): integer;
    {$ifend}
     
    implementation
     
     
    // POUR VERSION DELPHI ANTERIEURE A D7
    // Function PosEx en asm
     
    function PosEx(const SubStr, Str: string; Offset: integer = 1): integer;
    asm
           test  eax, eax
           jz    @Nil
           test  edx, edx
           jz    @Nil
           dec   ecx
           jl    @Nil
     
           push  esi
           push  ebx
     
           mov   esi, [edx-4]  //Length(Str)
           mov   ebx, [eax-4]  //Length(Substr)
           sub   esi, ecx      //effective length of Str
           add   edx, ecx      //addr of the first char at starting position
           cmp   esi, ebx
           jl    @Past         //jump if EffectiveLength(Str)<Length(Substr)
           test  ebx, ebx
           jle   @Past         //jump if Length(Substr)<=0
     
           add   esp, -12
           add   ebx, -1       //Length(Substr)-1
           add   esi, edx      //addr of the terminator
           add   edx, ebx      //addr of the last char at starting position
           mov   [esp+8], esi  //save addr of the terminator
           add   eax, ebx      //addr of the last char of Substr
           sub   ecx, edx      //-@Str[Length(Substr)]
           neg   ebx           //-(Length(Substr)-1)
           mov   [esp+4], ecx  //save -@Str[Length(Substr)]
           mov   [esp], ebx    //save -(Length(Substr)-1)
           movzx ecx, byte ptr [eax] //the last char of Substr
     
       @Loop:
           cmp   cl, [edx]
           jz    @Test0
       @AfterTest0:
           cmp   cl, [edx+1]
           jz    @TestT
       @AfterTestT:
           add   edx, 4
           cmp   edx, [esp+8]
           jb   @Continue
       @EndLoop:
           add   edx, -2
           cmp   edx, [esp+8]
           jb    @Loop
       @Exit:
           add   esp, 12
       @Past:
           pop   ebx
           pop   esi
       @Nil:
           xor   eax, eax
           ret
       @Continue:
           cmp   cl, [edx-2]
           jz    @Test2
           cmp   cl, [edx-1]
           jnz   @Loop
       @Test1:
           add   edx,  1
       @Test2:
           add   edx, -2
       @Test0:
           add   edx, -1
       @TestT:
           mov   esi, [esp]
           test  esi, esi
           jz    @Found
       @String:
           movzx ebx, word ptr [esi+eax]
           cmp   bx, word ptr [esi+edx+1]
           jnz   @AfterTestT
           cmp   esi, -2
           jge   @Found
           movzx ebx, word ptr [esi+eax+2]
           cmp   bx, word ptr [esi+edx+3]
           jnz   @AfterTestT
           add   esi, 4
           jl    @String
       @Found:
           mov   eax, [esp+4]
           add   edx, 2
     
           cmp   edx, [esp+8]
           ja    @Exit
     
           add   esp, 12
           add   eax, edx
           pop   ebx
           pop   esi
    end;
     
    end.
    Nom : Modif_1.jpg
Affichages : 398
Taille : 306,9 Ko

    Une fois ces modifications faites
    tu peux (devrais pouvoir) faire l'installation de "CEF4Delphi_D7.dpk"

    je dis ça parce que ça date du mois d'Aout et que je n'avais pas pris de note à l'époque
    Mais après vérification avec le code original ... je suis assez confiant

    Cordialement,

    @+

Discussions similaires

  1. Menu CSS avec bordures - fonctionne firefox, pas ie
    Par Romalafrite dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 21/11/2004, 16h40
  2. Réponses: 8
    Dernier message: 13/08/2004, 13h32
  3. Connection avec MS Query (Excel) via ODBC MySQL
    Par javigle dans le forum Installation
    Réponses: 7
    Dernier message: 23/11/2003, 22h03
  4. PB d'import avec les ActiveX sous BCB6
    Par dergen dans le forum C++Builder
    Réponses: 4
    Dernier message: 29/11/2002, 11h18

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