Visual C++: работа с системным Буфером Обмена
Как и в предыдущей заметке, имеем форму Form1
и однострочное (со свойством Multiline==false
) текстовое поле textBox1
. Требуется скопировать текст поля в Буфер Обмена системы или вставить имеющийся в Буфере текст.
Элементарного вызова методов Copy()
и Paste()
, в общем-то, недостаточно. Хотелось бы не копировать пустое поле, иногда нужно копировать только выделенные символы, а иногда все, что введены. При вставке же следует проверять, есть ли текст в Буфере Обмена, и нет ли в поле выделенных символов, поверх которых мы, возможно, захотим вставить содержимое Буфера (а, возможно, и не захотим - об этом спрашивает окно диалога).
С учётом сказанного, получаются следующие типовые фрагменты:
//Копировать выделенную часть поля textBox1 в Буфер Обмена if (textBox1->SelectionLength>0) { textBox1->Copy(); }
//Копировать всё содержимое поля textBox1 в Буфер Обмена textBox1->SelectAll(); textBox1->Copy(); textBox1->DeselectAll();
//Вставить (с проверкой того, что в Буфере Обмена - текст и учётом того, есть ли выделение в textBox1) if (Clipboard::GetDataObject()->GetDataPresent( DataFormats::Text ) == true) { if ( textBox1->SelectionLength > 0 ) { if ( MessageBox::Show( "Вставить поверх выделения?", "Моя программа", MessageBoxButtons::YesNo ) == System::Windows::Forms::DialogResult::No) { textBox1->SelectionStart = textBox1->Text->Length; } } textBox1->Paste(); }
Их можно "повесить" на пункты меню или кнопки панели инструментов Вашего приложения.
P.S. Действие "Вырезать" делается как "Копировать", только вместо Copy()
вызывайте Cut()
.
10.02.2015, 13:43 [11926 просмотров]