На этом шаге мы рассмотрим сгенерированный код.
Теперь посмотрим на сгенерированный код и разберемся, как он работает.
dlg_person_Create (Parent):- NAME= "", AGE=void, MARRIED=b_false, SKILLS=[1,3,5], SEX=idc_male, %MARK Person, new variables dialog_CreateModal(Parent,[resdlg(dlg_person_ResID,wd_Modal)], [ %BEGIN Person, ControlList, 16:10:55-23.11.2006, Auto updated! df(idc_name,editstr(NAME,[]),nopr), df(idc_age,editint(AGE,[range(0,70)]),nopr), df(idc_married,checkbox(MARRIED),nopr), df(idc_skills,listbox(["prolog","c","с++","pascal", "database","word","excel","basic"],SKILLS),nopr), df(SEX,radiobuttongroup([idc_male,idc_female]),nopr) %END Person, ControlList ], dlg_person_eh, 0, VALLIST, ANSWER), dlg_person_handle_answer(ANSWER,VALLIST). dlg_person_handle_answer(idc_ok,VALLIST):-!, dlg_person_update(VALLIST). dlg_person_handle_answer(idc_cancel,_):- !. %Handle Esc and Cancel here dlg_person_handle_answer (_,_) :- errorexit(). dlg_person_update(_VALLIST):- %BEGIN Person,Update controls,09:07:56-20.6.2006,Auto updated! _NAME = dialog_VLGetstr(idc_name,_VALLIST), _AGE = dialog_VLGetint(idc_age,_VALLIST), _MARRIED = dialog_VLGetCheck(idc_married,_VALLIST), dialog_VLGetListBox(idc_skills,_VALLIST, _IDC_LISTBOX_ITEMLIST,_SKILLS) , _SEX = dialog_VLGetRadiobutton(idc_male,_VALLIST), %END Person, Update controls true. %MARK Person, new events dlg_person_eh (_, _, _) : -!, fail. %END_DLG Person
Вам следует знать, что:
Итак, мы изменим сгенерированный предикат dlg_person_Create, чтобы он принимая специфические входные параметры для диалогового окна и возвращал специфические параметры вывода.
Теперь изменим наш источник для того, чтобы поставлять входные значения диалоговому окну, получать измененные выходные значения и хранить новые значения. С этой целью объявим факт employee, который может хранить информацию о человеке. В этом случае мы не изменяем глобальный предикат dlg_person_Create, а создаем локальный предикат my_person_create, который обладает необходимой функциональностью с входными и выходными значениями для диалогового окна.
И последнее: изменим предикат dlg_person_update так, чтобы возвращались измененные значения:
domains person=person(string Name,dialog_int Age,boolean Married, ilist Skills,dialog_control_id Sex) facts-employes employee(person) clauses % Initial value employee(person("",void,b_false,[],idc_male)). predicates dlg_person_eh:EHANDLER dlg_person_update(dialog_val_list,ctlid,person) my_person_Create(window Parent,person In,person Out) clauses dlg_person_Create(Parent):-retract(employe(Person)), !, my_person_Create(Parent,Person,NewPerson), assert(employe(NewPerson)). my_person_Create(Parent,person (Name,Age,Married,Skills,Sex), NewPerson):- %MARK Person, new variables dialog_Create(Parent,[resdlg(dlg_person_ResID,wd_Modal)], [ %BEGIN Person, ControlList, 09:07:56-20.6.2006, Auto updated! df(idc_name,editstr(NAME,[]),nopr), df(idc_age,editint(AGE,[range (0,70)]),nopr), df(idc_married,checkbox(MARRIED),nopr), df(idc_skills,listbox(["prolog","с","с++","pascal", "database","word","excel","basic"],SKILLS),nopr), df(SEX,radiobuttongroup([idcjnale,idc_female]),nopr) %END Person, ControlList ], dlg_person_eh,0,_VALLIST,_ANSWER), dlg_person_update(_VALLIST,_ANSWER,NewPerson). dlg_person_update(_VALLIST,idc_ok, person(_Name,_Age,_Married,_Skills,_Sex)):-!, %BEGIN Person, Update controls, 09:07:56-20.6.2006, Auto updated! _NAME=dialog_VLGetstr(idc_name,_VALLIST), _AGE=dialog_VLGetint(idc_age,_VALLIST), _MARRIED=dialog_VLGetCheck(idc_married,_VALLIST), dialog_VLGetListBox(idc_skills,_VALLIST,_ITEMLIST,_SKILLS), _SEX=dialog_VLGetRadiobutton(idc_male,_VALLIST), %END Person, Update controls true. %MARK Person, new events
Несмотря на то, что мы изменяли параметры и структуру сгенерированного кода, сохраняя комментарии %BEGIN/%END вокруг автоматически модифицированного кода, мы можем продолжать модифицировать этот код, используя эксперт диалогового пакета.
Текст этого проекта вместе с EXE-файлом можно взять здесь (750,8 Кб).
Со следующего шага мы начнем рассматривать средства создания графического интерфейса.