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

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

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

menuname = 'menu'

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

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

возможно ли это вообще?
...
Рейтинг: 0 / 0
25.04.2013, 12:33
    #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
25.04.2013, 12:54
    #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
25.04.2013, 13:34
    #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
25.04.2013, 14:04
    #38239951
PSmith
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задать меню при открытии окна
katyshaя получаю название меню в виде стринга

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

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

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

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

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

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

CREATE USING objecttypestring ?

если не сложно поясните как это сделать
...
Рейтинг: 0 / 0
25.04.2013, 16:25
    #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
25.04.2013, 17:12
    #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
25.04.2013, 17:30
    #38240428
PSmith
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задать меню при открытии окна
katysha,

Похоже в девятке changemenu не работает. Может в 11.5 и прокатит
...
Рейтинг: 0 / 0
25.04.2013, 19:12
    #38240604
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задать меню при открытии окна
Changemenu работает и в 8-ке, дело не в этом
Создание визуальных объектов не срабатывает
Проще всего создать оба меню сразу, а потом скрывать по-необходимости
...
Рейтинг: 0 / 0
25.04.2013, 19:13
    #38240605
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задать меню при открытии окна
Но мне способ предложенный PL99 ближе всего:)
...
Рейтинг: 0 / 0
25.04.2013, 19:27
    #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
25.04.2013, 19:52
    #38240639
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задать меню при открытии окна
"Есть необходимость использовать одно окно для разных нужд. В зависимости от типа документов должно подставляться своё меню"

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

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

в 11.5 это тоже не работает. Само Chengemenu работает, а вот создание нового через create using не работает, отсюда и меню не подставляется
...
Рейтинг: 0 / 0
26.04.2013, 10:13
    #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
26.04.2013, 12:29
    #38241284
katysha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задать меню при открытии окна
spas2001,

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

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

спасибо
...
Рейтинг: 0 / 0
26.04.2013, 17:01
    #38241924
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задать меню при открытии окна
create using для 9-й версии не сработает
А вот выше 10-ки самое то
...
Рейтинг: 0 / 0
26.04.2013, 19:17
    #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
26.04.2013, 19:31
    #38242126
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задать меню при открытии окна
Anatoly Moskovsky, в девятке работает только 2)
И мой внутренний голос подсказывает, что, скорее всего, в следующих версиях ничего не изменилось.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Задать меню при открытии окна / 25 сообщений из 29, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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