1

カレットが点滅しているウェブブラウザでhtmlinputtextelementのIDを取得しようとしています。したがって、Tabキーを押すと変化します。

どうすればデルファイでこれを行うことができますか?

Webサイトにアクセスすると、複数のinputtextelementsがあります。Tabキーを押すと、それらをスクロールできます。ボックス1、TABを使い終わったら、Webサイトのフォームに記入するまで、ボックス2、TAB、ボックス3、TABに入力します。これをやりたいです。現在のカレットが含まれているinputtextelementのIDが何であるかを知ることによって。

getcursorposを使用してマウスの位置を取得できます。同じようにカレットの位置を取得できますか?彼らはxと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);
4

1 に答える 1

3

カレットは、マウスカーソルの位置ほど単純ではありません。各ウィンドウは、必要な場所に独自のカレットを自由に作成して表示できます。これがMSDNの「キャレットの使用」リンクです。通常、ウィンドウにはキーボードフォーカスがある場合にのみカレットが表示されると予想されますが、キーボードフォーカスがない場合でも、ウィンドウにカレットが表示されないようにするものはないと思います。

通常の動作では、キーボードフォーカスがある場合にのみカレットが表示されるため、GetFocusを使用してそれを確認できます。しかし、TWebBrowser自体がフォーカスを保持していることに気付くでしょう。各HTML要素にウィンドウハンドルがあるとは思えません。

あなたが実際に欲しいと思うのはアクティブな要素です。あなたはそれを使ってそれを得ることができます:

(TWebBrowser.Document as IHTMLDocument2).activeElement

このプロパティを使用する短いコードスニペットは次のとおりです。

procedure TForm25.Button2Click(Sender: TObject);
begin
  if (W.Document as IHTMLDocument2).activeElement <> nil then
    ShowMessage((W.Document as IHTMLDocument2).activeElement.tagName);
end;
于 2011-03-09T14:15:57.017 に答える