Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.13;
Скачать: CL | DM;

Вниз

Надо программно навести курсор на ссылку в 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.dfm
object 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.dpr
program 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 вся ветка

Текущий архив: 2005.11.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.039 c
2-1129959642
-[ HAWK ]-
2005-10-22 09:40
2005.11.13
Доступ к файлу


3-1128081748
alol
2005-09-30 16:02
2005.11.13
adoconnection не находит нужного провайдера


6-1122620933
Hereticsoul
2005-07-29 11:08
2005.11.13
TClientSocket пытаться подключиться.


2-1129884252
ZZZ
2005-10-21 12:44
2005.11.13
Программное изменение раскладки клавиатуры.


2-1129433833
intel
2005-10-16 07:37
2005.11.13
глюк формы