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

如何透過CppWebBrowser拖曳移動表單

答題得分者是:taishyang
tyzzccn1
一般會員


發表:2
回覆:4
積分:1
註冊:2008-11-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-11-24 10:18:18 IP:203.67.xxx.xxx 訂閱
各位大大:
小弟在TForm上面放了一個佔滿整個畫面的CppWebBrowser元件,然後把TForm的BorderType設為bsNone(因為小弟要做不規則表單),但是如此一來便無法用滑鼠拖曳移動整個表單(因為TForm收不到Mouse事件),而CppWebBrowser元件也沒有Mouse事件可供使用,請問針對這個頭痛問題各位大大是否有方法可以達到小弟的目的呢?!
------
With Best Regards
taishyang
站務副站長


發表:377
回覆:5486
積分:4552
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-11-24 11:30:42 IP:118.169.xxx.xxx 訂閱
試試下面的code
.h file
class TForm1 : public TForm
{
__published: // IDE-managed Components
TCppWebBrowser *CppWebBrowser1;
private: // User declarations
void __fastcall WebBrowserWndProc(TMessage& Message);
TWndMethod OldWebBrowserWndProc;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};

.cpp file
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{

OldWebBrowserWndProc = CppWebBrowser1->WindowProc;
CppWebBrowser1->WindowProc = WebBrowserWndProc;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::WebBrowserWndProc(TMessage& Message)
{
switch (Message.Msg){
case WM_MOUSEMOVE:{
if(Message.WParam == MK_LBUTTON){
ReleaseCapture();
Perform(WM_NCLBUTTONDOWN, HTCAPTION, NULL);
}
}break;
}
OldWebBrowserWndProc(Message);
}
編輯記錄
taishyang 重新編輯於 2008-11-24 11:31:34, 註解 無‧
tyzzccn1
一般會員


發表:2
回覆:4
積分:1
註冊:2008-11-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-11-24 13:55:50 IP:203.67.xxx.xxx 訂閱
感謝大大的拔刀相助.........不過.............根據小弟測試的結果......如果CppWebrowser沒有用Navigate方法瀏覽網頁的話(例如CppWebBrowser1->Navigate(L"http://www.pchome.com.tw");)的話是可以拖曳表單沒錯,反之如果有的話............就失效了說........!_!
------
With Best Regards
taishyang
站務副站長


發表:377
回覆:5486
積分:4552
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-11-24 15:05:58 IP:118.169.xxx.xxx 訂閱
應該有更好的方式,小弟目前想的方式如下:
.h
class TForm1 : public TForm
{
__published: // IDE-managed Components
TCppWebBrowser *CppWebBrowser1;
void __fastcall FormShow(TObject *Sender);
private: // User declarations
void __fastcall IEMessageHandler(tagMSG &Msg, bool &Handled);
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};

.cpp
TPoint ptCursor;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Application->IEMessageHandler;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
CppWebBrowser1->Navigate(L"http://delphi.ktop.com.tw/board.php");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IEMessageHandler(tagMSG &Msg, bool &Handled)
{
GetCursorPos(&ptCursor);
ptCursor = ScreenToClient(ptCursor);
if (ptCursor.x < Form1->Width-25 &&
ptCursor.y < Form1->Height-25){ //避開scrollbar,這地方要加強
ReleaseCapture();
Perform(WM_NCLBUTTONDOWN, HTCAPTION, NULL);
}
}
編輯記錄
taishyang 重新編輯於 2008-11-24 15:07:15, 註解 無‧
tyzzccn1
一般會員


發表:2
回覆:4
積分:1
註冊:2008-11-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-11-24 16:19:50 IP:203.67.xxx.xxx 訂閱
大大的回覆速度實在是太驚人了.........根據小弟的測試結果.....已經可以正確拖曳表單......但是有一點小小的問題....連滑鼠點選超聯結的功能都消失了.....:P
小弟稍微修改了一下大大的程式碼(借花獻佛稍微融合大大的第一版跟第二版)
if (ptCursor.x < this->Width-25 &&
ptCursor.y < this->Height-25 &&
Msg.message == WM_MOUSEMOVE){ //避開scrollbar,這地方要加強
if(Msg.wParam == MK_LBUTTON)
{
ReleaseCapture();
Perform(WM_NCLBUTTONDOWN, HTCAPTION, NULL);
}
}
這樣就不會太趕盡殺絕...:P.......但是還是有不足之處.......假如網頁中有TextBox,那在該TextBox中的滑鼠拖曳選取文字功能也一樣消失,原因應該跟大大講的卷軸問題是同一個......
這一點不知道大大有沒有想法可以改善呢?!
------
With Best Regards
編輯記錄
tyzzccn1 重新編輯於 2008-11-24 16:20:57, 註解 無‧
taishyang
站務副站長


發表:377
回覆:5486
積分:4552
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-11-24 16:27:24 IP:118.169.xxx.xxx 訂閱
小弟技窮了,沒用過這元件 ><
RaynorPao 大師應該有辦法:P
tyzzccn1
一般會員


發表:2
回覆:4
積分:1
註冊:2008-11-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-11-24 16:38:54 IP:203.67.xxx.xxx 訂閱
大大如此熱心,小弟已經非常感激了.......小弟已經依照您的建議發簡訊給那位大師,再次衷心感謝大大的急公好義阿!!
------
With Best Regards
xbx
一般會員


發表:0
回覆:10
積分:12
註冊:2003-08-03

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-12-13 22:37:36 IP:125.89.xxx.xxx 訂閱
在HTML页面中:
[code xml]
fucntion TitleBarMouseDownFun()
{
external.titlebar();
}

[/code]

CppWebBrowser中,

需要实现external的功能,
然后在external 中,写入:
ReleaseCapture();
Perform(WM_SYSCOMMAND, SC_MOVE HTCAPTION, 0);
即可。
关键就是实现external 部分的代码。
网上都有的,您找找看即可。
系統時間:2017-11-20 12:00:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!