powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Меню для As Top-Level форм
8 сообщений из 8, страница 1 из 1
Меню для As Top-Level форм
    #32218448
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно ли добавить меню для As Top-Level формы?

P.S. Основного окна уже нет (_Screen.Visible=.F.)
...
Рейтинг: 0 / 0
Меню для As Top-Level форм
    #32218479
Фотография FM32YO aka KID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 при востроении меню - View - General options TOP LEVEL form галочку поставь.
2. потом после генерации этого меню открой сгенерированый MPR-файл и тама найдешь такое:

* To attach this menu to your Top-Level form,
* call it from the Init event of the form:

* Syntax: DO <mprname> WITH <oFormRef> [,<cMenuname>|<lRename>]

* oFormRef - form object reference (THIS)
* cMenuname - name for menu
* lRename - renames Name property of your form

* example:

* PROCEDURE Init
* DO mymenu.mpr WITH THIS,.T.
* ENDPROC

перевод думаю не нужен...
...
Рейтинг: 0 / 0
Меню для As Top-Level форм
    #32218504
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работает. :)

Thanks!!!
...
Рейтинг: 0 / 0
Меню для As Top-Level форм
    #32218536
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как на счет StatusBar?
...
Рейтинг: 0 / 0
Меню для As Top-Level форм
    #32219064
Flex2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
* Это чтоб ты в любом месте проги мог пихать в менюшки все что хочешь

Public MyMainForm
MyMainForm = (thisform)
* А это в любом месте после инита или в ините твоей формы
для примера. Лучше вообще создай какой нить Custom там менюхи и прописывай в ините, а в ините формы просто создавай объект свой на основе твоего класса Custom_Menu.
Create class Custom_Menu as Custom
Porcedure Init
define menu (MyMainForm.Name) in (MyMainForm.Name) bar
DEFINE PAD Main OF (MyMainForm.name) PROMPT 'Система' COLOR SCHEME 3
ON PAD Main OF (MyMainForm.name) ACTIVATE POPUP SubPud
DEFINE POPUP SubPud MARGIN RELATIVE COLOR SCHEME 7
DEFINE BAR 1 OF SubPud PROMPT '\<Выход' AFTER _MLAST

ON SELECTION BAR 1 OF SubPud m.MyMainForm.DoExit()
acti menu (MyMainForm.name) nowait
Endif
enddefine
А стутус-бар ты как юзаешь, ручками делаешь как контрол или хочешь использовать ActiveX? хотя, разницы нет. Я делаю из ToolBar"а.
В ините формы
with thisform
.Addproperty("statusbar",createobject("_status")) && - старт твоего статус -бара
где _status - твой статус и не важно как ты его сделал.
.Addproperty("oMenu",createobject("Custom_Menu")) && - старт твоего
* А это менюха стартовала
endwith

Ясное дело что путь к библиотекам VCX или прогам должен быть определен
чтоб она все это добро нашла.
Все.
...
Рейтинг: 0 / 0
Меню для As Top-Level форм
    #32219068
Flex2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, пардоньте, первый вариант не правильный, не так вырезал. :)
Вот правильный:

Это чтоб ты в любом месте проги мог пихать в менюшки все что хочешь

Public MyMainForm
MyMainForm = (thisform)
* А это в любом месте после инита или в ините твоей формы
для примера. Лучше вообще создай какой нить Custom там менюхи прописывай в ините, а в ините формы просто создавай объект свой на основе твоего класса Custom_Menu.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
define class Custom_Menu as Custom 
Porcedure Init 
define menu (MyMainForm.Name) in (MyMainForm.Name) bar 
DEFINE PAD Main OF (MyMainForm.name) PROMPT 'Система' COLOR SCHEME  3  
ON PAD Main OF (MyMainForm.name) ACTIVATE POPUP SubPud 
DEFINE POPUP SubPud MARGIN RELATIVE COLOR SCHEME  7  
DEFINE BAR  1  OF SubPud PROMPT '\<Выход' AFTER _MLAST 

ON SELECTION BAR  1  OF SubPud m.MyMainForm.DoExit() 
acti menu (MyMainForm.name) nowait 
endproc 
enddefine 

А стутус-бар ты как юзаешь, ручками делаешь как контрол или хочешь использовать ActiveX? хотя, разницы нет. Я делаю из ToolBar"а.
В ините формы
Код: plaintext
1.
2.
3.
4.
with thisform 
.Addproperty( "statusbar" ,createobject( "_status" )) && - старт твоего статус -бара 
где _status - твой статус и не важно как ты его сделал. 
.Addproperty( "oMenu" ,createobject( "Custom_Menu" )) && - старт твоего  меню
endwith 

Ясное дело что путь к библиотекам VCX или прогам должен быть определен
чтоб она все это добро нашла.
Вот теперь все.
...
Рейтинг: 0 / 0
Меню для As Top-Level форм
    #32219355
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только, Фокс делать этого не хочет.
Говорит, что "Methods and events cannot contain nested procedures or class definitions".
...
Рейтинг: 0 / 0
Меню для As Top-Level форм
    #32219491
Flex2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты пишешь определение класса в уже определенном классе.
Делай так:
1. Создай файл с раширением PRG.
В этом файле напиши класс который будет у тебя собержать описание меню:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
define class Custom_Menu as Custom 
Prоcedure Init 
define menu (MyMainForm.Name) in (MyMainForm.Name) bar 
DEFINE PAD Main OF (MyMainForm.name) PROMPT 'Система' COLOR SCHEME  3  
ON PAD Main OF (MyMainForm.name) ACTIVATE POPUP SubPud 
DEFINE POPUP SubPud MARGIN RELATIVE COLOR SCHEME  7  
DEFINE BAR  1  OF SubPud PROMPT '\<Выход' AFTER _MLAST 

ON SELECTION BAR  1  OF SubPud m.MyMainForm.DoExit() 
acti menu (MyMainForm.name) nowait 
endproc 
enddefine 


2. При страте своего приложения(можешь в Load формы) пропиши пути к этому файлу с помощью SET PATH TO или явно укажи место где он валяется в config.fpw.

3. Определи этот файл в
Код: plaintext
SET PROCEDURE to  CMenu ADDITIVE

где CMenu - имя твоего файла с определнным классом меню.

4. В Init формы определи

Код: plaintext
1.
Public MyMainForm 
MyMainForm = (thisform) 


а после этого в Init формы создавай объект на основании определнного твоего класса:

Код: plaintext
1.
2.
3.
with thisform 
.Addproperty( "statusbar" ,createobject( "_status" )) 
.Addproperty( "oMenu" ,createobject( "Custom_Menu" )) 
endwith 


Если у тебя определение класса лежит в другом APP , то вместо createobject используй newobject. Если в метод Init при создании объекта нужно пихать параметры, то createobject и newobject это позволяют сделать.

Тоже относится и к созданию стутус-бара.
Соответственно, доступ к статус - бару и объекту меню можешь осущесвить из любого места программулины:

Код: plaintext
? MyMainForm.statusbar.Name && к примеру
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Меню для As Top-Level форм
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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