Форум: "WinAPI";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];
ВнизНадо программно навести курсор на ссылку в WebBrowser-е. Найти похожие ветки
← →
Alpine (2005-09-12 23:37) [0]Доброго времени суток .. Вобщем у меня возникла такая проблемма ... Использую компонент WebBrowser .. Открываю в нём URL. Загрузилась страничка .. В страничке много ссылок .. Мне надо навести на ссылку название которой я знаю. Подскажите как мне это сделать .. Или хотя бы идеи дайте плиззз ...
Заранее благодарен всем откликнувшимся !!
← →
Nick Denry © (2005-09-12 23:48) [1]Ктсати, тоже вопрос интересует, а так же получение управления стандартным объектом Document и обработки событий элементов.
И книжку по COM(ActiveX) порекомендуйте плиз.
← →
Ihor Osov'yak © (2005-09-13 00:31) [2]> Или хотя бы идеи дайте плиззз ...
Среди методов IHtmlElement (или IHtmlElement2 :-) есть методы, возращаеющее смещение соотв. тега в пикселах относительно родительского тега. Пройдясь по списке родителей, можно вычислить координаты элемента относительно "начала" броузера. Попотно нужно учитывать значение скролинга (тоже есть соотв. методы в вышеупомянутых интерфейсах). Не забывать за возможность существования фреймов. Далее учитываем координаты самого броузера уже в контексте виндозных окон - и как следсвие имеем координаты тега в пространстве экрана. Далее двигаем соотв. апишными мишиный курсор..
делал когда-то похожую вещь, в десяток-другой строк кода, имхо, можно вложится.. Сейчас в архиве старых проектов влом искать..
← →
Nick Denry © (2005-09-13 13:15) [3]Ihor Osov"yak © (13.09.05 00:31) [2]
А OnMouseClick создать (или прехватить) для элемента с конкретным ID разве нельзя?
← →
Alpine (2005-09-13 22:20) [4]Уважаемый Ihor Osov"yak не могли бы вы скинуть мне на alpine@hotmail.ru инфу по IHtmlElement, или если у вас есть пример по этой теме, то вообще было бы супер !
Заранее благодарен !
← →
easy © (2005-09-14 11:58) [5]frmMainU.pas
unit frmMainU;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, ExtCtrls, StdCtrls, ComCtrls;
type
TfrmMain = class(TForm)
SB: TStatusBar;
LB: TListBox;
SPL: TSplitter;
WB: TWebBrowser;
procedure FormCreate(Sender: TObject);
procedure WBDocumentComplete(Sender: TObject; const pDisp: IDispatch;
var URL: OleVariant);
procedure LBClick(Sender: TObject);
procedure WBBeforeNavigate2(Sender: TObject; const pDisp: IDispatch;
var URL, Flags, TargetFrameName, PostData, Headers: OleVariant;
var Cancel: WordBool);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
procedure TfrmMain.FormCreate(Sender: TObject);
begin
WB.Navigate("http://delphimaster.net/view/4-1126553860/");
end;
function ElementTop(elem: OleVariant): integer;
var
top, height: integer;
begin
top := 0;
height := elem.offsetHeight;
repeat
top := top + elem.offsetTop;
elem := elem.offsetParent;
until elem.tagName = "BODY";
result := top + height div 2;
end;
function ElementLeft(elem: OleVariant): integer;
var
left, width: integer;
begin
left := 0;
width := elem.offsetWidth;
repeat
left := left + elem.offsetLeft;
elem := elem.offsetParent;
until elem.tagName = "BODY";
result := left + width div 2;
end;
procedure TfrmMain.WBDocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
i: integer;
allA: OleVariant;
p: TPoint;
begin
allA := WB.OleObject.document.all.tags("A");
for i := 0 to allA.length - 1 do begin
p := point(ElementLeft(allA.item(i)), ElementTop(allA.item(i)));
LB.Items.Add(inttostr(p.X) + " : " + inttostr(p.Y) + " -> " + allA.item(i).innerText);
end;
end;
procedure TfrmMain.LBClick(Sender: TObject);
var
p: TPoint;
bodyTop, bodyLeft: integer;
allA: OleVariant;
begin
allA := WB.OleObject.document.all.tags("A");
with LB do
p := point(ElementLeft(allA.item(ItemIndex)), ElementTop(allA.item(ItemIndex)));
WB.OleObject.document.parentWindow.scrollTo(p.X - WB.Width div 2, p.Y - wb.Height div 2);
p := WB.ClientToScreen(p);
bodyTop := WB.OleObject.document.body.scrollTop;
bodyLeft := WB.OleObject.document.body.scrollLeft;
setcursorpos(p.X - bodyLeft, p.Y - bodyTop);
end;
procedure TfrmMain.WBBeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
LB.Clear;
end;
end.
frmMainU.dfmobject frmMain: TfrmMain
Left = 192
Top = 138
Width = 870
Height = 640
Caption = "frmMain"
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = "MS Sans Serif"
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object SPL: TSplitter
Left = 221
Top = 0
Width = 4
Height = 594
Cursor = crHSplit
end
object SB: TStatusBar
Left = 0
Top = 594
Width = 862
Height = 19
Panels = <>
SimplePanel = False
end
object LB: TListBox
Left = 0
Top = 0
Width = 221
Height = 594
Align = alLeft
ItemHeight = 13
TabOrder = 1
OnClick = LBClick
end
object WB: TWebBrowser
Left = 225
Top = 0
Width = 637
Height = 594
Align = alClient
TabOrder = 2
OnBeforeNavigate2 = WBBeforeNavigate2
OnDocumentComplete = WBDocumentComplete
ControlData = {
4C000000D6410000643D00000000000000000000000000000000000000000000
000000004C000000000000000000000001000000E0D057007335CF11AE690800
2B2E126208000000000000004C0000000114020000000000C000000000000046
8000000000000000000000000000000000000000000000000000000000000000
00000000000000000100000000000000000000000000000000000000}
end
end
setcursorWB.dprprogram setcursorWB;
uses
Forms,
frmMainU in "frmMainU.pas" {frmMain};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
end.
← →
Nick Denry © (2005-09-14 17:17) [6]easy © (14.09.05 11:58) [5]
спасибо.
Кусочки deplhiMaster Chat? ;)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.041 c