Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Как проверить, открыто Окно или нет.
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
shdu shdu вне форума
Member
 
Сообщений: 22
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 12.03.2011
По умолчанию Как проверить, открыто Окно или нет. - 23.05.2018, 10:23

Создано окно, в режиме MDI через меню
При повторном выборе окно меню если окно открыто, то новое не создавать
Что использовать?
Ответить с цитированием
  (#2 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 559
Сказал(а) спасибо: 17
Поблагодарили 35 раз(а) в 35 сообщениях
Регистрация: 28.03.2012
По умолчанию 23.05.2018, 11:36

хранить в факте объект этого окна, по закрытию окна факт уничтожать (retract или erroneous), при создании проверять и не создавать.
Ответить с цитированием
  (#3 (permalink)) Старый
shdu shdu вне форума
Member
 
Сообщений: 22
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 12.03.2011
По умолчанию 23.05.2018, 18:48

А где лучше этот факт описать?
В каком классе?
Ответить с цитированием
  (#4 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 559
Сказал(а) спасибо: 17
Поблагодарили 35 раз(а) в 35 сообщениях
Регистрация: 28.03.2012
По умолчанию 23.05.2018, 19:11

в простых случаях можно в самом классе окна (если он есть), надо констрктор запихнуть в имплементацию, а в классе написать предиеат типа display, который всё и будет делать.
Ответить с цитированием
  (#5 (permalink)) Старый
shdu shdu вне форума
Member
 
Сообщений: 22
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 12.03.2011
По умолчанию 24.05.2018, 10:01

Я должен написать в класс окна:

class facts
display : integer := erroneous.

Как и куда мне сделать добавление факта и проверку в создание окна:
new(Parent) :-
dialog::new(Parent),
generatedInitialize(),
succeed.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 559
Сказал(а) спасибо: 17
Поблагодарили 35 раз(а) в 35 сообщениях
Регистрация: 28.03.2012
По умолчанию 24.05.2018, 13:02

как-то так:

if isErroneous(display) then
display := Новое окно
else
Окно уже есть
end if
Ответить с цитированием
  (#7 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,956
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 24.05.2018, 19:08

В файле декларации родительского класса (например в файле main form.cl), из которого Вы создаёте нужное Вам окно, надо добавить предикат удаления факта, подтверждающего факт существования дочернего окна. Например, у меня этот файл содержит следующую инфу (VIP8):
Visual Prolog Код:
class mainForm : mainForm [noDefaultConstructor]

predicates
    display : (window Parent) -> mainForm MainForm.
    del : ().
end class mainForm

В файле имплементации родительского класса (mainForm.pro) надо добавить:
Visual Prolog Код:
class facts
f:window:=erroneous.   % объявление факта наличия дочернего окна

predicates
    onPushButton7Click : button::clickResponder.  % это кнопка, которой я создаю дочернее окно. У Вас может быть не кнопка, а нечто другое.
clauses
    onPushButton7Click(_Source) = button::defaultAction :-
        if isErroneous(f) then f := glass::display(getParent()) end if.  % Проверка и создание окна

del() :- f := erroneous.  % видимый извне предикат удаления факта наличия окна
glass - это в моей проге имя класса дочернего окна

В дочернем окне добавить обработчик события закрытия окна, в котором с помощью предиката mainForm::del() удалить факт в родительском окне:
Visual Prolog Код:
predicates
    onDestroy : window::destroyListener.
clauses
    onDestroy(_Source) :- mainForm::del().

Последний раз редактировалось Винитарх; 24.05.2018 в 19:11
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прошу проверить Kp0BaTb Разное 5 25.03.2014 06:49
Как проверить,подскажите?: Василий Михалыч Операционная система Windows 4 30.10.2013 19:10
Проверить ноутбук got7777 Выбор ноутбука 2 22.03.2012 11:16
Как проверить тип данных imported_Fred_ Visual C++ 1 06.03.2011 17:34
как проверить турбину? kashakru Авто и мото 41 15.02.2011 12:49
При выключении компьютера появляется окно с названием оaisjdnoifj. Что это за окно? Polzovatel_2010 Любые вопросы от новичков 4 21.03.2010 01:34
Как проверить БП? imported_Aleksey Охлаждение и разгон 9 04.08.2009 22:01
Как проверить Web-ссылки reggger Visual Basic 3 13.03.2009 07:26
Как проверить введённый код Виталик 1 Delphi 17 22.09.2006 02:19
Как сделать чтобы при нажатии кнопки "свернуть в окно" - окно разворачивалось Anonymous Visual C++ 1 27.10.2003 14:06
Необходимо сделать окно похожее на окно Workspace в Visual C++ imported_Незнайка Visual C++ 1 13.03.2003 01:36
Как проверить активно ли окно или нет при переходе Alt+Tab на другую программу Anonymous Visual C++ 3 02.10.2002 17:19



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов