Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Foxpro/Clipper/Dbase > МЕНЮ


Автор: wedmed 21.1.2009, 20:32
Как из меню, можно (и можно ли вообще) программно узнать название формы (чтобы к ней обращатся), к которой привязана меню???

Автор: Данкинг 21.1.2009, 22:44
А как меню вообще привязано к форме? Вроде меню отображается после запуска файла с ним, .mpr

Автор: wedmed 21.1.2009, 23:23
            
               DO Menu.MPR  WITH  THISFORM

А Можно как-нибудь узнать, на какой форме в данный момент оно отбражается (или необходимо в лоб прописывать 

имя формы)

Автор: reware 27.1.2009, 21:20
Цитата(wedmed @ 21.1.2009,  23:23)
DO Menu.MPR  WITH  THISFORM

А Можно как-нибудь узнать, на какой форме в данный момент оно отбражается (или необходимо в лоб прописывать 

имя формы)

Дык в самой форме и можно спросить ? thisform.name. Это имеет в виду, что форме был присвоен какой-то name. Если надо узнать не в самой форме, а извне (лучше бы мне не догадываться, а вам стоит четче обьяснить откуда надо узнать имя формы), то все сложнее.

Автор: reware 27.1.2009, 23:23
Цитата(wedmed @ 21.1.2009,  20:32)
Как из меню, можно (и можно ли вообще) программно узнать название формы (чтобы к ней обращатся), к которой привязана меню???

Два случая для двух немодальных форм. В первом случае формы вызывают CallFun(thisform). Во втором случае вызов выглядит как CallFun(thisform.name) и каждой форме присвоено свое name (zzz и vvv).
Случай 1 :
Код

*!*    Формы внешне единообразные и действия с ними производятся
*!*    одинаково, независимо от их имен (изменяется высота форм).

_screen.WindowState= 2
DO FORM form1 NAME myform1
DO FORM form2 NAME myform2
READ EVENTS
RELEASE ALL
RETURN

**************************
FUNCTION CallFun
**************************
PARAMETERS foname && ссылка на вызывающий обьект (форму)
                  && без учета его имени.
IF foname.height=63
    foname.height=80
ELSE
    foname.height=63
ENDIF
RETURN


Случай 2 :
Код

*!*    Действия с формами производятся
*!*    в зависимости от имени формы, вызвавшей CallFun().

_screen.WindowState= 2
PUBLIC zzz, vvv
DO FORM form3 NAME myform1
DO FORM form4 NAME myform2
READ EVENTS
RELEASE ALL
RETURN

**************************
FUNCTION CallFun
**************************
PARAMETERS foname && имя вызывающей формы
DO case
    CASE foname=='zzz' && у этой формы меняем высоту...
        IF myform1.height=63
            myform1.height=80
        ELSE
            myform1.height=63
        ENDIF
    CASE foname=='vvv' && ...а у этой ширину
        IF myform2.width=424
            myform2.width=460
        ELSE
            myform2.width=424
        ENDIF
ENDCASE
RETURN

Автор: reware 27.1.2009, 23:50
Цитата(wedmed @ 21.1.2009,  20:32)
Как из меню, можно (и можно ли вообще) программно узнать название формы (чтобы к ней обращатся), к которой привязана меню???

Два случая обращения к двум немодальным формам. В первом случае каждая форма вызывает общую внешнюю функцию CallFun(thisform) и передает ей ссылку на саму себя. Функция обращается к формам по этой ссылке абсолютно одинаково (меняет высоту вызывающей формы).
Во втором случае каждой форме присвоено свое имя (zzz и vvv), которое она передает  в CallFun(thisform.name). Функция способна различить вызывающую форму по имени и выполнить с ней нужные действия (у одной формы меняется высота, у другой - ширина).

Случай 1 :

Код

*!*    Формы внешне единообразные и действия с ними производятся
*!*    одинаково, независимо от их имен (изменяется высота форм).

_screen.WindowState= 2
DO FORM form1 NAME myform1
DO FORM form2 NAME myform2
READ EVENTS
RELEASE ALL
RETURN

**************************
FUNCTION CallFun
**************************
PARAMETERS foname && ссылка на вызывающий обьект (форму)
                  && без учета его имени.
IF foname.height=63
    foname.height=80
ELSE
    foname.height=63
ENDIF
RETURN

Случай 2 :

Код

*!*    Действия с формами производятся
*!*    в зависимости от имени формы, вызвавшей CallFun().

_screen.WindowState= 2
PUBLIC zzz, vvv
DO FORM form3 NAME myform1
DO FORM form4 NAME myform2
READ EVENTS
RELEASE ALL
RETURN

**************************
FUNCTION CallFun
**************************
PARAMETERS foname && имя вызывающей формы
DO case
    CASE foname=='zzz'
        IF myform1.height=63 && этой форме меняем высоту
            myform1.height=80
        ELSE
            myform1.height=63
        ENDIF
    CASE foname=='vvv'
        IF myform2.width=424 && а этой ширину
            myform2.width=460
        ELSE
            myform2.width=424
        ENDIF
ENDCASE
RETURN

Как видно, можно ссылаться как на явное имя формы, так и на обьект, именованный в DO FORM ... NAME.

Автор: wedmed 12.2.2009, 20:36
Цитата(reware @ 27.1.2009,  21:20)
Если надо узнать не в самой форме, а извне, то все сложнее.

Из процедуры описанной в меню

Автор: wedmed 6.3.2009, 20:55
Можно но сложно (так и не нашёл)!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)