OberonCore https://forum.oberoncore.ru/ |
|
Контекстное меню https://forum.oberoncore.ru/viewtopic.php?f=24&t=729 |
Страница 1 из 1 |
Автор: | Евгений Темиргалеев [ Пятница, 09 Ноябрь, 2007 13:13 ] |
Заголовок сообщения: | Контекстное меню |
Проблема: ББ не отображает типизированное контекстное меню (обозванное "*" ("имя")) для отображения. Аналогичное меню в строке главного меню отображается. |
Автор: | Александр Ильин [ Пятница, 09 Ноябрь, 2007 18:40 ] |
Заголовок сообщения: | Re: Контекстное меню |
Код: PROCEDURE (v: View) HandleCtrlMsg* (f: Views.Frame; VAR msg: Controllers.Message; VAR focus: Views.View);
BEGIN WITH msg: Controllers.PollOpsMsg DO msg.type := 'MyViews.View'; (* Здесь должно быть имя типа для контекстного меню. *) msg.valid := {} ELSE END END HandleCtrlMsg; |
Автор: | Евгений Темиргалеев [ Пятница, 09 Ноябрь, 2007 22:13 ] |
Заголовок сообщения: | Re: Контекстное меню |
Цитата: Аналогичное (типизированное) меню в строке главного меню отображается: Код: PROCEDURE (v: StdView) HandleCtrlMsg (f: Views.Frame; VAR msg: Controllers.Message;
VAR focus: Views.View); BEGIN (* f # NIL *) (* focus = NIL *) WITH msg: Controllers.PollOpsMsg DO msg.type := "RODeadViews.View"; msg.selectable := FALSE; msg.valid := { } ... |
Автор: | Евгений Темиргалеев [ Пятница, 09 Ноябрь, 2007 23:47 ] |
Заголовок сообщения: | Re: Контекстное меню |
Моё меню появилось для текста, благодаря этому: Код: PROCEDURE (c: StdCtrl) GetContextType (OUT type: Stores.TypeName); Похоже, что контекстное меню поддерживается только для общих контейнеров:BEGIN (* type := "TextViews.View" *) type := "RODeadViews.View" END GetContextType; Код: DEFINITION Containers;
... Controller = POINTER TO ABSTRACT RECORD (Controllers.Controller) ... (c: Controller) GetContextType (OUT type: Stores.TypeName), NEW, ABSTRACT; |
Автор: | Евгений Темиргалеев [ Среда, 14 Ноябрь, 2007 13:10 ] |
Заголовок сообщения: | Re: Контекстное меню |
Цитата: PROCEDURE (c: Controller) GetContextType (OUT type: Stores.TypeName) Ндя...NEW, ABSTRACT Вызывается из c.HandleCtrlMsg для заполнения Controllers.PollOpsMsg.type. Кто-нибудь меню контекстные делал? Так чтобы они появлялись. Опишите, если не сложно, ваш положительный опыт. |
Автор: | Илья Ермаков [ Среда, 14 Ноябрь, 2007 13:20 ] |
Заголовок сообщения: | Re: Контекстное меню |
Судя по "обилию" ответов в этой ветке - Женя, ты пионер в этом деле! |
Автор: | Trurl [ Среда, 14 Ноябрь, 2007 17:57 ] |
Заголовок сообщения: | Re: Контекстное меню |
Контекстное меню мышкой вызывается только для контейнеров. (По Shift-F10 или APPS - не только.) Но его можно вызвать и самому. Код: PROCEDURE (v: View) HandleCtrlMsg
WITH ... | msg: Controllers.TrackMsg DO HostMenus.PopupMenu |
Автор: | Евгений Темиргалеев [ Среда, 14 Ноябрь, 2007 18:13 ] |
Заголовок сообщения: | Re: Контекстное меню |
Однако, если я не ошибаюсь, в TrackMsg нету возможности определить, какая кнопка мыши была нажата... Про кнопки спасибо, и правда вызывается. |
Автор: | Александр Ильин [ Среда, 14 Ноябрь, 2007 20:23 ] |
Заголовок сообщения: | Re: Контекстное меню |
Евгений Темиргалеев писал(а): Однако, если я не ошибаюсь, в TrackMsg нету возможности определить, какая кнопка мыши была нажата... Код: WITH msg: Controllers.TrackMsg DO
IF HostPorts.right IN msg.modifiers THEN HostMenus.PopupMenu END ... |
Автор: | Евгений Темиргалеев [ Четверг, 15 Ноябрь, 2007 10:01 ] |
Заголовок сообщения: | Re: Контекстное меню |
Александр Ильин писал(а): Евгений Темиргалеев писал(а): Однако, если я не ошибаюсь, в TrackMsg нету возможности определить, какая кнопка мыши была нажата... Код: WITH msg: Controllers.TrackMsg DO IF HostPorts.right IN msg.modifiers THEN HostMenus.PopupMenu END ... HostPorts... Поправляюсь - нету документированной и платформенно-независимой возможности. Да и HostMenus оттуда же... Но за подсказки большое спасибо, мне всё равно надо только под винду |
Автор: | Александр Ильин [ Четверг, 15 Ноябрь, 2007 15:12 ] |
Заголовок сообщения: | Re: Контекстное меню |
Евгений Темиргалеев писал(а): HostPorts... Поправляюсь - нету документированной и платформенно-независимой возможности. Да и HostMenus оттуда же... У Макинтошей нет правой кнопки мыши. |
Автор: | Илья Ермаков [ Четверг, 15 Ноябрь, 2007 15:20 ] |
Заголовок сообщения: | Re: Контекстное меню |
Так у новых вроде бы есть уже. |
Автор: | Евгений Темиргалеев [ Четверг, 15 Ноябрь, 2007 18:38 ] |
Заголовок сообщения: | Re: Контекстное меню |
Александр Ильин писал(а): Евгений Темиргалеев писал(а): HostPorts... Поправляюсь - нету документированной и платформенно-независимой возможности. Да и HostMenus оттуда же... У Макинтошей нет правой кнопки мыши. Когда писал про HostPorts, у меня было чувство, что кто-нибудь именно это и скажет |
Автор: | batyrmastyr [ Четверг, 15 Ноябрь, 2007 20:54 ] |
Заголовок сообщения: | Re: Контекстное меню |
Александр Ильин писал(а): Евгений Темиргалеев писал(а): HostPorts... Поправляюсь - нету документированной и платформенно-независимой возможности. Да и HostMenus оттуда же... У Макинтошей нет правой кнопки мыши. Это как посмотреть У яблочных мышей нету, у операционки есть (насчет 3х и больше не в курсе, но думаю потянет). Кстати, надо бы уже и насчет >2 клавиш мыши думать |
Автор: | Евгений Темиргалеев [ Пятница, 16 Ноябрь, 2007 09:18 ] |
Заголовок сообщения: | Re: Контекстное меню |
batyrmastyr писал(а): Кстати, надо бы уже и насчет >2 клавиш мыши думать Будем работать на перспективу, когда появятся мыши с вмонтированной по всему телу полноценной клавиатурой . Кстати, тексты (под виндой ) поддерживают третью кнопку для копирования атрибутов. Удобно.
|
Автор: | Иван Кузьмицкий [ Вторник, 22 Ноябрь, 2011 20:08 ] |
Заголовок сообщения: | Re: Контекстное меню |
Вот полноценный пример создания своего контекстного меню. Код: MODULE TestViews; IMPORT Log := StdLog, Dialog, Properties, Controllers, Views, Ports, HostPorts, HostMenus; TYPE View = POINTER TO RECORD (Views.View) END; PROCEDURE (v: View) Restore (f: Views.Frame; l, t, r, b: INTEGER); BEGIN f.DrawRect(l, t, r, b, Ports.fill, Ports.red) END Restore; PROCEDURE (v: View) HandlePropMsg (VAR msg: Properties.Message); BEGIN WITH msg: Properties.FocusPref DO msg.setFocus := TRUE ELSE END END HandlePropMsg; PROCEDURE (v: View) HandleCtrlMsg (f: Views.Frame; VAR msg: Controllers.Message; VAR focus: Views.View); VAR res: INTEGER; BEGIN WITH msg: Controllers.PollOpsMsg DO msg.type := 'TestViews' | msg: Controllers.TrackMsg DO IF HostPorts.right IN msg.modifiers THEN (* после вызова контекстного меню не должно быть никакого трекинга, иначе клик по пункту меню попадёт в обработку TrackMsg *) HostMenus.PopupMenu ELSE Log.String('нажал ЛКМ'); Log.Ln; END ELSE END END HandleCtrlMsg; PROCEDURE Deposit*; VAR v: View; BEGIN NEW(v); Views.Deposit(v) END Deposit; END TestViews. ^TestViews.Deposit; StdCmds.Open" Кроме этого, надо в ресурсном файле Menus.odc задать соответствующие строчки: MENU "*" ("TestViews") "Вывод в лог" "" "StdLog.String('TestViews.View пункт контекстного меню');StdLog.Ln" "" END Но написал я сюда не поэтому Генерировать контекстное меню куда интереснее, чем задавать его напрямую в Menus. Но - не получается. Пытаюсь сделать так: Код: PROCEDURE InitContextMenu; VAR item: HostMenus.Menu; PROCEDURE Valid(i: HostMenus.Menu): BOOLEAN; BEGIN RETURN (i.menu = '*') & (i.type = 'MyView') END Valid; BEGIN item := HostMenus.FirstMenu(); (* найти меню с именем '*' и типом 'MyView' *) WHILE (item # NIL) & ~Valid(item) DO item := item.next END; IF (item # NIL) & Valid(item) THEN StdDialog.AddItem(item.firstItem, '111', '222', '', ''); END END InitContextMenu; Оно вроде бы подменяет первый пункт в контекстном меню, но визуально изменений никаких. Что-нибудь кто-нибудь знает про это? |
Автор: | ___ [ Понедельник, 14 Октябрь, 2013 14:48 ] |
Заголовок сообщения: | Re: Контекстное меню |
а как сделать вложенное контекстное меню, как на последней картинке, но для текста? (для вставки конструкций КП и команд исполнителя мышкой) |
Автор: | ___ [ Вторник, 22 Октябрь, 2013 09:36 ] |
Заголовок сообщения: | Re: Контекстное меню |
Евгений Темиргалеев писал(а): ... поведение не совпадает с примером: Вложение: контекстное меню появилось, но нужных пунктов нету. пример от Ивана сработал, но там контекстное меню не вложенное. |
Автор: | Евгений Темиргалеев [ Вторник, 22 Октябрь, 2013 11:56 ] |
Заголовок сообщения: | Re: Контекстное меню |
___ писал(а): Евгений Темиргалеев писал(а): ... поведение не совпадает с примером: ... контекстное меню появилось, но нужных пунктов нету. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |