全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1985
推到 Plurk!
推到 Facebook!

TClipboard 用法一問

尚未結案
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-04 01:50:35 IP:140.113.xxx.xxx 未訂閱
各位好,小弟在使用 TClipboard 有些許困惑, 在 help 又找不到解答, 所以來提出問題,希望各位能為我解答。     
void __fastcall TformMain::ListBox1DblClick(TObject *Sender)
{
    TClipboard *cb = new TClipboard();
    cb->AsText = ListBox1->Items->Strings[ListBox1->ItemIndex];
    ...........
    delete cb;
}
 
在以上的程式碼裡頭,我的問題是 當我使用
cb->AsText = ......;
時, 是會先把Clipboard裡的資料清掉,再新增新的進去, 還是就直接放新的進去呢 ? 若是直接放新的進去,那我在 delete cb 之前需要 clear 嗎? 或是程式會自動在 delete 時也把 cb 的內容 clear 呢? 另外,為什麼我用 TClipboard *cb = new TClipboard(); 與 TClipboard *cb = new TClipboard; 都可以阿? 後面有沒有加()有什麼不一樣嗎? -- http://www.csie.nctu.edu.tw/~chtai/software.html 好用免費軟體的收集網頁,歡迎大家跟我分享或一同推廣免費軟體。 若您覺得這網頁不錯,也歡迎您將它傳出去 :) 發表人 - chtai 於 2004/09/04 02:10:30
------
My Web: http://nelson.csie.us
My Blog: http://blog.nelson.csie.us
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-04 02:17:01 IP:211.76.xxx.xxx 未訂閱
chtai你好:     TClipboard不能動態的去建立他,他只是一個包裝Clipboard的物件。用法是直接使用全域的Clipboard變數。例子如下:  
 
void __fastcall TForm1::Button1Click(TObject *Sender)    {
  if (Clipboard()->HasFormat(CF_TEXT))
    Edit1->Text = Clipboard()->AsText;
  else
    Application->MessageBox("The clipboard does not contain text.", NULL, MB_OK);
}
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-04 02:27:59 IP:211.76.xxx.xxx 未訂閱
另外針對你的問題,(抱歉.上一個忘了回答)
 
cb->AsText = ListBox1->Items->Strings[ListBox1->ItemIndex];
上面的程式碼實際上會被編譯器,轉成下面的碼:
 
cb->SetAsText(ListBox1->Items->Strings[ListBox1->ItemIndex]);
SetAsText函數是private的,不能明確的被呼叫,而cb的AsText只是個"假象" 他是一個"property"。vcl元件中,property只能算是一個"介面",不一定有真 實的變數存在。如果你查bcb的help,可以看到下面的解說:
 
__property AnsiString AsText = {read=GetAsText, write=SetAsText}; 
上面表示你在寫入AsText這個"介面"時,實際上是呼叫了SetAsText這個函數, 讀取AsText這個介面時,則是呼叫了GetAsText這個介面。至於SetAsText做了什麼...他的底層是呼叫了SetClipboardData這個Winapi來做到設定Clipboard資料的動作。 嗯...不知道有沒有回答你的問題?
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-05 12:26:17 IP:140.113.xxx.xxx 未訂閱
感謝pwipwi大哥, 可是我之前在搜尋站上文章時, 看到不少前輩也是用我這方法 (動態去建立它) 而不是用 Clipboard() 變數哩.. 而且若是我直接用 "Clipboard()->" bcb在後頭不會自動跳出讓你選擇可用function,property的menu哩~ 這是為什麼呢 ?    另,我一直丟文字到剪貼簿裡, 那我程式結束時需要手動去清空剪貼簿嗎? 像這樣
OpenClipboard(NULL);
EmptyClipboard();
CloseClipboard();
還是我可以不用理它,系統會自動幫我清掉呢? -- http://www.csie.nctu.edu.tw/~chtai/software.html 好用免費軟體的收集網頁,歡迎大家跟我分享或一同推廣免費軟體。 若您覺得這網頁不錯,也歡迎您將它傳出去 :)
------
My Web: http://nelson.csie.us
My Blog: http://blog.nelson.csie.us
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-05 14:37:56 IP:211.76.xxx.xxx 未訂閱
用一個暫時的變數來儲存。就可以自動跳出了。
TClipboard* Clip = Clipboard();
Clip->  
另外如果你要在程式結束後,清空剪貼簿的內容,可以用Clear(); 不過我記得可以不用理他的~
chtai
高階會員


發表:68
回覆:238
積分:116
註冊:2004-05-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-05 16:00:09 IP:140.113.xxx.xxx 未訂閱
引言: 用一個暫時的變數來儲存。就可以自動跳出了。
TClipboard* Clip = Clipboard();
Clip->  
另外如果你要在程式結束後,清空剪貼簿的內容,可以用Clear(); 不過我記得可以不用理他的~
原來如此, 感謝pwipwi大哥 ^^ -- http://www.csie.nctu.edu.tw/~chtai/software.html 好用免費軟體的收集網頁,歡迎大家跟我分享或一同推廣免費軟體。 若您覺得這網頁不錯,也歡迎您將它傳出去 :)
------
My Web: http://nelson.csie.us
My Blog: http://blog.nelson.csie.us
系統時間:2024-05-06 8:00:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!