OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 12:55

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 20 ] 
Автор Сообщение
 Заголовок сообщения: Контекстное меню
СообщениеДобавлено: Пятница, 09 Ноябрь, 2007 13:13 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Проблема: ББ не отображает типизированное контекстное меню (обозванное "*" ("имя")) для отображения. Аналогичное меню в строке главного меню отображается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню
СообщениеДобавлено: Пятница, 09 Ноябрь, 2007 18:40 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Код:
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;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню
СообщениеДобавлено: Пятница, 09 Ноябрь, 2007 22:13 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Цитата:
Аналогичное (типизированное) меню в строке главного меню отображается:
Код:
   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 := { }
...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню
СообщениеДобавлено: Пятница, 09 Ноябрь, 2007 23:47 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Моё меню появилось для текста, благодаря этому:
Код:
   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;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню
СообщениеДобавлено: Среда, 14 Ноябрь, 2007 13:10 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Цитата:
PROCEDURE (c: Controller) GetContextType (OUT type: Stores.TypeName)
NEW, ABSTRACT
Вызывается из c.HandleCtrlMsg для заполнения Controllers.PollOpsMsg.type.
Ндя...

Кто-нибудь меню контекстные делал? Так чтобы они появлялись. :) Опишите, если не сложно, ваш положительный опыт.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню
СообщениеДобавлено: Среда, 14 Ноябрь, 2007 13:20 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Судя по "обилию" ответов в этой ветке - Женя, ты пионер в этом деле! :-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню
СообщениеДобавлено: Среда, 14 Ноябрь, 2007 17:57 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Контекстное меню мышкой вызывается только для контейнеров. (По Shift-F10 или APPS - не только.)
Но его можно вызвать и самому.
Код:
PROCEDURE (v: View) HandleCtrlMsg 
   WITH    ...
   | msg: Controllers.TrackMsg DO  HostMenus.PopupMenu


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню
СообщениеДобавлено: Среда, 14 Ноябрь, 2007 18:13 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Однако, если я не ошибаюсь, в TrackMsg нету возможности определить, какая кнопка мыши была нажата...
Про кнопки спасибо, и правда вызывается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню
СообщениеДобавлено: Среда, 14 Ноябрь, 2007 20:23 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Евгений Темиргалеев писал(а):
Однако, если я не ошибаюсь, в TrackMsg нету возможности определить, какая кнопка мыши была нажата...

Код:
WITH msg: Controllers.TrackMsg DO
  IF HostPorts.right IN msg.modifiers THEN
    HostMenus.PopupMenu
  END
...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню
СообщениеДобавлено: Четверг, 15 Ноябрь, 2007 10:01 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Александр Ильин писал(а):
Евгений Темиргалеев писал(а):
Однако, если я не ошибаюсь, в TrackMsg нету возможности определить, какая кнопка мыши была нажата...

Код:
WITH msg: Controllers.TrackMsg DO
  IF HostPorts.right IN msg.modifiers THEN
    HostMenus.PopupMenu
  END
...

HostPorts... Поправляюсь - нету документированной и платформенно-независимой возможности. Да и HostMenus оттуда же...

Но за подсказки большое спасибо, мне всё равно надо только под винду :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню
СообщениеДобавлено: Четверг, 15 Ноябрь, 2007 15:12 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Евгений Темиргалеев писал(а):
HostPorts... Поправляюсь - нету документированной и платформенно-независимой возможности. Да и HostMenus оттуда же...

У Макинтошей нет правой кнопки мыши.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню
СообщениеДобавлено: Четверг, 15 Ноябрь, 2007 15:20 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Так у новых вроде бы есть уже.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню
СообщениеДобавлено: Четверг, 15 Ноябрь, 2007 18:38 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Александр Ильин писал(а):
Евгений Темиргалеев писал(а):
HostPorts... Поправляюсь - нету документированной и платформенно-независимой возможности. Да и HostMenus оттуда же...

У Макинтошей нет правой кнопки мыши.

Когда писал про HostPorts, у меня было чувство, что кто-нибудь именно это и скажет :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню
СообщениеДобавлено: Четверг, 15 Ноябрь, 2007 20:54 

Зарегистрирован: Среда, 28 Февраль, 2007 00:08
Сообщения: 142
Откуда: Нижний Новгород
Александр Ильин писал(а):
Евгений Темиргалеев писал(а):
HostPorts... Поправляюсь - нету документированной и платформенно-независимой возможности. Да и HostMenus оттуда же...

У Макинтошей нет правой кнопки мыши.

Это как посмотреть :D
У яблочных мышей нету, у операционки есть (насчет 3х и больше не в курсе, но думаю потянет).
Кстати, надо бы уже и насчет >2 клавиш мыши думать :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню
СообщениеДобавлено: Пятница, 16 Ноябрь, 2007 09:18 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
batyrmastyr писал(а):
Кстати, надо бы уже и насчет >2 клавиш мыши думать :)
Будем работать на перспективу, когда появятся мыши с вмонтированной по всему телу полноценной клавиатурой :). Кстати, тексты (под виндой :)) поддерживают третью кнопку для копирования атрибутов. Удобно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню
СообщениеДобавлено: Вторник, 22 Ноябрь, 2011 20:08 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Вот полноценный пример создания своего контекстного меню.

Код:
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;


Оно вроде бы подменяет первый пункт в контекстном меню, но визуально изменений никаких. Что-нибудь кто-нибудь знает про это?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню
СообщениеДобавлено: Вторник, 22 Ноябрь, 2011 22:53 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Иван Кузьмицкий писал(а):
Но написал я сюда не поэтому :) Генерировать контекстное меню куда интереснее, чем задавать его напрямую в Menus. Но - не получается.
Для вьюшки-синглетона контекстное меню достраивается каркасом. Может Вам этого хватит?
Вложение:
Комментарий к файлу: динамическое контекстное меню вьюшки ч-з Properties.PollVerbMsg
1.png
1.png [ 35.13 КБ | Просмотров: 14936 ]
Исходник (переделанный ObxViews1, добавки синим)
Код:
StdCoder.Decode ..,, ..5g....3Qw7uP5PRPPNR9Rbf9b8R79FTvMf1GomCrlAy2xhX,Cb2x
 hXhC6FU1xhiZiVBhihgmRiioedhgrZcZRiXFfaqmSrtuGfa4700zdGrr8rmCLLCJuyKtYcZRiX
 7.2.s,6XJ.0k,5TWyql.bnayKmKKqGomC5XzET1.PuP.MHT9N9ntumaU2,CJuyKtQC98P9PP7O
 NbXmb.2.Iv7k2Edb.,6.,U08J99SdfJHPNjvQCJuGKfaqmY6MwdONl1QCh0708T,U..w.Yj7.,
 sUGpmWbBxhYhAbndMHT9NY6Mw.sQq2Y6cwB.0.Bw,w,oj5E.0E.M.he.cU.ktAcoZimBhWhioh
 gnZcZRCY.2.w26.I12U.U,2.I3tfj1.0E65.A3AU0KyBU.2.m00.e,2.AU.Ue.E.mP,U8.d,3c
 UZT1E.MAE.c4E.szE.e0.,6YUG.p13s,s.3gwP.0.X,0.p.,6.M.EJ.1.V20k5E.4,4kpF08Mt
 r.0E.MF,.,UO.,UzX.2Ue.0.,6jU9V2IyzzzzbUwU2oyzzzzPD6,Z501,M,3gwP.,6.Im.U.EB
 U.kzV.I3k.ES,56.gUozzzzz3A.gUaX3.mzzzzz,8zzzzzJ.g.k.UyzzzzT9.7s,M.1.m94ETE
 .S18k8E.C12.QeFK.rc93E,5TWKKvCorqqq4KrGqm8rtumdGbK,6.XDF9fR.ELO3U.Iy1U.2..
 c,E.g08EHU,2.yzayIWKJaKIEyIlWLfaqmQilQbBgV7AdB3eDJeI3YKBhZFK0GcyKtGrtmGE0J
 tyKsKKtGroKqtin4qk2Gpg0pWqk2aEfaqm2Yx2YExd7pdIhcG3YIxdUIe3RcDJe23YcoedhAbf
 9kIqk2ak2Cqrmqr8LR0GcyKtc95uPNvPqk2akWuIWin4qk20JdyoVKIWKJdKIEWGveHEOpoK4,
 76ZONb9RTfQ0GIOKR0GfktocmBghhgv2YgZZUYig2YmZZUIgu2Y7pdIhc5hcGBZvgV7Ic3xc7p
 dBAV7ogiYcmBgrJeZRgo3ZgZZU.69,7ITfQcNH9PN99,dRRtMT9PTHIeGE0prUmhgY3YeAZdgV
 7gcC76ZONb1in4q.Q6..aW6BgiZgghgEJij3iBRib3Ycoe,JeUghnxgu2YEJijNNUigdZRinBg
 bhgdQbBA,.SpYGJY0mqCrn..QedJjZ3emhga3Y2xdBAV7AV7pcU2ZhRibpZr3Yx2YKBhZtQKLr
 GqmOqouqmGqI0mb8JEWmqEo0mS0Gf..UI3d3pdBA,HM0,NPbvNSbugbUIak2Ye2YExBMPPvC,N
 PbvNWaugbUAak2Ye22.qk2aU3l4ak2mLEqqtI585.0prmKqOpm8Llqot2Y2xdBU1BcHhcUghnd
 9hPNZHEyIXqk2aUw7ApN0PvQDf9NPM3PNN96pND8GBGMUGMMGsUGsSGsZGsQGMFiHEqqtsMFPN
 5vO99N,dCvFvumlUUgbU2ejJCIC7P1HM0HUlIb7ghnFq.c617Vl7Vv7Vl7Vn7V3,sM.Ev..Elm
 quKq4ak2ENen2qqt6P.IYLYkpYkvYkFZkxYE.kl.Uq,.UbJiZhgihV7A,98HbOFH68J76z7V58
 Vv7Vp7V38VL8V,tB7AA7wD7AE7AAWI0XH09H01H0vI09I05I0zI01mTGMTGMEyH07E7wH7AB7g
 C7wE7A9,ND7AA7wF7AC7QD0XDZkUAc24Yk2YeAZBAV7EbUwNPI5.U2xhKhgmJgBFE.C2UioC22
 Uw7AoiiQgj,pND,7IT185M0A4OLL..El.ENcRR,..D1U3lRAV7cJUJ3iYBgohgcoig2YKBBsO9
 PNVfFZPMPntam4ak2KIa.aqnuqr8rm0mrGLoKKt0mqKqtUn3YeAZBUCN1KIb2Y6Bgi,MHQbBg,
 V0.7ONVvPbPOdf8rN1HM0hOEZ86hfC,,in4aEV.od3xecoidQbBM0hf951.UmlRqk2oedltYcZ
 3ijVcoidgV7g6YcZ3CsCPM19eH7mb8Kw.Xd9PM13c6TeMlfJ.7ONV12YHZiYRchZgnpZEBgnZi
 ZpedhA3N13QwdONQcjphoJijZhghgmRiiQ8CIu8LqGomCrl0ksH3..RtETfPd16F9vQ59.C244
 85Et...ktu0.Y62Umb.2.Y02.A,,E.0..4E,5TeEdKLqKKtCLLC3ZORNX2V.AyI,ktuGdKLqKa
 2V.Iy1.,UfW5UXW.2.52.CLLC3b8Rn9P99F9vQ0ks,Uikwm46.Zz,E..W.e32.86.c918R85EW
 E.Y.2..EGE.4E.E.EECOh2.0Eyuv.2bXl.k.E.0.3gwP.0..I16.M.EJ.,U.2m,.,.E4WDN.Nt
 arm3Wj.JklbcjlqK4Q6..I06..E2E.U76.2yMqClhPnI.nT32kwL,V9bLHQ8L5,7U0...
 --- end of encoding ---


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню
СообщениеДобавлено: Понедельник, 14 Октябрь, 2013 14:48 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
а как сделать вложенное контекстное меню, как на последней картинке, но для текста?

(для вставки конструкций КП и команд исполнителя мышкой)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню
СообщениеДобавлено: Вторник, 22 Октябрь, 2013 09:36 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
Евгений Темиргалеев писал(а):
...

поведение не совпадает с примером:
Вложение:
скрин.png
скрин.png [ 115.14 КБ | Просмотров: 13479 ]


контекстное меню появилось, но нужных пунктов нету.

пример от Ивана сработал, но там контекстное меню не вложенное.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Контекстное меню
СообщениеДобавлено: Вторник, 22 Октябрь, 2013 11:56 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
___ писал(а):
Евгений Темиргалеев писал(а):
...

поведение не совпадает с примером:
...
контекстное меню появилось, но нужных пунктов нету.
А если Вы попробуете в ББ 1.6? Другой разницы пока не вижу.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB