powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как можно програмно создавать пункты меню в окне MDI ?
8 сообщений из 8, страница 1 из 1
Как можно програмно создавать пункты меню в окне MDI ?
    #34079088
yurkor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно чтобы из БД (ASA Sybase 9) бралось название пункта, и может быть что то еще и при открытии MDI окна создавались эти пункты.
Реально ли это?
...
Рейтинг: 0 / 0
Как можно програмно создавать пункты меню в окне MDI ?
    #34079155
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
Реально :)
...
Рейтинг: 0 / 0
Как можно програмно создавать пункты меню в окне MDI ?
    #34079305
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как можно програмно создавать пункты меню в окне MDI ?
    #34079538
yurkor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помощь!!!!! Очень признателен.
...
Рейтинг: 0 / 0
Как можно програмно создавать пункты меню в окне MDI ?
    #34079823
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, насчет MDI + динамическое меню.

Насколько я помню, меню sheet (если оно указано) при открытии этого sheet замещает собой меню главного MDI окна на время своей активности. В итоге если динамические пункты нужны и в окнах MDI, то их надо генерить каждый раз при открытии окон.
...
Рейтинг: 0 / 0
Как можно програмно создавать пункты меню в окне MDI ?
    #34080523
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyНасколько я помню, меню sheet (если оно указано) при открытии этого sheet замещает собой меню главного MDI окна на время своей активности. В итоге если динамические пункты нужны и в окнах MDI, то их надо генерить каждый раз при открытии окон.
Да, так и есть.
...
Рейтинг: 0 / 0
Как можно програмно создавать пункты меню в окне MDI ?
    #34085446
ZhV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно создать "пустое меню" m_genapp и в режиме "Edit Source" заменить весь текст вот на это :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
forward
global type m_genapp from menu
end type
end forward

global type m_genapp from menu
event ue_postconstructor ( )
event ue_destructor ( )
end type
global m_genapp m_genapp

type variables

end variables

event ue_postconstructor();/*********
event ue_postconstructor() 
Предназначен для начальных настроек меню 

Нужно через "Edit Source" откорректировать 
 - - - - - -
on m_genapp.create
m_genapp=this
call super::create
This.Postevent("ue_postconstructor")
end on
- - - - -
************/

//MessageBox("Create",Classname(This))  


end event

event ue_destructor();/*********
event ue_destructor() 
Предназначен для корректного destroy в меню 

Нужно через "Edit Source" откорректировать 
 - - - - - -
on m_genapp.destroy
This.event ue_destroy()
call super::destroy
end on 
 
on m_genapp.create
m_genapp=this
call super::create
This.Postevent("ue_postconstructor")
end on
- - - - -
************/
end event

on m_genapp.create
m_genapp=this
call super::create
This.Postevent("ue_postconstructor")
end on

on m_genapp.destroy
This.event ue_destructor()
call super::destroy
end on 
-----------------
Суть в том , что у такого меню появляются события ue_postconstructor и ue_destroy

Теперь "корневое" меню приложения с названием m_genapp_root, которое используется для наследования различных меню нужно сделать наследником этого m_genapp
Делается это так - в режиме "Edit Source" в теле меню нужно найти строку вида
global type m_genapp_root from menu
таких строк должно быть две - обьявление и реализация - и заменить их на строку
global type m_genapp_root from m_genapp

После сохранения - убедиться что теперь ваше меню m_genapp_root имеет ancestor-а m_genapp

Отныне во всех наследниках вы гарантированно получаете пару событий для самого корневого item меню -
ue_postconstructor & ue_destroy
которые можно использовать для управления самим меню изнутри в момент создания в событии ue_postconstructor.

Предлагается вариант - все "управляемые" пункты меню делаются невидимыми. В полях TAG прописывается некая непустая строка-маска.
Можно рекурсивно собрать все пункты меню с непустой маской и по заданному соглашению применения маски вы определяете в каких случаях - {класс sheet, роль и права пользователя и др..} - этот пункт делается видимым.

Причем удобно , чтобы в теле события Clicked() управляемых пунктов меню применялось только выражения типа
Код: plaintext
1.
  lw_current_sheet.Postevent("ue_<name_item>") 
в таком случае даже если такого события для листа нет - системной ошибки Null-обращения не будет
...
Рейтинг: 0 / 0
Как можно програмно создавать пункты меню в окне MDI ?
    #34087101
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZhVПричем удобно , чтобы в теле события Clicked() управляемых пунктов меню применялось только выражения типа
У нас это реализовано еще строже. Грубо говоря в clicked() прописан скрипт который открывает окно с заданным именем и заданным способом открытия (Layered!,Original!,Cascaded!).
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как можно програмно создавать пункты меню в окне MDI ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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