2011-03-09 8 views
1

J'essaie d'obtenir l'identifiant d'un élément htmlinputtext dans webbrowser où le curseur clignote. Donc, quand j'appuie sur TAB, ça change.Position du curseur sur le navigateur web

Comment est-ce que je peux faire ceci dans delphi?

Vous savez quand vous allez sur un site Web et qu'il y a plusieurs éléments de saisie en entrée. Vous pouvez les parcourir en appuyant sur TAB. Lorsque vous avez terminé avec la case 1, TAB, remplissez la case 2, TAB, case 3, TAB jusqu'à ce que vous avez rempli le formulaire sur le site. Je veux faire ça. En sachant ce qu'est l'identifiant de l'élément de texte en entrée que le curseur actuel est en.

Vous pouvez obtenir la position de la souris avec getcursorpos. pouvez-vous obtenir la position du curseur de la même manière? Ils ne donnent pas le même emplacement pour x et y ... ??

procedure TForm1.Button2Click(Sender: TObject); 
var 
    MausPos: TPoint; 
    HtmlElement: IHTMLElement; 
    iHTMLDoc: IHtmlDocument2; 
    tag1:string; 
    id1:string; 
begin 
    if Supports(webbrowser1.Document, IHtmlDocument2, iHTMLDoc) then 
    begin 
    if GetcaretPos(MausPos) then 
    begin 
     MausPos := webbrowser1.screentoclient(MausPos); 
     HtmlElement := iHTMLDoc.ElementFromPoint(MausPos.X, MausPos.Y); 
+0

Si je laisse tomber un TWebBrowser sur un formulaire, puis en appuyant sur TAB n'entraîne dans l'accent étant mis pédalé. Cela ne vous arrive-t-il pas? –

+0

pas si un élément texttext est sélectionné. puis appuyer sur TAB entraîne la sélection du prochain élément inputtext – dave123

+0

Je suis désolé, je ne comprends tout simplement pas. Peut-être que quelqu'un d'autre avec plus de connaissances sur TWebBrowser peut vous aider. –

Répondre

3

Le Caret est pas aussi simple que la position du curseur de la souris: Chaque fenêtre est libre de créer et afficher son propre caret, partout où il le veut. Voici un Using Carets link on MSDN. Normalement, vous vous attendez à ce qu'une fenêtre ne montre qu'un Caret si elle a le focus sur le clavier, mais je ne pense pas qu'il y ait quoi que ce soit qui empêche une fenêtre de montrer le Caret même s'il n'a pas le focus clavier.

Étant donné que le comportement normal consiste à afficher uniquement le curseur si le curseur est activé, vous pouvez le vérifier en utilisant: GetFocus. Mais vous découvrirez probablement que le TWebBrowser est lui-même le focus, je doute qu'il y ait un handle de fenêtre pour chaque élément HTML.

Ce que je suppose que vous voulez réellement, c'est l'élément actif. Vous pouvez obtenir qu'utiliser:

(TWebBrowser.Document as IHTMLDocument2).activeElement 

Voici un court extrait de code qui utilise cette propriété:

procedure TForm25.Button2Click(Sender: TObject); 
begin 
    if (W.Document as IHTMLDocument2).activeElement <> nil then 
    ShowMessage((W.Document as IHTMLDocument2).activeElement.tagName); 
end; 
+2

+1 'TForm25' raconte une histoire de dépendance Stack Overflow! –

+0

@David, je viens de passer une demi-heure à lire "suis-je accro à SO" sur meta ... merci beaucoup. –

+0

J'ai trouvé 'TForm25' très drôle parce que je le reconnais moi-même. Je pense que je suis à TForm28 en ce moment !! –

Questions connexes