Шаг 70.
Visual Prolog.
Специальные элементы управления

    На этом шаге мы рассмотрим специальные элементы управления.

    Помимо переносимых встроенных элементов управления, на большинстве платформ можно создавать и использовать непереносимые специальные элементы управления.

    Специальные элементы управления обычно распространяются как библиотеки динамической компоновки (DLL, Dynamic Link Libraries). В этом случае вы должны иметь файл с расширением lib для специального элемента управления, скомпилировать его в свой исполняемый модуль (файл с расширением ехе) и знать функцию для инициализации DLL.

    Если вы создаете окно специального элемента управления программно, вам нужно использовать предикат win_CreateDynControl:

   CustomCtl=win_CreateDynControl(
      [customctl(wdef(wc_Custom,RCT,Title,u_Pixels), 
      ControlClass,101,Flags)],Window,0),

    Имя класса ControlClass - это строка, которая определяет класс специального окна для элемента управления.

    Если вы хотите разместить специальный элемент управления в диалоговом окне, используя редактор окон и диалоговых окон VDE, выберите команду Controls | Custom. В свойствах элемента управления нужно написать имя необходимого класса.

    Для специальных элементов управления список Flags должен быть отформатирован в соответствии со специальным соглашением. По соглашению список значений стилей Flags обрабатывается как список констант стилей VPI до тех пор, пока не встретится нулевой элемент списка, после которого все последующие значения стилей объединяются вместе побитовым ИЛИ. Например, предыдущая переменная Flags, если используется один или более популярных управляющих элементов "сетки" , которые должны быть созданы невидимыми, могла быть определена следующим образом:

   FlAGS=[wsf_Tabstop,wsf_Invisible,  % Флаги vpi
      0,  % Переключающий 0
      HGRID_ColumnSelect,  % Определены в заголовочных файлах
      HGRID_AllowInsert],  % Передаются с элементами управления

    Можно создавать динамические диалоговые окна с использованием специальных элементов управления, как это сделано в следующем примере, который использует популярные расширения элементов управления компании Borland.

   Wlist=[dlg_font(wdef(wd_Modal,rct(10,10,210,210),"Dialog",
      u_Pixels),"Helv",8,[wsf_Close,wsf_TitleBar,wsf_Minimize,
      wsf_Maximize]), 
   customctl(wdef(wc_Custom,rct(5,5,65,30),"OK",u_Pixels),
      "BorBtn",1,[wsf_Default,wsf_TabStop]), 
   customctl(wdef(wc_Custom,rct(5,35,65,50),"Checkbox",
      u_Pixels),"BorCheck",102,[wsf_TabStop]), 
   customctl(wdef(wc_Custom,rct(5,55,65,70),"Radio",u_Pixels),
      "BorRadio",103,[wsf_TabStop]), 
   customctl(wdef(wc_Custom,rct(5,32,65,34),"",u_Pixels),
      "BorShade",104,[wsf_TabStop]), 
   ctl(wdef(wc_PushButton,rct(5,80,65,95),"NotCustom",
      u_Pixels),105,[wsf_TabStop]), 
   customctl(wdef(wc_Custom,rct(-4,-4,204,204),"",u_Pixels),
      "BorShade",110,[wsf_TabStop])],
   win_CreateDynDialog(Wlist,dialog_event_handler,b_False).

    Обратите внимание, что специальные элементы управления не полностью используются в структуре VPI. Таким образом, если они посылают нестандартные сообщения обработчику событий диалогового окна, то эти события придут как e_Native, которые должны быть декодированы согласно специфическим константам или другой информации, предоставляемой поставщиком для использования вместе с этими программными продуктами.

    Вообще, вы должны убедиться, что классы специальных элементов управления должным образом инициализированы перед их использованием в диалоговом окне. Обработчики событий для этих элементов управления обычно реализованы в файлах с расширением dll. Часто бывает необходимо вызвать одну или больше функций инициализации в DLL-файлах, чтобы проинициализировать классы элементов управления. Некоторые DLL выполняют это в скрытой форме, которая зависит от порядка связывания импортных библиотек LIB для DLL. Если вы используете библиотеку элементов управления третьей стороны и сталкиваетесь с ошибкой при попытке использовать диалоговое окно, вам следует просмотреть документацию на этот элемент управления, чтобы убедиться, что вы правильно вызываете функцию инициализации; проверить ваши сценарии построения и компоновки (Build scripts), чтобы гарантировать, что импортные библиотеки для DLL (обычно это файлы с таким же именем и расширением lib) существуют и, возможно, они должны быть скомпонованы ранее остальных библиотек.

    Кроме того, специальные элементы управления могут быть созданы в Visual Prolog вызовом предиката class_Create.

    На следующем шаге мы рассмотрим диалоговые окна.




Предыдущий шаг Содержание Следующий шаг