Позиция каретки на веб-браузере - PullRequest
1 голос
/ 09 марта 2011

Я пытаюсь получить идентификатор элемента htmlinputtextelement в веб-браузере, где курсор мигает. Поэтому, когда я нажимаю клавишу TAB, все меняется.

Как я могу сделать это в Delphi?

Вы знаете, когда заходите на веб-сайт, и есть несколько элементов ввода. Вы можете прокручивать их, нажимая TAB. Когда вы закончите с полем 1, вкладка, заполните поле 2, вкладку 3, поле TAB, пока не заполните форму на веб-сайте. Я хочу сделать это. Зная, какой идентификатор у входного элемента, в котором находится текущая каретка.

Вы можете получить положение мыши с помощью getcursorpos. Вы можете получить позицию каретки таким же образом? Они не дают одинаковое местоположение для х и у ... ??

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);

1 Ответ

3 голосов
/ 09 марта 2011

Каретка не так проста, как положение курсора мыши: каждое окно свободно создавать и отображать свою карету, где бы она ни захотела.Вот ссылка Использование карет на 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;
...