БлогNot. Visual C++: работа с системным Буфером Обмена

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 [11786 просмотров]


теги: программирование учебное c++/cli

К этой статье пока нет комментариев, Ваш будет первым