Важнейшие классы. TClipBoard.

Пользователи широко известного текстового процессора MicrosoftWordчасто используют буфер обмена в качестве посредника при выполнении операций пересылки данных. При разработке Delphi-приложений аналогичные операции нами уже применялись при копировании кнопок и других объектов. Среда Delphi позволяет создавать приложения, в которых можно программировать использование буфера обмена. Основными операциями, которые выполняются при использовании буфера обмена, являются операции Copy(копировать), Paste(вставить), Cut(вырезать).

Для применения этих операций используйте важнейший класс TClipboard, объявленный в модуле clipbrd (обратите внимание на сокращение). Этот класс не имеет визуального компонента, поэтому имя модуля необходимо добавить в список uses

Если в приложении необходимо использовать один буфер обмена, то под него нет нужды создавать специальный объект, поскольку Delphi имеет встроенную переменную Clipboard типа TClipboard, которая создается автоматически. Если необходимо использовать несколько буферов обмена, то следует объявить соответствующие переменные этого типа, создать их с помощью метода Create, а по окончании работы освободить их методомFree.

Важнейшие классы TIniFile

Для хранения некоторых данных, например параметров программы, для последующего их использования можно применять реестр или ini файлы. Имеется в виду хранение установок программы во время бездействия программы, чтобы при последующем запуске, она восстанавливала свое состояние. В ini файлах можно также хранить и скрытые от пользователя данные, такие как серийный номер программы, срок истечения лицензии, закодированные пароли на запуск и пр. Такие данные естественно не защищены от постороннего вмешательства, но при умелом использовании кодирующих средств, можно исключить ручное редактирование этих параметров.

TIniFile является низкоуровневым 16-битным классом, совместимым с операционной системой windows 3.x файловой системы хранения параметров в INI файлах. Для хранения параметров в современных программах рекомендуется использовать реестр. Но, как правило, не так просто такую программу скопировать на другой компьютер с переносом всех настроек, а совместное копирование ini файла избавит вас от такой проблемы.
Класс TIniFile находится в модуле IniFiles, который надо указывать в разделе подключаемых модулей Uses.

Объявление переменной, в которую будем заносить (или читать) данные:

VarIniFile :TIniFile;

где: IniFile - любой идентификатор, который будет использоваться в программе. Можно, например, для сокращения просто i.
Дальше переменную необходимо создать:

IniFile := TIniFile.Create('Название_файла');

где: Название_файла - файл, в котором будут храниться данные. Если вы напишите, например project.ini без указания пути к файлу, то такой файл создастся или будет читаться из каталога WINDOWS. Для размещения ini файла в каталоге программы, или относительно его (например КАТАЛОГ_ПРОГРАММЫ\INI) указывайте вместе с названием файла текущий каталог программы.
В конце использования переменной ее необходимо уничтожить и освободить занимаемую память. Это делается одной командой:

IniFile.Free;

21)Обработка событий

Рассмотрим действия операционной системы Windows при нажатии левой кнопки мыши на кнопку в окне.

  1. Нажали на левую кнопку мыши. В регистр фиксации событий(РФС) поступил сигнал, соответствующий левой кнопке мыши разряд был установлен в <1>.
  2. Windowsосуществляет периодический опрос РФС. Обнаружив <1>, он узнает, что произошло событие от нажатия левой кнопки мыши. Сигнал принят, а соответствующий разряд РФС записывается в <0>.
  3. Windowsопределил, что во время нажатия левой кнопки мыши курсор находился в окне приложения. Если у приложения нет окна, то рассматриваемый процесс невозможен. В очередь вычисляемого приложения отправляется сообщение wm_LButtonDownсоответствующий нажатию лево кнопки мыши.
  4. У приложения есть свой метод Run.

Procedure TApplication.Run Procedure TApplication.Run

Begin begin

Repeat if not Process Method then Idle

Handle Message end;

Until Terminated;

Во время очередного исполнения цикла опроса очереди метод ProcessMethod обнаружил, что в очереди есть сообщение, wm_LButtonDown.

  1. ProcessMethod определяет, что курсор находился над кнопкой и посылает соответствующее сообщениекнопке

cn_xxx (component Notify)

  1. Кнопка посылает себе сообщение с целью узнать, может ли кнопка обработатьсообщение (может, она заблокирована или затенена). Если может выполнить то исполнение шага 7,иначе 13.
  2. Кнопка посылает сообщение вида

cm_xxx (componentmessage)

хозяину, владельцу узнать нет ли препятствий для обработки сообщения.

  1. Аналогичен шагу 6.
  2. Аналогичен шагу 7.
  3. Аналогичен шагу 6.

11,12,13. Ответы на запрос о возможности обработки сообщения.

14. ProcessMethod получив отрицательный ответ вызывает метод обработки сообщений DefaultHandler из класса TObject. Если получен положительный ответ, то отправляется сообщение <14> кнопке :”можно обработать сообщение”.

15. Кнопка пытается обработать сообщение, мог ут быть отправлены сообщения другим компонентам, все зависит от того, как реализован метод OnClickButton.

В конце приложению поступает ответ, что сообщение обработано. Последний шаг состоит в извлечении сообщений из очереди.

Наши рекомендации