Форум: "Начинающим";
Текущий архив: 2011.06.12;
Скачать: [xml.tar.bz2];
ВнизTWebBrowser + как узнать адрес ссылки Найти похожие ветки
← →
Fr (2011-02-28 21:52) [0]В TWebBrowser загружена страничка с кучей ссылок. Необходимо по клику правой кнопкой мыши на произвольной ссылке узнать ее URL. Стандартное меню IE отключено и выводится свое.
как это можно сделать? Подскажите, пожалуйста, направление поиска решения проблемы.
← →
KilkennyCat © (2011-02-28 22:29) [1]property Document: IDispatch;
← →
Противный (2011-02-28 22:43) [2]
uses
MSHTML;
{...}
var
D2: IHTMLDocument2;
LE: IHtmlAnchorElement;
begin
if (WebBrowser1.Document <> nil) then
begin
D2 := WebBrowser1.Document as IHTMLDocument2;
if (D2.activeElement <> nil) and (D2.activeElement.QueryInterface(IHtmlAnchorElement, LE) = S_OK) then
Label1.Caption := LE.href;
end;
end;
← →
Fr (2011-03-01 09:58) [3]У меня уже мозг сейчас закипит :(
ElementFromPoint возвращает<BODY>
, а не тег ссылки.ActiveElement
тоже связан с<BODY>
, соответственно иQueryInterface(IHtmlAnchorElement, LE)
не срабатывает.
Если пробегаться по элементам коллекцииDocument
, то нормально выводит все тэги документа. Как же все-таки добраться до того, по которому кликнули мышью?
← →
KilkennyCat © (2011-03-01 11:42) [4]может, поможет:
показывает ссылку, на которую наведен курсор
http://delphi.about.com/od/vclusing/a/wbsinkevents.htm
← →
Противный (2011-03-01 12:15) [5]>> ActiveElement тоже связан с <BODY>
Я тебе привел работающее решение. То есть, я его написал и протестировал, прежде чем тебе дать. Если оно у тебя не работает, видимо, ты что-то намудрил. Создай новый проект, кинь на форму браузер и таймер, повесь код на событие таймера и смотри, что получается. А уже потом будешь искать причину закипания мозга.var
D2: IHTMLDocument2;
LE: IHtmlAnchorElement;
begin
if (WebBrowser1.Document <> nil) then
begin
D2 := WebBrowser1.Document as IHTMLDocument2;
if (D2.activeElement <> nil) then
if (D2.activeElement.QueryInterface(IHtmlAnchorElement, LE) = S_OK) then
Label1.Caption := LE.href
else
Label1.Caption := "tagName: " + D2.activeElement.tagName;
end;
end;
← →
sniknik © (2011-03-01 12:39) [6]> Как же все-таки добраться до того, по которому кликнули мышью?
для начала убрать
> Стандартное меню IE отключено и выводится свое.
видел как отключается обычно...
и судя по
> ElementFromPoint возвращает <BODY>
у тебя именно "тот" способ.
← →
Fr (2011-03-04 16:41) [7]Для вывода своего меню используется:
unit uWBPopUp;
interface
implementation
uses Windows,Controls,Messages,ShDocVw,Forms;
var
HMouseHook:THandle;
Pop: Boolean;
function MouseProc(
nCode: Integer; // hook code
WP: wParam; // message identifier
LP: lParam // mouse coordinates
): Integer; stdcall;
var MHS:TMOUSEHOOKSTRUCT;
WC:TWinControl;
begin
Result:=CallNextHookEx(HMouseHook,nCode,WP,LP);
if nCode=HC_ACTION then begin
MHS:=PMOUSEHOOKSTRUCT(LP)^;
if ((WP=WM_RBUTTONDOWN) or (WP=WM_RBUTTONUP)) then begin
WC:=FindVCLWindow(MHS.pt);
if (WC is TWebBrowser) then begin
Result:=1;
if (TWebBrowser(WC).PopupMenu<>nil) and (WP=WM_RBUTTONUP) then begin
if Pop then Exit;
Pop := True;
TWebBrowser(WC).PopupMenu.Popup(MHS.pt.x,MHS.pt.y);
Pop := False;
end;
end;
end;
end;
end;
initialization
HMouseHook:=SetWindowsHookEx(WH_MOUSE,@MouseProc,HInstance,GetCurrentThreadID);
finalization
try
UnhookWindowsHookEx(HMouseHook);
Sleep(100);
CloseHandle(HMouseHook);
except
end;
end.
Ничего более лучшего не нашел.
Так вот, если послеif (TWebBrowser(WC).PopupMenu<>nil) and (WP=WM_RBUTTONUP) then begin
пытаться обработать активный элемент, то возвращает<BODY>
.
Как же правильно отключать браузерное меню и подменять его своим с доступом к тегам загруженной страницы? Из стандартного меню мне нужны только команды копипаста и несколько своих пунктов.
← →
Противный (2011-03-04 17:08) [8]> Fr (04.03.11 16:41) [7] Как же правильно отключать браузерное меню и подменять его своим с доступом к тегам загруженной страницы?
Во-первых, не использовать хуки.
Во-вторых, читать документацию: http://msdn.microsoft.com/en-us/library/aa770042%28v=vs.85%29.aspx#wbc_ctxmenus
← →
sniknik © (2011-03-04 17:26) [9]поиск активного элемента (activeElement) при том, что хуком на корню "убита" возможность его поменять...
как знал.
> Как же правильно отключать браузерное меню
http://delphimaster.net/view/6-1296642524/
← →
Fr (2011-03-04 17:56) [10]
> Противный (04.03.11 17:08) [8]
> sniknik © (04.03.11 17:26) [9]
спасибо, буду изучать
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.06.12;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.003 c