{該文首發於博客園 滔Roy,無須授權即可轉發,請自覺保留頭部申明}
Delphi Clipboard[1] 剪貼板 介紹
uses
Clipbrd;
- TClipboard 對象封裝了Windows剪貼板
- 剪貼板一次只能保存一份相同類型的數據,以便進行剪切,復制和粘貼。 如果我們以相同的格式將新信息發送到剪貼板,則會擦除之前的內容,但是即使將剪貼板中的內容粘貼到另一個程序中,剪貼板中的內容也會保留在剪貼板中
- Delphi內已經具有對Clipboard方法的內置支持的組件,例如:TEdit、TMemo、TOLEContainer、TDDEServerItem、TDBEdit、TDBImage、TDBMemo等
- 我們經常使用Clipbrd單元中的CutToClipboard、CopyToClipboard 、PasteFromClipboard、Clear和HasFormat方法來處理剪貼板操作和文本/圖形操作
1、剪貼板格式
1.1 Windows提供的默認
- CF_TEXT = 1; //文本格式。每行以回車/換行(CR-LF)組合結束。空字符表示數據結束。將此格式用於ANSI文本。
- CF_BITMAP = 2; //位圖的句柄(HBITMAP)。
- CF_METAFILEPICT = 3; //由METAFILEPICT結構定義的圖元文件圖片格式的句柄。當通過DDE傳遞CF_METAFILEPICT句柄時,負責刪除hMem的應用程序還應釋放CF_METAFILEPICT句柄引用的元文件
- CF_SYLK = 4; //Microsoft符號鏈接(SYLK)格式。
- CF_DIF = 5; //軟件藝術的數據交換格式。
- CF_TIFF = 6; //標記圖像文件格式。
- CF_OEMTEXT = 7; //包含OEM字符集中字符的文本格式。每行以回車/換行(CR-LF)組合結束。空字符表示數據結束。
- CF_DIB = 8; //一個內存對象,包含一個BITMAPINFO結構,后跟位圖位。
- CF_PALETTE = 9; //控制調色板。每當應用程序在剪貼板中放置依賴於或采用調色板的數據時,它也應該將調色板放置在剪貼板上。如果剪貼板包含CF_PALETTE(邏輯調色板)格式的數據,應用程序應使用SelectPalette和RealizePalette函數實現(比較)剪貼板中的任何其他數據與該邏輯調色板。顯示剪貼板數據時,剪貼板始終使用剪貼板上任何CF_PALETTE格式的對象作為其當前調色板。
- CF_PENDATA = 10; //用於筆計算的Microsoft Windows的筆擴展數據。
- CF_RIFF = 11; //表示比CF_WAVE標准波形格式更復雜的音頻數據。
- CF_WAVE = 12; //表示標准波形格式之一的音頻數據,如11 kHz或22 kHz PCM。
- CF_UNICODETEXT = 13; //Unicode文本格式。每行以回車/換行(CR-LF)組合結束。空字符表示數據結束。
- CF_ENHMETAFILE = 14; //增強元文件(HENHMETAFILE)的句柄。
- CF_HDROP = 15; //標識文件列表的HDROP類型句柄。應用程序可以通過將句柄傳遞給DragQueryFile函數來檢索有關文件的信息。
- CF_LOCALE = $10; //數據是與剪貼板中的文本關聯的區域設置標識符(LCID)的句柄(HGLOBAL)。關閉剪貼板時,如果其中包含CF_TEXT數據但沒有CF_LOCALE設置數據,系統會自動將CF_區域設置格式設置為當前輸入語言。您可以使用CF_LOCALE設置格式將不同的區域設置與剪貼板文本相關聯。從剪貼板粘貼文本的應用程序可以檢索此格式,以確定用於生成文本的字符集。請注意,剪貼板不支持多個字符集中純文本。要實現這一點,請改用RTF等格式化文本數據類型。系統使用與CF_LOCALE關聯的代碼頁隱式地將CF_TEXT轉換為CF_Unicode文本。因此,正確的代碼頁表用於轉換。
- CF_MAX = 17; //{注意:如果WINVER<5,CF_MAX會更改值。為了保持向后兼容性,請對WINVER<5使用CF_MAX,對WINVER>5使用CF_MAX_XP。}
- CF_DIBV5 = 17; //一個內存對象,包含BitMapV5頭結構,后跟位圖顏色空間信息和位圖位。
- CF_MAX_XP = 18; //{注意:如果WINVER<5,CF_MAX會更改值。為了保持向后兼容性,請對WINVER<5使用CF_MAX,對WINVER>5使用CF_MAX_XP。}
- CF_OWNERDISPLAY = 128; //所有者顯示格式。剪貼板所有者必須顯示和更新“剪貼板查看器”窗口,並接收WM_ASKCBFORMATNAME、WM_HSCROLLCLIPBOARD、WM_PAINTCLIPBOARD、WM_SIZECLIPBOARD和WM_VSCROLLCLIPBOARD消息。hMem參數必須為NULL。
- CF_DSPTEXT = 129; //與專用格式關聯的文本顯示格式。hMem參數必須是可以以文本格式顯示的數據的句柄,而不是私有格式的數據。
- CF_DSPBITMAP = 130; //與專用格式關聯的位圖顯示格式。hMem參數必須是可以以位圖格式顯示的數據的句柄,而不是私有格式的數據。
- CF_DSPMETAFILEPICT = 131; //與私有格式關聯的圖元文件圖片顯示格式。hMem參數必須是可以以圖元文件圖片格式顯示的數據的句柄,以代替私有格式的數據。
- CF_DSPENHMETAFILE = 142; //與私有格式關聯的增強元文件顯示格式。hMem參數必須是一個數據句柄,可以以增強的圖元文件格式顯示,而不是以私有格式顯示數據。
- CF_PRIVATEFIRST = $200; //專用剪貼板格式的整數值范圍的開始。該系列以CF_PRIVATELAST結尾。與專用剪貼板格式關聯的句柄不會自動釋放;剪貼板所有者必須釋放此類句柄,通常是為了響應WM_DESTROYCLIPBOARD消息。
- { "Private" 格式無法獲得GlobalFree()'d }
- CF_PRIVATELAST = 767; //看 CF_PRIVATEFIRST.
- CF_GDIOBJFIRST = 768; //應用程序定義的GDI對象剪貼板格式的整數值范圍的開始。范圍的末尾是CF_gdiobjast。清空剪貼板時,與此范圍內的剪貼板格式關聯的句柄不會使用GlobalFree函數自動刪除。此外,當使用此范圍內的值時,hMem參數不是GDI對象的句柄,而是由GlobalAlloc函數使用GMEM\u MOVEABLE標志分配的句柄。
- CF_GDIOBJLAST = 1023; //看 CF_GDIOBJFIRST
- { "GDIOBJ" formats do get DeleteObject()'d }
1.2 Delphi內默認提供的格式
- CF_COMPONENT //組件
2、Clipbrd常用方法描述:
- Assign //將給定對象分配到剪貼板。如果對象是一個TPicture或TGraphic,它將以相應的格式放置在剪貼板上(例如,TBitmap將作為CF_BITMAP放置在剪貼板上)。Picture.Assign(Clipboard) 和 Bitmap.Assign(Clipboard) 也支持分配檢索剪貼板的內容。
- Clear //清除剪貼板中的內容。當剪貼板對象將數據添加到剪貼板時,會自動執行此操作。
- Close //-如果剪貼板處於打開狀態,則將其關閉。打開和關閉保存剪貼板被打開的次數。在關閉剪貼板的次數與打開剪貼板的次數相同之前,它實際上不會關閉剪貼板。
- Open //打開剪貼板並防止所有其他應用程序更改剪貼板。如果只將一個項目添加到剪貼板,則無需進行此調用。如果需要向剪貼板添加多個格式,請調用Open。在添加所有格式之后。打給close。
- HasFormat //如果剪貼板上有給定格式,則返回true。
- GetAsHandle //以指定格式處理的原始窗口從剪貼板返回數據。句柄不屬於應用程序,應該復制數據。
- SetAsHandle //將句柄以給定格式放置在剪貼板上。一旦一個句柄被賦予剪貼板,它就不應該被刪除。它將被剪貼板刪除。
- GetTextBuf //檢索、取回數據
- AsText //允許從剪貼板放置和檢索文本。如果CF_文本格式可用,則此屬性對檢索有效。
- FormatCount //格式數組中的格式數。
- Formats //剪貼簿上所有可用格式的列表
創建時間:2022.04.14 更新時間:2022.04.14