Задавая вопрос в рассылку по C / C++, для быстрого получения ответа соблюдайте ряд несложных для исполнения требований: 1. Несмотря на то, что C и C++ являются кроссплатформенными языками программирования, в ряде случаев (например, при необходимости создать приложение с графическим интерфейсом пользователя либо с использованием системных API) эксперту может понадобиться знание целевой операционной системы. Поэтому в тех случаях, когда для Вас это имеет значение, указывайте её в тексте вопроса. В случае если Вы этого не сделали и не ответили на уточняющие вопросы в мини-форуме, по умолчанию администратор рассылки будет считать, что Вы работаете с Windows XP.
2. Если для Вас требуется создать приложение с использованием какого-то определённого набора инструментов, то указывайте его в вопросе (компилятор, интегрированная среда разработки, библиотека классов для построения графического интерфейса пользователя и т.п.). При этом не используйте русскую транслитерацию названия среды разработки / компилятора / библиотеки. Указывайте название программного продукта, с которым работаете, полностью с приведением номера его версии. Microsoft Visual C++ 6 и Microsoft Visual C++ 2008 Express Edition, Borland C++ 5.02 и Borland C++ Builder 6.0, Turbo C++ 3.1 и Turbo C++ 2006 Explorer - совсем не одно и то же. В случае если Вы этого не сделали и не ответили на уточняющие вопросы в мини-форуме, по умолчанию администратор рассылки будет считать, что Вы работаете со средой Microcoft Visual Studio 2005
3. Повторю, что в случае, если имеется необходимость создать графическое (оконное) приложение, указывайте, с помощью каких инструментов оно должно быть создано: GTK, Qt, API Вашей операционной системы, MFC, VCL, Windows Forms и т.д. и т.п. В случае если Вы этого не сделали и не ответили на уточняющие вопросы в мини-форуме, по умолчанию администратор рассылки будет считать, что для создания графического интерфейса пользователя Вы используете MFC.
4. Не пытайтесь связываться с экспертами и администратором по внутреннему пейджеру портала: этим Вы лишь замедляете решение Вашей задачи, т.к. все уточнения, связанные с Вашей задачей, тем самым доступны лишь Вашему корреспонденту, но не другим экспертам. Для переписки по любым проблемам, связанным с Вашим вопросом, используйте его мини-форум.
5. Не пытайтесь задавать всё новые и новые вопросы (имеются в виду просьбы решить новые задачи, не имеющие отношения к прежней) в мини-форуме вопроса, на который уже было дано решение. Также не задавайте несколько не связанных между собой вопросов в одной форме: администратор рассылки оставляет за собой право удалять лишние вопросы на своё усмотрение.
6. Администратор рассылки оставляет за собой право удалять вопросы, связанные с программированием на C / C++ лишь косвенно, если на них не поступило ответов в течение 5 дней.
Удачи!
Консультация онлайн # 161152
Раздел: С / С++
Автор вопроса: Сергей Черняков Дата: 22.02.2009, 23:15 Консультация неактивна
Поступило ответов: 2
Здравствуйте!Подскажите,пожалуйста,как сделать в с++ Builder,чтобы программа следила за буфером обмена и,если там окажеться что либо начинающееся с цифр,то помещала содержимое буфера в поле Edit.Заранее огромное спасибо!!
Здравствуйте, Сергей Черняков! Чтобы следить за буфером обмена надо добавить свое окно в цепочку viewer-ов буфера обмена при помощи функции HWND SetClipboardViewer( HWND hWndNewViewer); В приложении выдержка из MSDN с описанием того, что должен делать viewer буфера обмена. Дальше, чтобы реализовать требуемое, отрабатывая сообщение WM_DRAWCLIPBOARD, работаем с буфером обмена: анализируем тип содержимого, анализируем содержимое и т.д. Не забываем давать сообщение следующему viewer-у в цепочке и удалять себя из цепочки в конце работы.
Здравствуйте, Сергей Черняков! Для работы с буфером обмена в среде разработки Borland C++ Builder предусмотрен класс TClipboard. При инициализации приложения, разработанного в данной среде, создаётся один объект данного класса. Для получения доступа к нему имеется функция Clipboard(), которая возвращает указатель на объект TClipboard*. Подключается функция директивой #include <Clipbrd.hpp> Как известно, буфер обмена может содержать объекты разных форматов (текст, изображение и т.п.). Для проверки, содержится ли в буфере обмена объект заданного формата, предусмотрена функция HasFormat. Чтобы проверить, содержится ли в буфере обмена текст, нужно сделать следующий вызов:
Код
Clipboard()->HasFormat(CF_TEXT);
Для работы с текстом буфера обмена существует ряд функций, но наиболее удобно работать с ним с помощью свойства объекта класса TClipboard AsText. Это свойство соответствует содержимому буфера обмена в текстовом формате CF_TEXT (приведённому к типу AnsiString). При отсутствии в буфере данных этого формата возвращается пустая строка. Рассмотрим применение объекта TClipboard относительно Вашей задачи (все названия объектов сохранены в том виде, в котором они по умолчанию генерируются средой разработки). Добавим на заготовку формы объекты классов TTimer и TEdit. Предположим, что нам нужно, чтобы содержимое буфера обмена проверялось каждую минуту. Для этого присвоим свойсву Interval таймера Timer1 значение 60000. В обработчике события срабатывания таймера (TForm1::Timer1Timer(TObject *Sender) - см. приложение) запишем код извлечения текста из буфера обмена:
Код
AnsiString sClipboardContent; // Строка для хранения текста из буфера
if(Clipboard()->HasFormat(CF_TEXT)) // Если в буфере текст...
{
sClipboardContent = Clipboard()->AsText; // ...копируем его в строку.
}
После этого извлекаем из строки первый символ и, если он оказывается цифрой, то копируем содержимое буфера в поле ввода Edit1. Удачи!
Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему. Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.