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

Вниз

double click в EmbeddedWB   Найти похожие ветки 

 
nikkie ©   (2003-09-15 14:51) [0]

Хочу при double click на картинке открывать некоторый диалог. Думал, что получится, написав в OnGetHostInfo
pInfo.dwDoubleClick := DOCHOSTUIDBLCLK_PROPERTIES;
Result := S_OK;

получать нотификацию в OnProperties - но не работает :(
Точно так же ничего не происходит, если я выставляю DOCHOSTUIDBLCLK_SHOWCODE. Почему? Как еще перехватить doubleclick? Что-то других идей, кроме как перехватывать WM_LBUTTONDBLCLK, в голову не приходит, а это мне не очень нравится.


 
Тих   (2003-09-15 20:46) [1]

Я статейку про WebBrowser уже послал сюда, но ее чего-то не публикуют никака. Держи кусочек, думаю, поможет, взамен того ляпсуса, который я про проперти в COM выдал )

Вспомогательный класс.

unit Helper;

interface

uses
Windows, ComObj, ActiveX, projectMain_TLB, StdVcl, Dialogs, MSHTML_TLB;

type
THTMLBodyEvent = procedure(Sender: IHTMLElement) of object;
THelper = class(TAutoObject, IHelper)
private
FOnClick : THTMLBodyEvent;
FOnDblClick: THTMLBodyEvent;
protected
{ Protected declarations }
public
Doc : IHTMLDocument2;
property OnClick : THTMLBodyEvent read FOnClick write FOnClick;
property OnDblClick: THTMLBodyEvent read FOnDblClick write FOnDblClick;
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; override; stdcall;
end;

implementation

uses ComServ;

{ THelper }

function THelper.Invoke(DispID: Integer; const IID: TGUID;
LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo,
ArgErr: Pointer): HResult;
var ID: WideString;
begin
case DispId of
-600: if (Assigned(FOnClick )) then FOnClick (Doc.parentWindow.event.srcElement);
-601: if (Assigned(FOnDblClick)) then FOnDblClick(Doc.parentWindow.event.srcElement);
end;
result := inherited Invoke(DispId, IID, LocaleId, Flags, Params, varResult, ExcepInfo, ArgErr);
end;

initialization
TAutoObjectFactory.Create(ComServer, THelper, Class_Helper,
ciMultiInstance, tmApartment);
end.


Собственно код некоей формы

TFrmMain = class(TForm)
...
procedure OnBodyClick (Sender: IHTMLElement);
procedure OnBodyDblClick(Sender: IHTMLElement);
...


procedure TFrmMain.FormCreate(Sender: TObject);
begin
WB.Navigate(ExtractFilePath(Application.ExeName) + "index.htm");
FHelper := THelper.Create;
FHelper.OnClick := Self.OnBodyClick;
FHelper.OnDblClick := Self.OnBodyDblClick;
end;


// Привязываемся к событиям
procedure TFrmMain.WBNavigateComplete2(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
pCont: IConnectionPointContainer;
pPoint: IConnectionPoint;
pUnk: IUnknown;
begin
FWBDoc := unassigned;
FWBDoc := WB.Document;
FDoc := WB.Document as IHTMLDOcument2;
FHelper.Doc := FDoc;
FBody := FDoc.body as IHTMLBodyElement;
pCont := FDoc as IConnectionPointContainer;
pCOnt.FindConnectionPoint(HTMLDocumentEvents2, pPoint);
pPoint.Advise(FHelper, FCookie);
end;

procedure TFrmMain.OnBodyClick(Sender: IHTMLElement);
begin
if (Sender.tagName = "H1") then ShowMessage("Its a Header with id "" + Sender.id + """);
if (Sender.tagName = "A") then ShowMessage("Its a Link with id "" + Sender.id + """);
end;

procedure TFrmMain.OnBodyDblClick(Sender: IHTMLElement);
begin
ShowMessage("DblClick " + Sender.id);
end;


 
nikkie ©   (2003-09-15 23:55) [2]

спасибо! HTMLDocumentEvents - это правильная мысль.



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

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

Наверх




Память: 0.47 MB
Время: 0.021 c
4-42311
Demetrius
2003-09-17 19:03
2003.11.13
WinInet


7-42190
Vince
2003-08-28 19:56
2003.11.13
Ошибка при обрашении к LPT


3-41016
pwl
2003-10-15 21:26
2003.11.13
Как сохранить часть базы?????????


3-41002
OlkaGTS
2003-10-16 12:13
2003.11.13
Один DataSetProvicer - много ClientDataSet


1-41234
qwerty2
2003-11-03 22:53
2003.11.13
Структура как возвращаемое функцией значение