Чтение метки меню или пункта
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Чтение метки меню или пункта
Помогите, пожалуйста в следующем Есть меню некоторого окошка. Необходимо читать метки меню или их пунктов. Пробовал использовать PROP:USE:
A = -2
TXT_NAME = A{PROP:TEXT}
TXT_USE = A{PROP:USE}
TXT_NAME дает наименование, а TXT_USE - пустую строку. Использую Clarion v6.3. Как быть, подскажи, пожалуйста.
A = -2
TXT_NAME = A{PROP:TEXT}
TXT_USE = A{PROP:USE}
TXT_NAME дает наименование, а TXT_USE - пустую строку. Использую Clarion v6.3. Как быть, подскажи, пожалуйста.
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Re: Чтение метки меню или пункта
Для чего вам чтение меток, может подскажем как без этого обойтись!?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Губин Игорь
- Шубуршун
- Сообщения: 2584
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 26 раз
Re: Чтение метки меню или пункта
Если во время исполнения нужны названия меток, то лучше это сделать через шаблон. У меня так построена локализация приложений.
Это я только кажусь дураком! На самом деле я полный идиот!
Re: Чтение метки меню или пункта
Метки необходимы вот для чего. В системе сохраняется текущее меню для того, чтобы можно было любой пункт меню настроить для конкретного пользователя (разрешить, запретить, открыть, закрыть). Так вот, если выводить на экран список наименований меню и пунктов меню, то невозможно различить, где меню, а где пункт этого меню. Например, есть меню Выход, которое включает пункт Выход. При отображении в списке оба они идут друг за другом, у меню, например, код -50, а у пункта -51. Хотелось бы в списке отличать меню от пунктов и отображать их разным цветом. Может есть какой-нибудь отличительный признак у них?
- Дед Пахом
- Старичок
- Сообщения: 3289
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
- Контактная информация:
Re: Чтение метки меню или пункта
Судя по всему, ?Menu{prop:type} вернёт CREATE:menu, а ?Item{prop:type} вернёт CREATE:item
С уважением, ДП
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Re: Чтение метки меню или пункта
Самый простой вариант сделать шаблон который будет заточен под это дело...
к примеру:
к примеру прицепив его на кнопку на фрейме получаем в коде
Далее все зависит от твоей фантазии.
Ну типаи т.д.
Название пункта тоже можно взять из символа %ControlStatement
Читай про шаблоны...
P.S. В коде видим пункты без USE метки... Кларион любит "непоставить" метки некоторым пунктам. Сам туда их запиши.
к примеру:
Код: Выделить всё
#TEMPLATE (MENU_TEST, 'MENU_TEST'),FAMILY('ABC')
#CODE (MENU_TEST, 'MENU_TEST')
#FOR(%Control)
#IF(%ControlType = 'MENU')
!MENU %Control
#ENDIF
#IF(%ControlType = 'ITEM')
!ITEM %Control
#ENDIF
#ENDFOR
Код: Выделить всё
OF ?Button4
! Start of "Control Event Handling"
!MENU ?FileMenu
!ITEM ?PrintSetup
!ITEM
!ITEM ?Exit
!MENU ?EditMenu
!ITEM ?Cut
!ITEM ?Copy
!ITEM ?Paste
!MENU
!ITEM ?Tile
!ITEM ?Cascade
!ITEM ?Arrange
!MENU
!ITEM ?Helpindex
!ITEM ?HelpSearch
!ITEM ?HelpOnHelp
Ну типа
Код: Выделить всё
controls.use = '%Control'
controls.ctrltype = 'menu'
add(controls)
Название пункта тоже можно взять из символа %ControlStatement
Читай про шаблоны...
P.S. В коде видим пункты без USE метки... Кларион любит "непоставить" метки некоторым пунктам. Сам туда их запиши.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Re: Чтение метки меню или пункта
Да... если есть желание можно и в коде перебрать все контролы...Дед Пахом писал(а):Судя по всему, ?Menu{prop:type} вернёт CREATE:menu, а ?Item{prop:type} вернёт CREATE:item
Ток без USE метки.
Код: Выделить всё
LOOP
ThisField=SELF.Window{Prop:NextField,ThisField}
IF ~ThisField BREAK END
MESSAGE(ThisField{PROP:Text},ThisField{PROP:Type})
END
Если метки нужны 100% то через шаблон или руками...
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Re: Чтение метки меню или пункта
...А не через шаблон можно вязаться к полному пути элемента меню (...<прародитель>.<родитель>.<элемент>). На прежней работе мне хватало даже одного родителя (<родитель>.<элемент>).
Посидев сейчас в мыслях над subj, я немного развил цикл прохода по меню.
Посмотреть результат можно, выполнив процедуру ShowMenuTree, которую я приложил в зазипованом TXA-формате.
Посидев сейчас в мыслях над subj, я немного развил цикл прохода по меню.
Код: Выделить всё
GLO:MenuQueue QUEUE,PRE(GMQ)
Eq LONG
Name CSTRING(256)
Level LONG
FullName CSTRING(1024)
DotNotation CSTRING(256)
Hidden BYTE
Disabled BYTE
Type BYTE
END
CODE
free(GLO:MenuQueue)
Loop
ThisField# = AppFrame{Prop:NextField,ThisField#}
If ThisField#
clear(GLO:MenuQueue)
if ThisField#{PROP:Text} = ''
if ThisField# = -1
GMQ:Name = 'Menu'
GMQ:FullName = 'Menu'
ELSE
GMQ:Name = '---------'
GMQ:FullName = '-'
end
else
GMQ:Name = ThisField#{PROP:Text}
GMQ:FullName = ThisField#{PROP:Text}
end
GMQ:Eq = ThisField#
GMQ:DotNotation = format(ThisField#,@n-04)
GMQ:Hidden = ThisField#{PROP:Hide}
GMQ:Disabled = ThisField#{PROP:Disable}
GMQ:Type = ThisField#{PROP:Type}
GMQ:Level = 1
Parent# = ThisField#
loop
Parent# = Parent#{PROP:Parent}
if Parent#
GMQ:FullName = choose(Parent#{PROP:Text}='','Menu',Parent#{PROP:Text}) & '|' & GMQ:FullName
GMQ:DotNotation = format(Parent#,@n-04) & '.' & GMQ:DotNotation
GMQ:Level += 1
ELSE
break
end
end
add(GLO:MenuQueue,+GMQ:DotNotation)
ELSE
BREAK
END
end
start(ShowMenuTree,35000)
- Вложения
-
- ShowMenu.zip
- (2.11 КБ) 198 скачиваний