Возвращает количество элементов в меню, определенном пользователем, или в системном меню Visual FoxPro.
Синтаксис:
CNTBAR([cMenuName])
Параметры:
cMenuName
Задает имя меню, для которого функция CNTBAR( ) возвращает число элементов. Список имен системных меню Visual FoxPro приведен в теме Имена системных меню.
Если имя cMenuName опущено, функция CNTBAR( ) возвращает число элементов активного меню, созданного с помощью команды DEFINE POPUP.
Результат:
Числовой
Комментарии:
Если меню создано пользователем с указанием опции PROMPT в команде DEFINE POPUP, то по команде ACTIVATE POPUP Visual FoxPro вычисляет количество элементов в нем. Для такого меню CNTBAR( ) сможет возвратить осмысленное значение только после активизации меню. Однако если элементы подобного меню созданы с помощью команды DEFINE BAR, функция CNTBAR( ) может определить число элементов до выдачи команды ACTIVATE POPUP.
Пример:
* В следующем примере программа с именем CNTBAR.PRG добавляет
* заголовок меню в системное меню. Новое меню popEnv создается с
* четырьмя элементами. При выборе какого-либо элемента программа
* ставит возле него в меню галочку. Функция CNTBAR( ) используется в
* цикле, чтобы отобразить галочки у соответствующих элементов меню.
*** You must name this program CNTBAR.PRG ***
CLEAR
SET TALK OFF
DEFINE PAD padEnv OF _MSYSMENU PROMPT 'E\<nvironment';
KEY ALT+V, 'ALT+V'
ON PAD padEnv OF _MSYSMENU ACTIVATE POPUP popEnv
DEFINE POPUP popEnv MARGIN RELATIVE SHADOW COLOR SCHEME 4
DEFINE BAR 1 OF popEnv PROMPT '\<Status Bar'
DEFINE BAR 2 OF popEnv PROMPT '\<Clock'
DEFINE BAR 3 OF popEnv PROMPT '\<Extended Video'
DEFINE BAR 4 OF popEnv PROMPT 'St\<icky'
ON SELECTION POPUP popEnv DO enviropop IN cntbar.prg
FOR i = 1 TO CNTBAR('popEnv')
DO CASE
CASE PRMBAR('popEnv', i) = 'Status Bar'
SET MARK OF BAR i OF popEnv TO SET('STATUS') = 'ON'
CASE PRMBAR('popEnv', i) = 'Clock'
SET MARK OF BAR i OF popEnv TO SET('CLOCK') = 'ON'
CASE PRMBAR('popEnv', i) = 'Extended Video'
SET MARK OF BAR i OF popEnv TO SROW( ) > 25
CASE PRMBAR('popEnv', i) = 'Sticky'
SET MARK OF BAR i OF popEnv TO SET('STICKY') = 'ON'
ENDCASE
ENDFOR
PROCEDURE enviropop
DO CASE
CASE PROMPT() = 'Status'
IF mrkbar('popEnv', bar( ))
DO CASE
CASE _WINDOWS OR _MAC
SET STATUS BAR OFF
CASE _DOS
SET STATUS OFF
OTHERWISE
ENDCASE
SET MARK OF BAR bar( ) OF popEnv TO .F.
ELSE
DO CASE
CASE _WINDOWS OR _MAC
SET STATUS BAR ON
CASE _DOS
SET STATUS ON
OTHERWISE
ENDCASE
SET MARK OF BAR bar( ) OF popEnv TO .T.
ENDIF
CASE PROMPT( ) = 'Clock'
IF mrkbar('popEnv', bar( ))
SET CLOCK OFF
SET MARK OF BAR bar( ) OF popEnv TO .F.
ELSE
DO CASE
CASE _WINDOWS OR _MAC
SET STATUS BAR ON
SET CLOCK STATUS
CASE _DOS
SET CLOCK ON
OTHERWISE
ENDCASE
SET MARK OF BAR bar( ) OF popEnv TO .T.
ENDIF
CASE PROMPT( ) = 'Extended Video'
IF MRKBAR('popEnv', bar( ))
SET DISPLAY TO VGA25
SET MARK OF BAR bar( ) OF popEnv TO .F.
ELSE
SET DISPLAY TO VGA50
SET MARK OF BAR bar( ) OF popEnv TO .T.
ENDIF
CASE PROMPT( ) = 'Sticky'
IF MRKBAR('popEnv', bar( ))
DO CASE
CASE _WINDOWS OR _MAC
WAIT WINDOW 'STICKY is always on in this Visual FoxPro version'
CASE _DOS
SET STICKY OFF
OTHERWISE
ENDCASE
SET MARK OF BAR bar( ) OF popEnv TO .F.
ELSE
DO CASE
CASE _WINDOWS OR _MAC
WAIT WINDOW 'STICKY is always ON in Visual FoxPro'
CASE _DOS
SET STICKY ON
OTHERWISE
ENDCASE
SET MARK OF BAR bar( ) OF popEnv TO .T.
ENDIF
ENDCASE