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

Вниз

Кнопка и TWebBrowser   Найти похожие ветки 

 
parovoZZ ©   (2006-01-30 19:45) [0]

Извиняюсь за возможный повтор.
Как перехватить нажатие кнопки (<input type="button") в TWebBrowser? Постоянно её контролировать? Она же вроде никаких событий нам не передаёт. Как быть.


 
Delphi_is_cool ©   (2006-01-31 09:32) [1]

Надо перехватовать событие wm_lbuttonup, а далее просто опредилить по какому обьекту кликнули ...


 
Digitman ©   (2006-01-31 09:35) [2]

фрагмент HTML-кода ЭТОЙ страницы (описание кнопки "Ж" и назначение обработчика ее нажатия):

<input type="button" value="Ж" class="format_btn" title="Жирный" onclick="formatTag("B")" />

здесь formatTag() - JavaScript-функция


 
easy ©   (2006-01-31 14:14) [3]

Unit1.pas
unit Unit1;
interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, OleCtrls, SHDocVw, mshtml, ComCtrls;
type
 THTMLEventNotifyEvent =
   procedure(EventObject: IHTMLEventObj; EventType: string) of object;

 THTMLEvent = class(TInterfacedObject, IDispatch)
 private
   FDocument: IHTMLDocument2;
   FOnEvent: THTMLEventNotifyEvent;
   function GetTypeInfoCount(out Count: Integer): HResult; stdcall;
   function GetTypeInfo(Index, LocaleID: Integer;
     out TypeInfo): HResult; stdcall;
   function GetIDsOfNames(const IID: TGUID; Names: Pointer;
     NameCount, LocaleID: Integer; DispIDs: Pointer):
     HResult; stdcall;
   function Invoke(DispID: Integer; const IID: TGUID; LocaleID:
     Integer; Flags: Word; var Params; VarResult, ExcepInfo,
     ArgErr: Pointer): HResult; stdcall;
   procedure DoEvent;
 public
   constructor Create(Document: IHTMLDocument2);
   property OnEvent: THTMLEventNotifyEvent
     read FOnEvent
     write FOnEvent;
 end;

type
 TForm1 = class(TForm)
   WebBrowser1: TWebBrowser;
   Memo1: TMemo;
   StatusBar1: TStatusBar;
   procedure FormShow(Sender: TObject);
 private
   { Private declarations }
   procedure KeyEvent(EventObject: IHTMLEventObj;
     EventType: string);
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function THTMLEvent.GetTypeInfoCount(out Count: Integer): HResult;
begin
 Result := E_NOTIMPL
end;

function THTMLEvent.GetTypeInfo(Index, LocaleID: Integer;
 out TypeInfo): HResult;
begin
 Result := E_NOTIMPL
end;

function THTMLEvent.GetIDsOfNames(const IID: TGUID; Names: Pointer;
 NameCount, LocaleID: Integer; DispIDs: Pointer): HResult;
begin
 Result := E_NOTIMPL
end;

function THTMLEvent.Invoke(DispID: Integer; const IID: TGUID;
 LocaleID: Integer; Flags: Word; var Params; VarResult,
 ExcepInfo, ArgErr: Pointer): HResult;
begin
 DoEvent;
 Result := S_OK;
end;

constructor THTMLEvent.Create(Document: IHTMLDocument2);
begin
 inherited Create;
 FDocument := Document;
 FOnEvent := nil;
end;

procedure THTMLEvent.DoEvent;
var
 EventObj: IHTMLEventObj;
 EventType: string;
begin
 if Assigned(FOnEvent) then
 begin
   EventObj := nil;
   EventType := "";
   if Assigned(FDocument) and Assigned(FDocument.parentWindow) then
   begin
     EventObj := FDocument.parentWindow.event;
     if Assigned(EventObj) then
       EventType := EventObj.type_;
   end;
   FOnEvent(EventObj, EventType);
 end;
end;
{ TForm1 }

procedure TForm1.KeyEvent(EventObject: IHTMLEventObj; EventType: string);
var
 attr: OleVariant;
begin
 Memo1.Clear;
 Memo1.Lines.Add("Type of Event: " + EventType);
 Memo1.Lines.Add("Element tagName: " + EventObject.srcElement.tagName);
 attr := EventObject.srcElement.getAttribute("type", 0);
 if attr <> Null then
   Memo1.Lines.Add("Element type: " + attr);
 EventObject.cancelBubble := true;
 EventObject.returnValue := false;
end;

procedure TForm1.FormShow(Sender: TObject);
var
 Doc: IHTMLDocument2;
 EventHandler: THTMLEvent;
begin
 Memo1.Clear;
 WebBrowser1.Navigate("http://ya.ru");
 repeat
   application.ProcessMessages;
 until WebBrowser1.ReadyState >= READYSTATE_COMPLETE;
 Doc := WebBrowser1.Document as IHTMLDocument2;
 EventHandler := THTMLEvent.Create(Doc);
 EventHandler.OnEvent := KeyEvent;
 Doc.onclick := EventHandler as IDispatch;
 {Doc.onkeydown := EventHandler as IDispatch;
 Doc.onkeypress := EventHandler as IDispatch;
 Doc.onkeyup := EventHandler as IDispatch;  //etc.}
end;

end.


Unit1.dfm
object Form1: TForm1
 Left = 192
 Top = 153
 Width = 719
 Height = 489
 Caption = "Form1"
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "MS Sans Serif"
 Font.Style = []
 OldCreateOrder = False
 OnShow = FormShow
 PixelsPerInch = 96
 TextHeight = 13
 object WebBrowser1: TWebBrowser
   Left = 0
   Top = 0
   Width = 466
   Height = 443
   Align = alClient
   TabOrder = 0
   ControlData = {
     4C0000002A300000C92D00000000000000000000000000000000000000000000
     000000004C000000000000000000000001000000E0D057007335CF11AE690800
     2B2E126208000000000000004C0000000114020000000000C000000000000046
     8000000000000000000000000000000000000000000000000000000000000000
     00000000000000000100000000000000000000000000000000000000}
 end
 object Memo1: TMemo
   Left = 466
   Top = 0
   Width = 245
   Height = 443
   Align = alRight
   Lines.Strings = (
     "Memo1")
   ScrollBars = ssVertical
   TabOrder = 1
 end
 object StatusBar1: TStatusBar
   Left = 0
   Top = 443
   Width = 711
   Height = 19
   Panels = <>
   SimplePanel = False
 end
end


 
parovoZZ ©   (2006-01-31 22:51) [4]

easy

прямо в точку. только мне всего-то надо узнать параметр name (ну или id. Кстати, зачем так много идентификаторов одному элементу?)

И не понял: в textarea не работает перенос строки (клавиша enter). Почему?


 
MetalFan ©   (2006-02-01 08:52) [5]

2ease
респект! спасибо! познавательно!


 
easy ©   (2006-02-01 12:06) [6]


> в textarea не работает перенос строки (клавиша enter).
> Почему?

http://www.dfc.com.ru/faq/?base=internet&p=36


 
parovoZZ ©   (2006-02-01 18:58) [7]

И откуда Вы всё знаете? Спасибочки.


 
parovoZZ ©   (2006-02-06 16:54) [8]

Вот что странно. Загружаю HTML код из StringList в TWebBrowser - событие KeyEvent иногда не перехватывется до перезагрузки страницы. А вот если грузить страницу из файла - всё чики чики.



Страницы: 1 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.044 c
5-1132676787
OlegPFR
2005-11-22 19:26
2006.06.04
Компонент не сохраняет свойства


15-1146150464
oldman
2006-04-27 19:07
2006.06.04
У кого есть "M.A.S.H." ???


15-1146921939
Tegag
2006-05-06 17:25
2006.06.04
IP


2-1147783544
seleman
2006-05-16 16:45
2006.06.04
TGroupbox


1-1146007808
sda
2006-04-26 03:30
2006.06.04
Убрать в ListBox рамку