Шаг 9.
Visual Prolog.
Генерация кода для окна по умолчанию

    На этом шаге мы рассмотрим генерацию кода для окна по умолчанию.

    Далее, для окна Cross нужно сгенерировать его стандартный исходный код Visual Prolog, генерируемый по умолчанию. Этот исходный код даст нам следующее:

    Простой способ создавать и управлять исходным кодом Visual Prolog для окна состоит в том, чтобы использовать эксперт окон и диалоговых окон (рис. 1). Чтобы активизировать его, вы можете нажать комбинацию клавиш <Crtl>+<W> или кнопку Code Expert, когда окно Cross выбрано в окне проекта.


Рис.1. Добавление кода по умолчанию в эксперте окон и диалоговых окон

    После того как эксперт окон и диалоговых окон активизирован, вам нужно выбрать исходный модуль Пролога, чтобы разместить там код для окна. Раскройте список и выберите исходный модуль Cross.pro. Затем нажмите кнопку Default Code. Когда заданный по умолчанию код будет сгенерирован, кнопка Edit Code (и некоторые другие) станет доступной.

    Нажатие кнопки Edit Code вызовет редактор (для файла Cross.pro), позиционированный на сгенерированном коде. Вы увидите, что в нижнюю часть выбранного модуля (Cross.pro) был добавлен следующий код:

   %BEGIN_WIN Cross
   /***********************************************
   Создание и управление событиями для окна: Cross
   ***********************************************/
   constants
   %BEGIN Cross,CreateParms,21.11.2006,Code automatically updated!
      win cross_WinType=w_TopLevel
      win_cross_Flags=[wsf_SizeBorder,wsf_TitleBar,wsf_Maximize,
                                       wsf_Minimize,wsf_Close,wsf_ClipSiblings]
      win_cross_RCT=rct(100,80,440,240)
      win_cross_Menu=no_menu
      win_cross_Title="Cross"
      win_cross_Help=idh_contents 
    %END Cross,CreateParms 
    predicates
       win_cross_eh: EHANDLER 
    clauses
       win_cross_Create(Parent):-
          win_Create(win_cross_WinType, win_cross_RCT,win _cross_Title,
                             win_cross_Menu, Parent,win_cross_Flags,win_cross_eh,0).
   %BEGIN Cross,e_Create
      win_cross_eh(_Win,e_Create(_),0):-!,
   %BEGIN Cross, InitControls, 21.11.2006, Code automatically updated! 
   %END Cross,InitControls
   %BEGIN Cross, ToolbarCreate, 21.11.2006, Code automatically updated! 
   %END Cross,ToolbarCreate
      !.
   %END Cross,e_Create 
   %MARK Cross,new events 
   %BEGIN Cross,e_Size
      win_cross_eh(_Win,e_Size(_Width,_Height),0):-!,
      ifdef use_tbar
         toolbar_Resize(_Win),
         enddef
         !.
   %END Cross,e_Size
   %BEGIN Cross, e_Menu, Parent window
      win_cross_eh(Win,e_Menu (Id,Cas),0):-!, 
         Parent=win_GetParent(Win), 
         win_SendEvent(Parent,e_Menu(Id,Cas)),
    %END Cross, e_Menu, Parent window 
    %END_WIN Cross

    Система Visual Prolog добавляет различные комментарии к исходному коду. Она использует их для того, чтобы позднее находить сгенерированный код.

    Если вы видите блок, окруженный такими комментариями:

   "Code automatically updated!"

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

    Если вы не хотите иметь части кода, обновляемые автоматически, обратитесь к эксперту окон и диалоговых окон и снимите флажок Automatic Source Update для этого окна. Теперь, когда мы закончили создавать окно, необходимо активизировать его. Добавим выполняемые функции в меню Test в нашем окне Task. Для начала мы добавим один дополнительный пункт меню и назовем его CrossWin. Используйте кнопки Menu и Edit в окне проекта, чтобы редактировать меню Task. Когда Menu Editor активизируется, выберите пункт Test и нажмите кнопку Submenu. Используйте кнопку New, чтобы добавить пункт меню для CrossWin (рис. 2).


Рис.2. Пункт меню для активизации окна CrossWin

    Выполняемые функции для нового пункта меню могут быть добавлены очень легко. Сначала активизируйте эксперта кода для окна Task выберите переключатель Window на левой стороне окна проекта, отметьте в списке значение Task Window и нажмите кнопку Code Expert. Когда появится эксперт окон и диалоговых окон, в списке Event Type выберите строку Menu, в списке Event or Item выберите идентификатор ресурса id_Test_crosswin и затем нажмите кнопку Add Clause (рис. 3).


Рис.3. Добавление предложения в эксперте окон и диалоговых окон

    Далее нажмите кнопку Edit Clause, чтобы выбрать редактор. Заметьте, что к обработчику события основного окна (Task) вашего приложения было добавлено следующее предложение:

   task_win_eh(_Win, e_Menu(id_Test_crosswm,_ShiftCtlAlt),0):-!,

    Здесь (в начале второй строки) нажмите правую кнопку мыши и выберите пункт меню Insert | Predicate Call | Window, Dialog or Toolbar (или нажмите комбинацию клавиш <Ctrl>+<Shift>+<W>). Эти действия активизируют диалоговое окно, изображенное на рис. 4.


Рис.4. Генерация вызова предиката для создания пользовательского окна

    Выберите переключатель User Defined Window. После того как вы нажмете кнопку ОК, будет вставлен вызов предиката для создания окна Cross.

   task_win_eh(_Win,e_Menu(id_Test_Crosswin,_ShiftCtlAlt),0):-!,
      win_cross_Create (_Win),
       !.

    Сейчас запустите приложение и проверьте, что вызов команды Test | CrossWin визирует небольшое окно с заголовком Cross.

    Созданное приложение можно взять здесь (372,4 Кб)

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




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