![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Вообщем такая проблема. Есть WebBrowser. Нуно определить над каким словом весит курсор, и через определенное время показать hint. Нашел что-то Active Accessibility 2.0. Работает он по моему везде, но получаю я только всю строку, а вот слово.
Затем заюзал EM_CHARFROMPOS, но не работает данная фишка в WebBrowser: Вот код: function TForm1.SeeWord(x, y: integer): string; var iCharIndex, iLineIndex, iCharOffset, i, j: Integer; Pt: TPoint; s: string; Document: IHTMLDocument2; begin result:=''; Document:=WebBrowser1.Document as IHtmlDocument2; if Document<>nil then begin //RichEdit1.Text:=(Document.all.Item(NULL, 0) as IHTMLElement).outerText; //Берем позицию символа по курсором Pt:=Point(X, Y); iCharIndex:=WebBrowser1.Perform(EM_CHARFROMPOS, 0, Integer(@Pt)); //iCharIndex:=RichEdit1.Perform(EM_CHARFROMPOS, 0, Integer(@Pt)); //iCharIndex:=100; if iCharIndex<0 then Exit; // Линию курсора iLineIndex:=RichEdit1.Perform(EM_EXLINEFROMCHAR, 0, iCharIndex); iCharOffset:=iCharIndex-RichEdit1.Perform(EM_LINEINDEX, iLineIndex, 0); if RichEdit1.Lines.Count-1<iLineIndex then Exit; //Читкаем линию s:=RichEdit1.Lines[iLineIndex]; //Ищем начало слова i:=iCharOffset+1; while (i>0) and (s[i]<>' ') do Dec(i); //ищем конец слова j:=iCharOffset+1; while (j<=Length(s)) and (s[j]<>' ') do Inc(j); //Вывод Edit2.Text:=IntToStr(iCharIndex)+':'+IntToSTr(iLin eIndex)+':'+IntToSTr(iCharOffset); result:=Copy(s, i+1, j-i-1); end; end; |