На этом шаге мы рассмотрим сгенерированный код.
Теперь посмотрим на сгенерированный код и разберемся, как он работает.
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 Кб).
Со следующего шага мы начнем рассматривать средства создания графического интерфейса.