Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations gkittelson on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

How to place a dialog box in the same place 1

Status
Not open for further replies.

tomaszmakaski

Programmer
Jun 19, 2010
7
PL
Hi I have problem. I have written simple prolog app and it works ok, but I don't know how place a dialog box in the same place. App ask questions in dialog and still is moving how to force it to stays in the same place?

I use SWI Prolog Editor 4.06c. Thanks for any help or advice.


This is the code:

exe:- make_dialog(D, 'glowny_dialog'),
send(D, background, grey),
send(D, open).

dialog('glowny_dialog',

[ object := Glowny_dialog,

parts :=
[ Glowny_dialog :=
dialog('Zwierz?to-zgadywasz'),

Opis := label(name,'Pomy?l o dowolnym zwierz?ciu, ja zadam Ci kilka pyta? i odgadne jakie to zwierze :)', font(helvetica,bold,12)),
Wyjscie := button(wyjscie),
Rozpocznij := button(rozpocznij),
Wnioski := list_browser(@default, 80, 5)
],
modifications :=
[
Wnioski := [ name := 'Wniosek',show_label := @on],

Rozpocznij := [ reference := point(0, 15) ] ,

Wyjscie := [ reference := point(0, 15) ]

],

layout :=
[
% area(Opis,area(15,8,364,24)),
% area(Wnioski,area(15,40,500,22)),
% area(Rozpocznij,area(15,104,400,24)),
% area(Wyjscie,area(15,104,199,22))

below(Wnioski,Opis),
below(Wyjscie, Wnioski),
below(Rozpocznij,Wnioski),
right(Wyjscie, Rozpocznij)
],

behaviour :=
[
Rozpocznij := [ message := and(message(@prolog,
'rozpocznij',
Wnioski
)
)
],
Wyjscie := [ message := message(@prolog,
'wyjscie',
Glowny_dialog)
]
]
]).

wyjscie(A):-
send(A, destroy).

rozpocznij(Okno) :- wniosek(W),

string_concat('Zwierz? o którym pomy?la?e? to: ',W,
Wynik),
send_list(Okno, append, [Wynik]),
retractall(prawda(_)),
retractall(nieprawda(_)).

:- dynamic prawda/1, nieprawda/1.


wniosek('Pingwin'):- gatunek(ptakNielot),warunek(czarnoBialego).
wniosek('Rybka ?yj?ca w rzece ;) w ver. 0.1 Mog? powiedzie? Ci tylko tyle :)'):- gatunek(rybaRzeka).
wniosek('Tygrys'):-gatunek(duzyKot),warunek(futroPrazki).
wniosek('Kotek'):-gatunek(malyKot),warunek(mruczy).
wniosek('Szczur'):- gatunek(gryzon),warunek(ogonKotkiCienki),warunek(kanalach).
wniosek('Wiewiórka'):- gatunek(gryzon),warunek(malych),warunek(rudego),warunek(ogonDlugiPuszysty).
wniosek('Pies'):- gatunek(ssak),warunek(drapieznikiem),warunek(sredniej),warunek(szczekac).
wniosek('Swinia'):-gatunek(ssak),warunek(czteryLapy),warunek(chodowlane),warunek(rozowego),warunek(chrumkac).
wniosek('Krowa'):-gatunek(ssak),warunek(czteryLapy),warunek(chodowlane),warunek(laty),warunek(mleko).
wniosek('Ko?'):-gatunek(ssak),warunek(czteryLapy),warunek(chodowlane),warunek(jezdzic),warunek(woz).
wniosek('Kura'):-warunek(cieplokrwiste),warunek(piorami),warunek(ziemi),warunek(chodowlane),warunek(jaja).
wniosek('Kogut'):-warunek(cieplokrwiste),warunek(piorami),warunek(ziemi),warunek(chodowlane),warunek(pieje).




gatunek(ssak):- warunek(cieplokrwiste),warunek(sierscFutro),warunek(ziemi);warunek(plywac).
gatunek(latajacyPtak):- warunek(cieplokrwiste),warunek(piorami),warunek(drzewach),warunek(latac).
gatunek(ptakNielot):- warunek(cieplokrwiste),warunek(piorami),warunek(ziemi),warunek(plywac),warunek(sredniej).
gatunek(rybaOcean):- warunek(zimnokrwiste),warunek(loskami),warunek(morzu),warunek(plywac).
gatunek(rybaRzeka):- warunek(zimnokrwiste),warunek(loskami),warunek(rzece),warunek(plywac).
gatunek(miesozerca):- warunek(miesem).
gatunek(roslinozerca):-warunek(roslinami).
gatunek(kotowaty):- warunek(cieplokrwiste),warunek(szybkie),warunek(czteryLapy).
gatunek(malyKot):- gatunek(kotowaty),warunek(drapieznikiem),warunek(male).
gatunek(duzyKot):- gatunek(kotowaty),warunek(drapieznikiem),warunek(czlowieka),warunek(duze).
gatunek(gryzon):- gatunek(ssak),warunek(drapieznikiem),warunek(szkodnikiem).

wniosek('Nie mam zielonego poj?cia o jakim zwierz?ciu pomysla?e?'):- nl, !.

warunek(szybkie):-czy('Jest bardzo szybkie i zwinne').
warunek(czteryLapy):-czy('Posiada 4 ?apy').
warunek(czlowieka):-czy('Czy mo?e zje?? cz?owieka').
warunek(futroPrazki):-czy('Jego futro jest brozowe w czarne pr??ki').
warunek(mruczy):-czy('Przez wi?kszo?? dnia nic nie robi, wyleguje sie na s?o?cu, mruczy i oblizuje ?apy').
warunek(szczekac):-czy('Potrafi szczeka?').
warunek(chodowlane):-czy('Jest zwierz?ciem chodowlanym').
warunek(rozowego):-czy('Czy jest koloru ró?owego').
warunek(chrumkac):-czy('Potrafi chrumka?').
warunek(laty):-czy('Sier?? poktryta jest bia?o czarnymi ?atami').
warunek(mleko):-czy('Daje mleko').
warunek(jezdzic):-czy('Mo?na na nim je?dzi?').
warunek(woz):-czy('Ma si?? aby ci?gn?? wóz').
warunek(jaja):-czy('Znosi jaja').
warunek(pieje):-czy('Pieje o ?wicie').


warunek(cieplokrwiste):-czy('Czy jest to zwierze cieplokrwiste').
warunek(zimnokrwiste):-czy('Czy jest to zwierze zimnokrwiste').
warunek(czarnoBialego):-czy('Czy jest czarno-bia?ego koloru').
warunek(rudego):-czy('Czy jest rudego koloru').
warunek(rude):-czy('Czy jest rude').
warunek(siwe):-czy('Czy jest siwe').
warunek(kanalach):-czy('Czy ?yje w kana?ach').
warunek(dzungli):-czy('Czy ?yje w d?ungli').
warunek(drzewach):-czy('Czy ?yje na drzewach').
warunek(ziemi):-czy('Czy porusza si? po ziemi').
warunek(morzu):-czy('Czy ?yje w morzu').
warunek(rzece):-czy('Czy zyje w rzece').
warunek(miesem):-czy('Czy ?ywi si? mi?sem').
warunek(roslinami):-czy('Czy ?ywi si? ro?linami').
warunek(konczynach):-czy('Czy porusza si? na ko?czynach').
warunek(plywac):-czy('Potrafi p?ywa?').
warunek(latac):-czy('Potrafi lata?').
warunek(malych):-czy('Jest ma?ych rozmiarów').
warunek(sredniej):-czy('Jest ?redniej wielko?ci').
warunek(male):-czy('Jest male').
warunek(duze):-czy('Jest to du?e zwierze').
warunek(sierscFutro):-czy('Posiada sier?? lub futro').
warunek(piorami):-czy('Jest pokryte piórami').
warunek(loskami):-czy('Jest pokryte ?óskami').
warunek(drapieznikiem):-czy('Jest drapie?nikiem').
warunek(ogonDlugiPuszysty):-czy('Ogon jest d?ugi i puszysty').
warunek(ogonKotkiCienki):-czy('Ogon jest krótki i cienki').
warunek(ogonDlugiPuszysty):-czy('Ogon jest d?ugi i puszysty').
warunek(ogon):-czy('Posiada ogon').
warunek(szkodnikiem):-czy('Jest szkodnikiem').





czy(X) :- prawda(X), !.
czy(X) :- nieprawda(X), !, fail.

czy(X) :-
string_concat('',X, Temp),
string_concat(Temp,' ?',Wynik),



% new(D, dialog('Pytanie')),

send(@display,inform,D),

send(D, append, label(name,Wynik,font(helvetica,roman,12))),
send(D, append,
button(tak, message(D, return,
'tak'))),
send(D, append,
button(nie, message(D, return, 'nie'))),
send(D, default_button, tak), % Ok: default button
get(D, confirm, Answer), % This blocks!
send(D, destroy),
Odp = Answer,
do_bazy(X,Odp).



do_bazy(X,Odp):- Odp == tak, assert(prawda(X)).
do_bazy(X,Odp):- Odp == nie, assert(nieprawda(X)), !, fail.
 
You've got an error here :
Code:
czy(X) :-
        string_concat('',X, Temp),
        string_concat(Temp,' ?',Wynik),
        new(D, dialog('Pytanie')),

%%%%%%%%%%%%%%%%%%
       
        send(@display,inform,Temp),

%%%%%%%%%%%%%%%%%%%
        
        send(D, append, label(name,Wynik,font(helvetica,roman,12))),
        send(D, append, button(tak, message(D, return, 'tak'))),
        send(D, append,
             button(nie, message(D, return, 'nie'))),
        send(D, default_button, tak), % Ok: default button
        get(D, confirm, Answer),     % This blocks!
        send(D, destroy),
        Odp = Answer,
        do_bazy(X,Odp).
 
Yes, sorry I'v passed wrong version

There should be:


new(D, dialog('Pytanie')),
 
############

czy(X) :-
string_concat('',X, Temp),
string_concat(Temp,' ?',Wynik),
new(D, dialog('Pytanie')),
send(D, append, label(name,Wynik,font(helvetica,roman,12))),
send(D, append,
button(tak, message(D, return,
'tak'))),
send(D, append,
button(nie, message(D, return, 'nie'))),
send(D, default_button, tak), % Ok: default button
get(D, confirm, Answer), % This blocks!
send(D, destroy),
Odp = Answer,
do_bazy(X,Odp).

###########
 
And I wanna put dialog('Pytanie') in this same place on the screen
 
You can try this and give your own values :
Code:
czy(X) :-
        string_concat('',X, Temp),
        string_concat(Temp,' ?',Wynik),
        new(D, dialog('Pytanie')),

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	get(D, frame, F),
	send(F, geometry,'300x100+100-500'),
        % <width>x<height>+<X>-<Y>
        % X and Y are from bottom-left side of the screen
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

        send(D, append, label(name,Wynik,font(helvetica,roman,12))),
        send(D, append,
             button(tak, message(D, return, 'tak'))),
        send(D, append,
             button(nie, message(D, return, 'nie'))),
        send(D, default_button, tak), % Ok: default button
        get(D, confirm, Answer),     % This blocks!
        send(D, destroy),
        Odp = Answer,
        do_bazy(X,Odp).
 
PS : you can use sformat instead of string_concat tou build Wynik !
Code:
	sformat(Wynik, '~w ?', [X]),
 
Thank you joel76 very much ! It works! It is what I want.


%%%%%%
exe:- make_dialog(D, 'glowny_dialog'),
%%%
get(D, frame, F),
send(F, geometry,'660x170+200+100'),
%%
send(D, background, grey),
send(D, open).

%%%%%%%
czy(X) :-
string_concat('',X, Temp),
string_concat(Temp,' ?',Wynik),
new(D, dialog('Pytanie')),
%%
get(D, frame, F),
send(F, geometry,'500x80+250+140'),
%%
% 'szerokosc x wysokosc + X od lewe go rogu ekranu + Y od lewe go rogu ekranu'
send(D, append, label(name,Wynik,font(helvetica,roman,12))),
send(D, append,
button(tak, message(D, return,
'tak'))),
send(D, append,
button(nie, message(D, return, 'nie'))),
send(D, default_button, tak), % Ok: default button
get(D, confirm, Answer), % This blocks!
send(D, destroy),
Odp = Answer,
do_bazy(X,Odp).

%%%%%
 
I have only 1 question:

If I get dialog 'Pytanie' with czy('Czy jest to zwierze cieplokrwiste'). And I click 'tak' (means YES ) I wanna to question czy('Czy jest to zwierze zimnokrwiste'). automatically assign 'nie' (means NO ).

'Czy jest to zwierze cieplokrwiste' means 'Is it warm-blooded animal'

Czy jest to zwierze zimnokrwiste means 'Is it cold-blooded animal'

This questions mutually exclusive and it no seans to set both of them
 
I think you should organize your database not to have this kind of question, for that, you need only one question.
You should have questions when facts are true and questions when facts are false : "warm-blooded animal" is false or true.
Before asking a question, you should check the database.
 
OK, yes you have right :)

Thank you for your help. It was really helpful! :)

Topic is closed.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top