powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Задать меню при открытии окна
25 сообщений из 29, страница 1 из 2
Задать меню при открытии окна
    #38239404
katysha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно этот вопрос обсуждался, тогда прошу прощения

pb 11.5
Есть необходимость задавать некоторые параметры при открытии окна
разносить заголовки, назначать датаобджекты для дв все класно

проблема с тем как задать для этого окна меню?
переприсвоить через

menuname = 'menu'

не выходит
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38239461
katysha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыла уточнить

я получаю название меню в виде стринга

возможно ли это вообще?
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38239791
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katyshaпроблема с тем как задать для этого окна меню?PowerBuilder Help ChangeMenu PowerScript function
Description

Changes the menu associated with a window. If the window is an MDI frame window, ChangeMenu appends the list of open sheets to the currently active menu.

Controls

Window objects

Syntax

windowname.ChangeMenu ( menuname {, position } )

Argument Description
windowname The name of the window for which you want to change the menu.
menuname The name of the menu you want to make the current menu.
position
(MDI frame windows only) The number of the item on the menu bar to which you want to append the names of the open sheets. Items on the menu bar are numbered from the left, beginning with 1. The default is 0, which lists the open sheets on the menu bar's next-to-last menu (or the last menu if there is only one available).

Return value

Integer. Returns 1 if it succeeds and -1 if an error occurs. If any argument's value is null, ChangeMenu returns null. The return value is usually not used.

Usage

If you are changing the menu associated with an MDI frame window, the new menu will not be visible if an open sheet with its own menu is active. When a sheet has its own menu, the list of open sheets appears on its menu, as well as on the hidden menu for the frame.
Это формальный ответ на ваш вопрос.

katyshaя получаю название меню в виде стринга
возможно ли это вообще?Вообще, все можно запрограммировать. Это тоже формальный ответ.

Но лучше расскажите, что именно надо сделать.
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38239832
katysha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PL99,

Есть необходимость использовать одно окно для разных нужд. В зависимости от типа документов должно подставляться своё меню с действиями
Название нужного меню передается в качестве параметра при открытии окна. Так вот задача состоит в том чтобы подставить его в окно.

на данный момент другой мысли кроме как сделать вот так не пришло

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
string  ls_menu

choose case ls_menu
	case	'm_listdocfindoc'	
		m_listdocfindoc lm_active
		lm_active = create m_listdocfindoc
	case	'm_listdoctovdoc'	
		m_listdoctovdoc lm_active
		lm_active = create m_listdoctovdoc		
			
end choose	
		
this.changemenu( lm_active )



это довольно не красиво и скорее всего не совсем верно
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38239894
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katyshaВ зависимости от типа документов должно подставляться своё меню с действиямиА перечень действий сильно отличается?


автор
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
string  ls_menu

choose case ls_menu
	case	'm_listdocfindoc'	
		m_listdocfindoc lm_active
		lm_active = create m_listdocfindoc
	case	'm_listdoctovdoc'	
		m_listdoctovdoc lm_active
		lm_active = create m_listdoctovdoc		
			
end choose	
		
this.changemenu( lm_active )


Компилятор не ругается ошибкой С0081? Странно.
авторэто довольно не красиво и скорее всего не совсем верноНекрасиво, но, в целом, верно. Меню это особенный объект эхотага, с ним довольно сложно работать.

Короче, если архитектура позволяет, передавайте массив строк наименований событий, создавайте на ходу объект menu (унаследованный), добавляйте их в массив item[]. Объект в событии clicked должен содержать код вида
Код: sql
1.
ParentWindow.triggerEvent (is_event)

Переменную экземпляра is_event устанавливайте из переданного массива. Приправить дополнительными опциями по вкусу.
Такой подход работает уже чуть более 10 лет.
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38239951
Фотография PSmith
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katyshaя получаю название меню в виде стринга

возможно ли это вообще?

CREATE USING objecttypestring ?
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38240080
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSmithkatyshaя получаю название меню в виде стринга

возможно ли это вообще?

CREATE USING objecttypestring ?И? Вы проверили и убедились, что такой подход работает или так, из общих соображений?
Если действительно работает, выложите, пожалуйста, тестовый примерчик. И версию эхотага укажите. Спасибо.
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38240139
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99,

Если просто create работает, то create using тоже будет работать, т.к. внутри они одно и то же делают.
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38240235
katysha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PSmithkatyshaя получаю название меню в виде стринга

возможно ли это вообще?

CREATE USING objecttypestring ?

если не сложно поясните как это сделать
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38240244
katysha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quote PL99]
Компилятор не ругается ошибкой С0081? Странно.
[/quote PL99]
совершенно верно ошибка будет, это кусочек скрипта не верно вставлен, должно быть так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
choose case ls_menu
	case	'm_l_tovdocbuy'	
			m_l_tovdocbuy lm_tovdocbuy
			lm_tovdocbuy = create m_l_tovdocbuy
			this.changemenu( lm_tovdocbuy )
	case	'm_l_findoccash'	
			m_l_findoccash lm_findoccash
			lm_findoccash = create m_l_findoccash		
			this.changemenu( lm_findoccash )
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38240379
Фотография PSmith
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99,

Действительно...
Не ругается. Но и не работает. PB 9.0.3
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
//
menu lm_menu
if il_regnum > 9 then
	lm_menu = create using 'm_genapp_sheet'
else
	lm_menu = create using 'm_ticket_viewer'
end if
this.changemenu(lm_menu)
//


ПС
Меню совершенно разные по составу.
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38240428
Фотография PSmith
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katysha,

Похоже в девятке changemenu не работает. Может в 11.5 и прокатит
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38240604
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Changemenu работает и в 8-ке, дело не в этом
Создание визуальных объектов не срабатывает
Проще всего создать оба меню сразу, а потом скрывать по-необходимости
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38240605
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но мне способ предложенный PL99 ближе всего:)
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38240618
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyPL99,

Если просто create работает, то create using тоже будет работать, т.к. внутри они одно и то же делают.CREATE работает, а толку?..
Вот, я чуть дополнил:
PSmithPL99,

Действительно...
Не ругается. Но и не работает. PB 9.0.3
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
//
integer li_Rc
menu lm_menu
if il_regnum > 9 then
	lm_menu = create using 'm_genapp_sheet'
else
	lm_menu = create using 'm_ticket_viewer'
end if
li_Rc = this.changemenu(lm_menu) // li_Rc = -1
//


ПС
Меню совершенно разные по составу.PSmith, спасибо.
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38240639
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Есть необходимость использовать одно окно для разных нужд. В зависимости от типа документов должно подставляться своё меню"

А одно окно от другого унаследовать низзя, и просто меню на втором в дизайне поменять? И открывать нужное окно по контексту...
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38240655
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппА одно окно от другого унаследовать низзя, и просто меню на втором в дизайне поменять? И открывать нужное окно по контексту...Это скучно ;-)
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38240917
katysha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PSmithkatysha,

Похоже в девятке changemenu не работает. Может в 11.5 и прокатит

в 11.5 это тоже не работает. Само Chengemenu работает, а вот создание нового через create using не работает, отсюда и меню не подставляется
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38241047
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А просто вот так написать?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
string  ls_menu

choose case ls_menu
	case	'm_listdocfindoc'	
		this.changemenu( m_listdocfindoc)
	case	'm_listdoctovdoc'	
		this.changemenu( m_listdoctovdoc)	
			
end choose	
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38241284
katysha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spas2001,

действительно работает и намного короче

остался еще один вопрос.
А что делает create using - как он из стринга должен был создать меню?
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38241534
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katyshaА что делает create using - как он из стринга должен был создать меню? 14231975
строчка lm_menu = create using 'm_genapp_sheet' создает объект меню типа m_genapp_sheet. Посмотрите этот пример под отладчиком.
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38241542
katysha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PL99,

спасибо
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38241924
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
create using для 9-й версии не сработает
А вот выше 10-ки самое то
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38242112
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так я не понял.

1) Так работает:
Код: sql
1.
2.
3.
menu m
m  = create m_listdocfindoc
this.changemenu( m )



2) Так работает:
Код: sql
1.
this.changemenu( m_listdocfindoc)



3) А так не работает?
Код: sql
1.
2.
3.
menu m
m  = create using 'm_listdocfindoc'
this.changemenu( m )




Или все-таки только (2) работает (без create)?
...
Рейтинг: 0 / 0
Задать меню при открытии окна
    #38242126
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky, в девятке работает только 2)
И мой внутренний голос подсказывает, что, скорее всего, в следующих версиях ничего не изменилось.
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Задать меню при открытии окна
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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