Clipboard, also called as the paste buffer, is is a buffer which operating systems provide to copy things (texts, bitmaps, tables etc.) for short term and transfer within and between application programs. The clipboard is usually temporary and unnamed, and its contents reside in the computer’s memory.
In C++ Builder, you can use clipboard copy and paste event easily in VCL applications. There is a good example in here http://docwiki.embarcadero.com/CodeExamples/Sydney/en/FMX.CopyPaste_Sample
Let’s summarize some simple VCL and FMX copy and paste operations on texts and on bitmaps.
Using Clipboard in C++ Builder VCL Applications
In C++ Builder VCL applications you must include clipbrd.hpp
1 2 3 4 |
#include <vcl.h> #include <clipbrd.hpp> |
You can copy or paste Text by using clipboard() class as below,
1 2 3 4 5 6 7 8 9 |
TStringList *strlist= new TStringList(); // Copy StringList Text to Clipboard Clipboard()->AsText = strlist->Text; // Paste Text from Clipboard to StringList strlist->Text = Clipboard()->AsText; |
You can copy or paste Bitmaps by using clipboard() class as below,
1 2 3 4 5 6 7 8 9 |
TBitmap *bmp = new TBitmap(); // Copy Bitmap to Clipboard Clipboard()->Assign(bmp); // Paste Bitmap from Clipboard bmp->Assign(Clipboard()); |
You can do more advanced things by using Clipboard(), There are many components using clipboard properties.
Using Clipboard in C++ Builder FireMonkey Applications
In C++ Builder FMX applications clipboard is available from IFMXClipboardService. There is FMX.clipboard.hpp header you can use.
1 2 3 4 |
#include <fmx.h> #include <FMX.clipboard.hpp> |
In FireMonkey applications you need to use PlatformServices (TPlatformServices) to copy or paste things.
Copying Text to Clipboard
1 2 3 4 5 6 7 8 9 |
_di_IFMXClipboardService service; if(TPlatformServices::Current->SupportsPlatformService(__uuidof(IFMXClipboardService)) && (service = TPlatformServices::Current->GetPlatformService(__uuidof(IFMXClipboardService)))) { UnicodeString ustr = L"ABCDEFG"; service->SetClipboard(TValue::_op_Implicit(ustr)); } |
Copying Image to Clipboard
1 2 3 4 5 6 7 8 9 |
_di_IFMXClipboardService service; if(TPlatformServices::Current->SupportsPlatformService(__uuidof(IFMXClipboardService)) && (service = TPlatformServices::Current->GetPlatformService(__uuidof(IFMXClipboardService)))) { std::unique_ptr<TBitmap> Image(TextBorder->MakeScreenshot()); service->SetClipboard(TValue::_op_Implicit(Image.get())); } |
Paste Text from Clipboard
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
_di_IFMXClipboardService service; if(TPlatformServices::Current->SupportsPlatformService(__uuidof(IFMXClipboardService)) && (service = TPlatformServices::Current->GetPlatformService(__uuidof(IFMXClipboardService)))) { TValue value = service->GetClipboard(); if(!value.IsEmpty) { if(value.IsType<String>()) { UnicodeString ustr = value.ToString(); } } } |
Copying Image to Clipboard
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
_di_IFMXClipboardService service; if(TPlatformServices::Current->SupportsPlatformService(__uuidof(IFMXClipboardService)) && (service = TPlatformServices::Current->GetPlatformService(__uuidof(IFMXClipboardService)))) { TValue value = service->GetClipboard(); if(!value.IsEmpty) { if (value.IsType<TBitmapSurface*>()) { std::unique_ptr<TBitmap> bitmap(new TBitmap()); bitmap->Assign(value.AsType<TBitmapSurface*>()); value.AsType<TBitmapSurface*>()->Free(); } } } |