Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как задать владельца уже открытому окну? / 18 сообщений из 18, страница 1 из 1
24.04.2009, 15:41
    #35952889
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать владельца уже открытому окну?
Исходные данные:
В приложении есть главное окно w_main и библиотека с неким служебным окном w_tool. w_tool - типа "main!", w_main - любого типа.
После открытия w_main ссылка на него передается в библиотеку. Это единственный способ взаимодействия этих двух окон.
w_tool может быть открыто до открытия w_main.

Требуется:
В случае если w_main (или каких-нибудь других окон без владельца) так и не будет окрыто, то приложение должно завершиться после закрытия окна w_tool юзером.
Если же w_main будет окрыто, то приложение должно завершиться после закрытия окна w_main юзером, независимо от того открыто ли w_tool.

Проблема:
Такое поведение возможно, если w_main является владельцем w_tool. Т.е. w_tool открыто так:
Код: plaintext
open(w_tool, w_main) 
Для случая когда w_main открывается после w_tool, необходимо задать нового владельца для уже открытого w_tool.

Пробовал WinAPI SetParent - не годится, т.к. при этом окно вкладывается в родителя, как если бы имело тип "child!".

Пока остановился на переоткрытии окна w_tool с новым владельцем.
Но может есть варианты без переоткрытия?

PB9
...
Рейтинг: 0 / 0
24.04.2009, 18:27
    #35953334
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать владельца уже открытому окну?
Ну а менеджер окон есть какой-нить?
...
Рейтинг: 0 / 0
24.04.2009, 19:06
    #35953405
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать владельца уже открытому окну?
ФилиппНу а менеджер окон есть какой-нить?
Что там в приложении будет - неизвестно, поскольку конечным продуктом будет являться только библиотека.
В ней свой менеджер есть, но чужие окна она не видит.
Более общая задача такая: чтобы при использовании библиотеки в любом оконном приложении поведение этого приложения при закрытии главного окна не зависело от наличия открытых окон в библиотеке. При этом свести к минимуму вызовы из приложения отвечающие за решение этой задачи.

На данный момент я решил что наиболее простым интерфейсом для этого будет передача ссылки на главное окно после его открытия. Отсюда и исходный вопрос.

Возможно что придется вместо этого делать наоборот вызов при закрытии главного окна, а в библиотеке - закрытие всех открытых окон. Тут вообще работа с владельцем не нужна. Но почему-то мне не нравится такой вариант. Еще не понял почему :)
...
Рейтинг: 0 / 0
24.04.2009, 19:25
    #35953417
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать владельца уже открытому окну?
А библиотека типа через Library List будет на лету подключаться?
...
Рейтинг: 0 / 0
24.04.2009, 21:12
    #35953488
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать владельца уже открытому окну?
ФилиппА библиотека типа через Library List будет на лету подключаться?
Да нет, в Library List таргета, при разработке.
...
Рейтинг: 0 / 0
24.04.2009, 21:48
    #35953513
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать владельца уже открытому окну?
Тогда вообще не понимаю о чём речь...
...
Рейтинг: 0 / 0
24.04.2009, 22:25
    #35953545
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать владельца уже открытому окну?
ФилиппТогда вообще не понимаю о чём речь...
А что меняет ответ на последний вопрос?
...
Рейтинг: 0 / 0
24.04.2009, 22:35
    #35953556
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать владельца уже открытому окну?
А может w_main всегда неявно открывать? Хотя конечно это не решает задачи или хотя бы как-то область под него зарезервировать
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
24.04.2009, 23:05
    #35953572
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать владельца уже открытому окну?
наиболее простым интерфейсом для этого будет передача ссылки на главное окно после его открытия
Чё рассуждать то? :-)
...
Рейтинг: 0 / 0
24.04.2009, 23:06
    #35953574
_Guest_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать владельца уже открытому окну?
Anatoly MoskovskyПосле открытия w_main ссылка на него передается в библиотеку. Это единственный способ взаимодействия этих двух окон.
Ну и используйте эту библиотеку как посредника между окнами для разных проверок
...
Рейтинг: 0 / 0
24.04.2009, 23:09
    #35953577
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать владельца уже открытому окну?
spas2001А может w_main всегда неявно открывать? Хотя конечно это не решает задачи или хотя бы как-то область под него зарезервировать
Может я как-то не четко это описал, но суть в том, что я создаю только библиотеку , которую можно будет добавить в любое заранее неизвестное приложение. w_main (имя окна тоже заранее неизвестно) - это гипотетическое главное окно этого приложения.
По этой причине библиотека не может диктовать приложению, какие окна открывать и в каком порядке. Что приложение захочет, то и откроет. И работа библиотеки с ее окнами не должна или (или минимально должна влиять на работу приложения с его окнами.
...
Рейтинг: 0 / 0
24.04.2009, 23:10
    #35953578
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать владельца уже открытому окну?
Товарищи, ну прочитайте исходный вопрос.
Он есть прямо в теме :)
...
Рейтинг: 0 / 0
25.04.2009, 00:02
    #35953609
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать владельца уже открытому окну?
Если приложение хочет работать с твоей библиотекой, то оно просто ДОЛЖНО в open evente ЛЮБОГО СВОЕГО окна слать ссылку на себя твоему служебному окну w_tool, если IsValid(w_tool). А ты эти ссылки собирай, а потом решай что делать :-)
...
Рейтинг: 0 / 0
25.04.2009, 00:41
    #35953630
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать владельца уже открытому окну?
ФилиппЕсли приложение хочет работать с твоей библиотекой, то оно просто ДОЛЖНО в open evente ЛЮБОГО СВОЕГО окна слать ссылку на себя твоему служебному окну w_tool, если IsValid(w_tool). А ты эти ссылки собирай, а потом решай что делать :-)
Так вопрос - что делать если к моменту open event w_tool уже открыто?

Ну например:
Допустим есть библиотека для логгирования в отдельное окно отладочных сообщений.
Код: plaintext
1.
2.
3.
4.
5.
Logger.print("Собираюсь открыть w_main") // в этот момент будет открыто w_tool
open(w_main) 
  event w_main.open
    Logger.setMainWindow(this)  
    Logger.print("Открыли w_main")
Юзер закрывает w_main
Юзер, когда закрывает w_main, ожидает что приложение должно завершиться, как это было без логгирования.
Однако из-за висящего w_tool приложение не будет завершено, и юзеру надо будет закрыть вручную w_tool.
Т.е. подключение библиотеки логгирования изменило реакцию приложения на элементарные действия юзера.
Чтобы избежать этого, введен интерфейс Logger.setMainWindow(window), в реализации которого надо переданное окно сделать владельцем w_tool.
Как это сделать?
...
Рейтинг: 0 / 0
25.04.2009, 01:13
    #35953643
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать владельца уже открытому окну?
Ну можно в логгере твоём в таймере бежать и проверять, есть ли хоть одна валидная ссылка из собранных тобой, и если ни одной таковой не осталось, закрываться...
...
Рейтинг: 0 / 0
25.04.2009, 02:10
    #35953676
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать владельца уже открытому окну?
ФилиппНу можно в логгере твоём в таймере бежать и проверять, есть ли хоть одна валидная ссылка из собранных тобой, и если ни одной таковой не осталось, закрываться...
Да, вариант, спасибо
...
Рейтинг: 0 / 0
27.04.2009, 13:37
    #35955954
+/-
+/-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать владельца уже открытому окну?
это не подойдет?
function ulong SetParent (ulong hWndChild, ulong hWndNewParent) library "user32.dll"
...
Рейтинг: 0 / 0
27.04.2009, 14:27
    #35956116
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать владельца уже открытому окну?
+/-это не подойдет?
function ulong SetParent (ulong hWndChild, ulong hWndNewParent) library "user32.dll"
Если внимательно прочитать хотя-бы первое сообщение, то там можно найти ответ на этот вопрос.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как задать владельца уже открытому окну? / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]