Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.041 c
1-1129626479
CaptainAlex
2005-10-18 13:07
2005.11.13
Корректность имени файла. Как проверить?


2-1129720063
Df23
2005-10-19 15:07
2005.11.13
Не понимаю, почему так.


6-1122645473
CAMCOH
2005-07-29 17:57
2005.11.13
Как отправить html письмо с помощью Insy IdSmtp


1-1129203791
VIsa
2005-10-13 15:43
2005.11.13
Помогите разобраться с прозрачностью в TPNGImage


14-1129793289
AlexSysAdmin
2005-10-20 11:28
2005.11.13
Вопрос по использованию Atmel AT89S52





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский