Кент Рейсдорф. BORLAND C++BUILDER. Раздел 3

Кент Рейсдорф. BORLAND C++BUILDER. Страница 378

К спасительному Onldle

Когда ваше приложение заканчивает обработку всех накопившихся со­общений, Windows посылает ему сообщение WM_ENTERIDLE. Фактически, тем самым Windows говорит вашей программе, что «у меня нет сейчас для вас никакой работы, так что расслабьтесь и отдохните некоторое время». Когда приложение C++Builder получает сообщение WM_ENTERIDLE, оно инициирует событие Onldle объекта Application. Вы можете написать обра­ботчик события Onldle, который можно связать с событием Onldle объекта Application. Этот обработчик будет вызываться каждый раз, когда происходит событие Onldle. На практике это делается точно так же, как и раньше, когда вы связывали обработчик с событием OnHint объекта Application. Создайте функцию в классе вашей главной формы, и присвойте ее адрес событию Onldle объекта Application.

Какая нам от всего этого польза? Пользой является то, что у нас теперь есть функция, которая будет автоматически вызываться с некоторой перио­дичностью. Мы можем использовать эту функцию для проверки того, выделен ли какой-нибудь текст в компоненте memo. Итак, теперь мы можем разрешать или запрещать доступ к пунктам меню Cut и Сору по мере необходимости. Замечательно. С этим мы разобрались.

Но ведь проблема с пунктом меню Paste остается, не так ли? Однако здесь тоже есть приемлемое решение. В VCL существует класс с именем TClipboard, который инкапсулирует операции с буфером обмена. Одним из методов TClipboard является HasFormat(). Этот метод проверяет, находятся ли в настоящий момент в буфере обмена данные определенного формата. Если это так, то функция HasFormatQ возвращает true. Используя этот метод, мы можем определить, содержится ли текст в буфере обмена:

if (Clipboard()->HasFormat(CFJTEXT)) PasteBtn->Enabled = true;

Web-дизайн (с) 2010 All rights reserved