跨視窗的文字拖曳 |
尚未結案
|
almost001
一般會員 發表:2 回覆:2 積分:5 註冊:2003-11-06 發送簡訊給我 |
|
anpino
版主 發表:31 回覆:477 積分:231 註冊:2003-01-02 發送簡訊給我 |
|
gwanlin
一般會員 發表:1 回覆:29 積分:6 註冊:2002-07-30 發送簡訊給我 |
|
anpino
版主 發表:31 回覆:477 積分:231 註冊:2003-01-02 發送簡訊給我 |
引言: 我想,如果是文字的話應該蠻輕鬆吧!!只要在"拖曳"這個動作發生時把字串存起來,然後等到滑鼠放開之後再去找到目前active的window或物件,然後把字串貼過去.......... 只是想法啦!!希望對你有幫助!! 我是gwanlin 發表人 - gwanlin 於 2003/11/22 23:48:26你說的這是在自己的application內的視窗物件拖曳。 跨視窗拖曳並沒有那麼簡單, 首先你必須將你的form 註冊為可外部拖曳, 才能收到從外部視窗拖曳來的物件。 請almost001 先參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40768 只要改幾行程式, 便能做出跨視窗拖曳文字的功能。 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D |
almost001
一般會員 發表:2 回覆:2 積分:5 註冊:2003-11-06 發送簡訊給我 |
引言:呃,是這樣的:我就是不知道要改哪幾行才會發問的.... 在拖曳文字時,應該不是發出 WM_DROPFILES,但我並不知道會發出何種訊息。 再者,註冊為可外部拖曳文字,應該也不是用 DragAcceptFiles(Handle,true); 那麼,我還是不清楚要使用哪個 API 才能完成可支援拖曳文字的註冊....引言: 我想,如果是文字的話應該蠻輕鬆吧!!只要在"拖曳"這個動作發生時把字串存起來,然後等到滑鼠放開之後再去找到目前active的window或物件,然後把字串貼過去.......... 只是想法啦!!希望對你有幫助!! 我是gwanlin 發表人 - gwanlin 於 2003/11/22 23:48:26你說的這是在自己的application內的視窗物件拖曳。 跨視窗拖曳並沒有那麼簡單, 首先你必須將你的form 註冊為可外部拖曳, 才能收到從外部視窗拖曳來的物件。 請almost001 先參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40768 只要改幾行程式, 便能做出跨視窗拖曳文字的功能。 |
anpino
版主 發表:31 回覆:477 積分:231 註冊:2003-01-02 發送簡訊給我 |
引言:從一個視窗(drop source)拖曳物件到另一個視窗(drop target), 我們可以用[url="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/com/htm/ofn_p2z_2lkg.asp"]RegisterDragDrop[/url]這個函式將自己的form 註冊為[url="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/com/htm/oin_d_95tg.asp"]drop target[/url]。 (ps. 所有有底線的地方都是連向msdn的指令解說頁面, 您可以參考看看。) BCB 的 Form 也有一個屬性: DropTarget, 別忘了設為true。 另外程式結束時必須使用[url="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/com/htm/ofn_p2z_40mo.asp"]RevokeDragDrop[/url]將你註冊的(drop target)from 取消。 將form 註冊為drop target後, 你便可以[url="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/html/_core_drag_and_drop.3a_.implementing_a_drop_target.asp"]override拖曳過程中Drop Target的函式[/url]。拖曳產生時, Drop Target會呼叫你override的函式, 你可以從它傳進來的值得到拖曳過來的物件。 我沒有時間寫sample給你, 所以給你一個方向。 如果您實作出來的話, 希望您可以發表出來給大家參考。謝謝。 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖引言: 請almost001 先參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40768 只要改幾行程式, 便能做出跨視窗拖曳文字的功能。<< 這句話是錯的!! 抱歉。 windows 跨applications 的拖曳控制分為2種: 一種是檔案拖曳,由File Manager 控制。 一種是其他物件拖曳(例如文字, 圖片等等)由OLE控制。 請見MSDN [url="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_drag_and_drop.3a_.customizing.asp"]Drag and Drop (OLE)[/url]呃,是這樣的:我就是不知道要改哪幾行才會發問的.... 在拖曳文字時,應該不是發出 WM_DROPFILES,但我並不知道會發出何種訊息。 再者,註冊為可外部拖曳文字,應該也不是用 DragAcceptFiles(Handle,true); 那麼,我還是不清楚要使用哪個 API 才能完成可支援拖曳文字的註冊.... |
anpino
版主 發表:31 回覆:477 積分:231 註冊:2003-01-02 發送簡訊給我 |
喔!! 對了 !! 拖曳成功的時候, 拖曳的物件會被複製到剪貼簿,
(注意: 剪貼簿支援的格式才會複製)
你可以直接從剪貼簿抓資料, 不需要從Drog Target傳進來的參數做轉換。 抓剪貼簿上的文字:
void* lpstr; HANDLE hdlRecieve; // Get copy data OpenClipboard(NULL); hdlRecieve = GetClipboardData(CF_TEXT); // 設定剪貼簿格式 lpstr = GlobalLock(hdlRecieve); Form2->Edit1->Text = (char*)lpstr; // 抓文字 GlobalUnlock(hdlRecieve); CloseClipboard();數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |