線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1893
推到 Plurk!
推到 Facebook!

請問在 TCppWebBrowser 元件中 , 加入 MouseMoveEvent 的問題..

答題得分者是:GrandRURU
taylor2727
一般會員


發表:5
回覆:5
積分:2
註冊:2009-12-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-12-08 22:22:18 IP:123.194.xxx.xxx 訂閱
各位大大......目前小弟正在製作一個瀏覽器 , 需要紀錄滑鼠瀏覽時所經過的游標位址...
但是在 TCppWebBrowser 元件中 , 本身並沒有 MouseMove的事件 , 所以小弟打算自訂一個滑鼠事件 ,
不過一直出現錯誤 , 可以麻煩大大幫我看看是哪裡的問題嗎....
謝謝各位. ...
謝謝

[code cpp]
****** 標投檔 .h *****
class TwebrowserMain : public TForm
{
private:
TMouseMoveEvent FOnMouseMove;

protected:

__published:
__property TMouseMoveEvent OnMouseMove2 = {read=FOnMouseMove, write=FOnMouseMove}; <== 這行一加入就出現錯誤訊息了
}
extern PACKAGE TwebrowserMain *webrowserMain;
[/code]


[code cpp]
******* .CPP *****
TwebrowserMain *webrowserMain;
void __fastcall TwebrowserMain::CppWebBrowser1DocumentComplete(TObject *Sender,
LPDISPATCH pDisp, Variant *URL)
{
strLastNavigating = Variant(URL) ;
comboBoxUrl->Text = strLastNavigating;
CppWebBrowser1->OnMouseMove2=CppWebBrowser11MouseMove; /*但是在CppWebBrowser1中 , 根本就找不到 OnMouseMove2 這動作*/
}

[/code]

錯誤訊息是 :
Error in module webrowser_Main : Incorrect field declaration in class TwebrowserMain
謝謝

編輯記錄
taylor2727 重新編輯於 2009-12-08 22:26:01, 註解 無‧
taylor2727 重新編輯於 2009-12-08 22:28:22, 註解 無‧
taylor2727 重新編輯於 2009-12-08 22:31:30, 註解 無‧
taylor2727 重新編輯於 2009-12-08 22:37:38, 註解 無‧
taylor2727 重新編輯於 2009-12-08 22:51:31, 註解 無‧
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-12-09 09:45:14 IP:203.75.xxx.xxx 未訂閱
國外討論區有相關的資訊
不過是很冷門的語系,看嘸
來源:Отловить MouseMove над CppWebBrowser?

[code cpp]
// in hpp
#ifndef MainH
#define MainH
//---------------------------------------------------------------------------
#include
#include
#include
#include <Forms.hpp><br />#include "mshtml.h"
#include "mshtmdid.h"
#include "SHDocVw_OCX.h"
#include
#include
//---------------------------------------------------------------------------
typedef void __fastcall (__closure *TOnMouseMove)();
//---------------------------------------------------------------------------
class THtmlEventSink : public IDispatch
{
protected:
TOnMouseMove FOnMouseMove;
public:
THtmlEventSink() { m_cRef = 0; }
~THtmlEventSink() { /*ShowMessage("~THtmlEventSink()");*/} // trace it work

HRESULT __stdcall QueryInterface(REFIID riid, void** ppvObject)
{
*ppvObject = NULL;

if (IsEqualGUID(riid, IID_IUnknown))
*ppvObject = reinterpret_cast(this);

if (IsEqualGUID(riid, IID_IDispatch))
*ppvObject = reinterpret_cast(this);

if (*ppvObject)
{
((IUnknown*)*ppvObject)->AddRef();
return S_OK;
}
else return E_NOINTERFACE;
}

DWORD __stdcall AddRef()
{
return InterlockedIncrement(&m_cRef);
}

DWORD __stdcall Release()
{
if (InterlockedDecrement(&m_cRef) == 0)
{
delete this;
return 0;
}
return m_cRef;
}

STDMETHOD(GetTypeInfoCount)(unsigned int FAR* pctinfo)
{ return E_NOTIMPL; }

STDMETHOD(GetTypeInfo)(unsigned int iTInfo, LCID lcid, ITypeInfo FAR* FAR* ppTInfo)
{ return E_NOTIMPL; }

STDMETHOD(GetIDsOfNames)(REFIID riid, OLECHAR FAR* FAR* rgszNames, unsigned int cNames, LCID lcid, DISPID FAR* rgDispId)
{ return S_OK; }

STDMETHOD(Invoke)(DISPID dispIdMember, REFIID riid, LCID lcid,
WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult,
EXCEPINFO * pExcepInfo, UINT * puArgErr)
{
if (FOnMouseMove != NULL)
FOnMouseMove();

return S_OK;
}
public:
__property TOnMouseMove OnMouseMove = {read = FOnMouseMove, write = FOnMouseMove};
protected:
long m_cRef;
};
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TCppWebBrowser *CppWebBrowser1;
TMemo *Memo1;
TPanel *Panel1;
TEdit *Edit1;
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
void __fastcall CppWebBrowser1DocumentComplete(TObject *Sender,
LPDISPATCH pDisp, TVariant *URL);
void __fastcall CppWebBrowser1NavigateComplete2(TObject *Sender,
LPDISPATCH pDisp, TVariant *URL);
private: // User declarations
void __fastcall OnMouseMove();
_di_IDispatch CurDispatch;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

//in cpp
#include
#pragma hdrstop

#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
CurDispatch = NULL;
CppWebBrowser1->Navigate(WideString("http://www.codenet.ru"));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OnMouseMove()
{
long cx;
long cy;

TComInterface pDoc;
CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&pDoc);
TComInterface pWin;
TComInterface pEvent;
pDoc->get_parentWindow( &pWin);
pWin->get_event( &pEvent);

if (pEvent)
{
pEvent->get_clientX( &cx);
pEvent->get_clientY( &cy);
}

String Str;
Str.printf("X = %d: Y = %d)", cx,cy);

Memo1->Lines->Add( Str);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
CppWebBrowser1->Navigate(WideString(Edit1->Text));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CppWebBrowser1DocumentComplete(TObject *Sender,
LPDISPATCH pDisp, TVariant *URL)
{
if (pDisp == CurDispatch)
{
// the document is loaded, not just a frame
CurDispatch = NULL; //clear the global variable
IHTMLDocument2* pDoc;
CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&pDoc);
THtmlEventSink* EventSink = new THtmlEventSink();
EventSink->OnMouseMove = OnMouseMove;
VARIANT vIn;
V_VT(&vIn) = VT_DISPATCH;
V_DISPATCH(&vIn) = EventSink;
// put onmousemove
if(SUCCEEDED(pDoc->put_onmousemove( vIn )))
;//ShowMessage("ConnectEvent: onmousemove");

pDoc->Release();
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CppWebBrowser1NavigateComplete2(TObject *Sender,
LPDISPATCH pDisp, TVariant *URL)
{
if (!CurDispatch)
CurDispatch = pDisp; // save for comparison
}
[/code]

編輯記錄
GrandRURU 重新編輯於 2009-12-09 09:46:43, 註解 排版亂了…‧
GrandRURU 重新編輯於 2009-12-09 09:48:30, 註解 無‧
GrandRURU 重新編輯於 2009-12-10 08:59:36, 註解 無‧
taylor2727
一般會員


發表:5
回覆:5
積分:2
註冊:2009-12-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-12-09 17:15:00 IP:123.194.xxx.xxx 訂閱
感謝GrandRURU兄 ....
協助的資訊...
對小弟很有幫助..謝謝..

不過小弟沒有解釋清楚問題.....真不好意思....
這次小弟..不只需要抓CppWebBroser視窗中的位址...也要抓上面工具列的位址......
就等於是把瀏覽器最大化後 , 全部的位址的要抓到..才可以...

,..謝謝GrandRURU兄的幫忙...
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-12-10 09:05:37 IP:203.75.xxx.xxx 未訂閱
看不懂你在問什麼

什麼是「上面工具列」的位址
長什麼樣子呀?

===================引 用 taylor2727 文 章===================
這次小弟..不只需要抓CppWebBroser視窗中的位址...也要抓上面工具列的位址......
就等於是把瀏覽器最大化後 , 全部的位址的要抓到..才可以...
taylor2727
一般會員


發表:5
回覆:5
積分:2
註冊:2009-12-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-12-10 10:32:08 IP:122.116.xxx.xxx 訂閱
GrandRURU兄..
抱歉....我說得不是很清楚 ... , 就是 IE瀏覽器上方的功能表列 , (檔案, 編輯 , 檢視 , 我的最愛 , 工具 ...) 等 , 這些是用Panel TmainMenu 所組成的 ,
但是只要滑鼠移動到這一塊 , 就無法擷取的座標位址 ....就差在這裡了.....謝謝...

GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-12-10 11:34:43 IP:203.75.xxx.xxx 未訂閱
MainMenu元件+O nMouseMove事件的處理......看來是沒有人這樣做,幫不上忙
taylor2727
一般會員


發表:5
回覆:5
積分:2
註冊:2009-12-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-12-12 00:45:46 IP:123.194.xxx.xxx 訂閱
恩恩..謝謝大大的幫忙協助..
感恩感恩...
謝謝囉....
系統時間:2024-03-28 22:55:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!