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

Composants VCL Delphi Discussion :

TWebBrowser : Interception clic , ou lecture d'un fichier local ?


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 113
    Par défaut TWebBrowser : Interception clic , ou lecture d'un fichier local ?
    Bonjour à tous

    pour le Log de mon logiciel, j'utilise TWebBrowser sous Delphi 10

    et j'aimerais, ajouter un lien, quand c'est un fichier local, qui ouvre l'application lié.

    Ouvrir l'appli liée à une extension, je sais faire, ( avec ShellExecute ).

    mais comment " intercepter " le clic sur l'URL du lien, et quelle serait cette URL ?

    Exemple ici :
    Nom : IGfA7FHq4G0J1bjk.png
Affichages : 165
Taille : 6,2 Ko

    Le nom du fichier serait en lien qui ouvrirais l'application liée à l'extension DXF avec le fichier E:\... \ Folio 02.dxf.

    En résumé : le nom du fichier = 1 lien : On clique : ça ouvre le lecteur DXF avec le fichier.

    Merci, Pascal 07300

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 000
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 000
    Par défaut
    Qui dit Web Browser dit HTML.
    Une simple balise <a>Lien</a> et le clic se fera de manière naturelle.

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 094
    Par défaut
    OnNavigate doit chopper les navigations même sur un fichier (cela requiert effectivement un HTML qui founisse le lien de la forme "file://...")
    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

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 113
    Par défaut
    Bonjour
    oui, j'ai avancé sur la détection du clic, voir code plus bas.
    Et ensuite, je lance l'appli lié, avec ShellExecute, et non pas dans le navigateur, comme le ferait une URL de type file://
    Problème résolu donc :-)
    Merci pour vos réponses.
    Pascal 07300

    code : interception du clic:

    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 TForm1.FormCreate(Sender: TObject);
    begin
      Application.OnMessage := MyMessages;
    end;
     
    procedure TForm1.MyMessages(var Msg: TMsg; var Handled: Boolean);
    var
      X, Y: Integer;
      document,
      E: OleVariant;
    begin
      if (Msg.message = WM_LBUTTONDOWN) and IsDialogMessage(WB.Handle, Msg) then
      begin
        X := LOWORD(Msg.lParam);
        Y := HIWORD(Msg.lParam);
        document := WB.Document;
        E := document.elementFromPoint(X, Y);
        Label1.Caption := 'You clicked on:' + E.outerHTML;
      end;
      Handled := False;
    end;

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 938
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 938
    Par défaut
    Le problème avec ton approche est que ça ne va pas interrompre la navigation et tu vas te retrouver avec une page d'erreur dans WebBrowser.

    Si la page est locale, tu devrais passer par l'événement OnBeforeNavigate2 et annuler la navigation le cas échéant. Quelque chose comme :
    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
    const Host = '\\server\web\';
     
    procedure TForm1.FormShow(Sender: TObject);
    begin
      WebBrowser1.Navigate(Host +'index.php');
    end;
     
    procedure TForm1.WebBrowser1BeforeNavigate2(ASender: TObject; const pDisp: IDispatch; const URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool);
    begin
      if not (StartsText(Host, URL) or StartsText('http', URL)) then
      begin
        const URI :string = URL;
     
        if TFile.Exists(URI) then
          ShellExecute(0, 'open', PChar(URI), nil, nil, SW_SHOWNORMAL);
     
        Cancel := TRUE;
      end;
    end;

  6. #6
    Membre très actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Par défaut
    Il existait une vieille astuce pour passer un texte a partir de WB vers Delphi en utilisant un code js dans la page pour changer le texte du status du WB qui sera intercepter dans l'événement OnStatusTextChange, le texte à envoyer doit commencer par un préfixe unique de votre choix pour pouvoir le détecter car le texte du status change beaucoup: pendant le chargement le survole d'un lien.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/03/2014, 14h46
  2. Réponses: 6
    Dernier message: 02/09/2003, 15h12
  3. Lecture et ecriture fichier .ini
    Par despe dans le forum C
    Réponses: 6
    Dernier message: 23/07/2003, 20h40
  4. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 4
    Dernier message: 05/02/2003, 08h54
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24

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