powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как задать владельца уже открытому окну?
18 сообщений из 18, страница 1 из 1
Как задать владельца уже открытому окну?
    #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
Как задать владельца уже открытому окну?
    #35953334
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а менеджер окон есть какой-нить?
...
Рейтинг: 0 / 0
Как задать владельца уже открытому окну?
    #35953405
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппНу а менеджер окон есть какой-нить?
Что там в приложении будет - неизвестно, поскольку конечным продуктом будет являться только библиотека.
В ней свой менеджер есть, но чужие окна она не видит.
Более общая задача такая: чтобы при использовании библиотеки в любом оконном приложении поведение этого приложения при закрытии главного окна не зависело от наличия открытых окон в библиотеке. При этом свести к минимуму вызовы из приложения отвечающие за решение этой задачи.

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

Возможно что придется вместо этого делать наоборот вызов при закрытии главного окна, а в библиотеке - закрытие всех открытых окон. Тут вообще работа с владельцем не нужна. Но почему-то мне не нравится такой вариант. Еще не понял почему :)
...
Рейтинг: 0 / 0
Как задать владельца уже открытому окну?
    #35953417
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А библиотека типа через Library List будет на лету подключаться?
...
Рейтинг: 0 / 0
Как задать владельца уже открытому окну?
    #35953488
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппА библиотека типа через Library List будет на лету подключаться?
Да нет, в Library List таргета, при разработке.
...
Рейтинг: 0 / 0
Как задать владельца уже открытому окну?
    #35953513
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда вообще не понимаю о чём речь...
...
Рейтинг: 0 / 0
Как задать владельца уже открытому окну?
    #35953545
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппТогда вообще не понимаю о чём речь...
А что меняет ответ на последний вопрос?
...
Рейтинг: 0 / 0
Как задать владельца уже открытому окну?
    #35953556
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может w_main всегда неявно открывать? Хотя конечно это не решает задачи или хотя бы как-то область под него зарезервировать
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
Как задать владельца уже открытому окну?
    #35953572
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наиболее простым интерфейсом для этого будет передача ссылки на главное окно после его открытия
Чё рассуждать то? :-)
...
Рейтинг: 0 / 0
Как задать владельца уже открытому окну?
    #35953574
_Guest_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyПосле открытия w_main ссылка на него передается в библиотеку. Это единственный способ взаимодействия этих двух окон.
Ну и используйте эту библиотеку как посредника между окнами для разных проверок
...
Рейтинг: 0 / 0
Как задать владельца уже открытому окну?
    #35953577
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spas2001А может w_main всегда неявно открывать? Хотя конечно это не решает задачи или хотя бы как-то область под него зарезервировать
Может я как-то не четко это описал, но суть в том, что я создаю только библиотеку , которую можно будет добавить в любое заранее неизвестное приложение. w_main (имя окна тоже заранее неизвестно) - это гипотетическое главное окно этого приложения.
По этой причине библиотека не может диктовать приложению, какие окна открывать и в каком порядке. Что приложение захочет, то и откроет. И работа библиотеки с ее окнами не должна или (или минимально должна влиять на работу приложения с его окнами.
...
Рейтинг: 0 / 0
Как задать владельца уже открытому окну?
    #35953578
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарищи, ну прочитайте исходный вопрос.
Он есть прямо в теме :)
...
Рейтинг: 0 / 0
Как задать владельца уже открытому окну?
    #35953609
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если приложение хочет работать с твоей библиотекой, то оно просто ДОЛЖНО в open evente ЛЮБОГО СВОЕГО окна слать ссылку на себя твоему служебному окну w_tool, если IsValid(w_tool). А ты эти ссылки собирай, а потом решай что делать :-)
...
Рейтинг: 0 / 0
Как задать владельца уже открытому окну?
    #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
Как задать владельца уже открытому окну?
    #35953643
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну можно в логгере твоём в таймере бежать и проверять, есть ли хоть одна валидная ссылка из собранных тобой, и если ни одной таковой не осталось, закрываться...
...
Рейтинг: 0 / 0
Как задать владельца уже открытому окну?
    #35953676
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппНу можно в логгере твоём в таймере бежать и проверять, есть ли хоть одна валидная ссылка из собранных тобой, и если ни одной таковой не осталось, закрываться...
Да, вариант, спасибо
...
Рейтинг: 0 / 0
Как задать владельца уже открытому окну?
    #35955954
+/-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
+/-
Гость
это не подойдет?
function ulong SetParent (ulong hWndChild, ulong hWndNewParent) library "user32.dll"
...
Рейтинг: 0 / 0
Как задать владельца уже открытому окну?
    #35956116
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+/-это не подойдет?
function ulong SetParent (ulong hWndChild, ulong hWndNewParent) library "user32.dll"
Если внимательно прочитать хотя-бы первое сообщение, то там можно найти ответ на этот вопрос.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как задать владельца уже открытому окну?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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