Je suis sous W8.1, avec Delphi 6 Personal Edition.
Je réalise une grosse DLL en Delphi avec des centaines de fonctions, destinée à étendre les possibilités d'un langage de programmation freeware.
Dans ce cadre ce ce travail, j'ai créé un ensemble de fonctions permettant de créer dynamiquement un objet TWebBrowser et de l'injecter dans une form du programme application, puis de piloter cet objet. Mais maintenant, je veux y ajouter la possibilité d'intercepter l'évènement OnClick sur n'importe quel élément HTML, et je n'y arrive pas. Pourtant, j'ai réussi à gérer l'évènement WebBrowser_OnNavigateComplete2 du WebBrowser, sans problème. Mais le compilateur refuse de prendre mes lignes. J'ai essayé des dizaines de variantes, j'ai passé des jours à chercher sur le net. Mais au final, pas de solution. Voici le fragment de code qui pose problème:
avec la fonction étant déclarée comme suit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 // installation de l'évènement OnClick sur un élément HTML quelconque function WBOnClick():integer; stdcall; export; var myDoc: IHTMLDocument2; begin myDoc := WB.Document as IHTMLDocument2; // Ligne suivente; erreur: // Types incompatibles: 'OleVariant' et 'procedure, untyped pointer or untyped parameter' myDoc.onclick := TDummy.DocumentOnClick; // <== erreur ici ! // je n'ai pas non plus réussi à utliliser la méthode AttachEvent... result := 0; end;
En pièce jointe, je mets un fichier test_WB.zip. Ce fichier contient 2 projets Delphi 6 Personal Edition:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 type TDummy = class class procedure WebBrowser_OnNavigateComplete2(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); // pour WB_Create class procedure DocumentOnClick(); end; // procédure évènement OnClick d'un élément HTML quelconque class procedure TDummy.DocumentOnClick(); begin showmessage('Clic sur élément HTML'); end;
- test_WB.dpr <--- c'est un extrait fonctionnel de ma DLL
- demo_WB.dbr <--- c'est un programme de démo utilisant les fonctions de la DLL
Il y a les sources complètes (ce n'est pas grand...), ainsi que les binaires test_WB.dll et demo_WB.exe. C'est donc exécutable directement. Le mode d'emploi est simple: on lance demo_WB.exe. On obtient une fenêtre avec 5 boutons, dont les libellés décrivent la fonction et contiennent un numéro d'ordre. Actuellement, le bouton "4 - créer OnClick" est inactif, car la fonction correspondante de la DLL ne passe justement pas en compilation.
Je précise que je veux pouvoir établir un évènement OnClick agissant sur l'ensemble des éléments HTML de la page chargée, sans modifier le code HTML de la page et sans recourir au JavaScript, uniquement par les moyens de Delphi 6. Je suis sûr que c'est possible, mais je bute à l'évidence sur un problème de compréhension. Pouvez-vous m'aider ?
Partager