Неадекватный POPUP()

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7384
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 14 раз
Поблагодарили: 49 раз

Неадекватный POPUP()

Сообщение Игорь Столяров »

Привет всем ! :)

Есть непреодолимое желание сделать в MDI окне кнопку с выпадающим меню для выбора операции.

Т.к. в Clarion такой интерфейсный элемент отсутствует напрочь, создаем простой BUTTON (или CHECKBOX)
и вешаем на него что-то вроде: Popup('Пункты меню для выбора',?Button{Prop:XPos},?Button{Prop:YPos} - 2,True)

Все хорошо, за исключением того, что PopUp меню открывается в непредсказуемом направлении (вверх или вниз)
в зависимости от размера и расположения MDI окна ... :(
Можно как-либо зафиксировать направление открытия Popup() меню ?

Заранее спасибо за любые идеи.
Может быть можно как-то по другому сделать кнопку с выпадающим по нажатию меню ?
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4987
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 21 раз

Неадекватный POPUP()

Сообщение kreator »

А если жёстко задать координаты левого верхнего угла, толку мало? В принципе ещё можно считать эти координаты в зависимости от условий. "Непредсказуемое" поведение popup-меню происходит из-за того, что оно не влезает полностью в окно.
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7384
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 14 раз
Поблагодарили: 49 раз

Неадекватный POPUP()

Сообщение Игорь Столяров »

Причины по которым меняется направление открытия - понятны.
Но предположим, кнопка находится в верхнем левом угле окна, предполагая, что PopUp() будет открываться вниз,
где всегда для его открытия достаточно места (поверх MDI окна). Но нет ! Если окно находится посреди экрана -
может открыться и вверх, тем самым портя всю задумку дизайна ... ;)

Координата открытия задается - с этим проблем нет.
Проблема в том, что она может оказаться как координатой левого верхнего, так и левого нижнего угла меню.
А по человечески, ведь хочется стабильности ... :)

Я почему спросил ... например в AppFrame (точнее в структуре MENU) выпадающие меню никогда не открываются вверх ...
Да, у них другая проблема в C91 с горизонтальной координатой открытия, но это совсем другая история ...
За теми кто отстал - не возвращаться. (С) Кодекс
gopstop2007
✯ Ветеран ✯
Сообщения: 1703
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Неадекватный POPUP()

Сообщение gopstop2007 »

а взять параметры кнопки-чекета для popup-a и передать их popup не подойдет? Когда то, так делал и получал красивое открытие popup-a привязанное к кнопке
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Admin
Администратор
Сообщения: 3961
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Неадекватный POPUP()

Сообщение Admin »

CFCPopup до упора почти вниз открывает...
Вложения
cfc1.png
cfc2.png
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7384
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 14 раз
Поблагодарили: 49 раз

Неадекватный POPUP()

Сообщение Игорь Столяров »

gopstop2007 писал(а):а взять параметры кнопки-чекета для popup-a и передать их popup не подойдет?
Я извиняюсь, а можно для тех кто в танке пояснить таинство этого действия ? Заранее спасибо.

Если оно конечно, чем то отличается от того, что я написал в первом сообщении.
( Popup('Пункты меню для выбора',?Button{Prop:XPos},?Button{Prop:YPos} - 2,True) )
За теми кто отстал - не возвращаться. (С) Кодекс
gopstop2007
✯ Ветеран ✯
Сообщения: 1703
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Неадекватный POPUP()

Сообщение gopstop2007 »

вот еле нашел пример с которого лепил в своей "солянке" :) нашел когда то на cla - форуме

Код: Выделить всё

PROGRAM
POINT           GROUP,TYPE
X                SIGNED
Y                SIGNED
                END
                
 Map
   Module('win32.lib')
    ClientToScreen(UNSIGNED hwnd, *POINT lpPoint),SIGNED,RAW,PASCAL
   End
 End

W    WINDOW('Popup Testing'),AT(,,154,120),GRAY
       BUTTON('Close'),AT(100,3,45,14),USE(?Close)
       BUTTON('Popup'),AT(3,2,45,14),USE(?Popup)
     END
p  Like(Point)
 Code
 Open(W)
 Display
 Accept
   Case Accepted()
   Of ?Popup
     0{Prop:Pixels} = True
     p.X = ?Popup{Prop:Xpos}
     p.Y = ?Popup{Prop:Ypos} + ?Popup{Prop:Height}
     X# = ClientToScreen(0{Prop:Handle},p)
     X# = Popup('Test1|Test2',p.X,p.Y)
     0{Prop:Pixels} = False
   Of ?Close
     Break
   End
 End
 Close(W) 
может поможет
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7384
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 14 раз
Поблагодарили: 49 раз

Неадекватный POPUP()

Сообщение Игорь Столяров »

Спасибо. Проблемы те же.
Я так понимаю, что это очень старый пример, который реализует через API привязку к координатам окна.
Сейчас такая возможность есть и у стандартного PopUp() - последний параметр.

Думаю, что указанная мною "проблема" вызвана тем, что я пытаюсь задействовать PopUp() не по назначению.
Его задача - раскрытие контекстного меню по координатам мыши. Но более чем уверен, что можно как-то
выключить его функционал по интеллектуальному выбору направления открытия ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3135
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Неадекватный POPUP()

Сообщение Дед Пахом »

Случаем не на планшете тестируешь?
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7384
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 14 раз
Поблагодарили: 49 раз

Неадекватный POPUP()

Сообщение Игорь Столяров »

Нет. Но планшет есть могу, попробовать. Будет разница ?
За теми кто отстал - не возвращаться. (С) Кодекс
gopstop2007
✯ Ветеран ✯
Сообщения: 1703
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Неадекватный POPUP()

Сообщение gopstop2007 »

GetWindowRect(hWndControl, rcCtrl)
X# = POPUP('1|2|3', rcCtrl.Right, rcCtrl.Bottom)
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3135
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Неадекватный POPUP()

Сообщение Дед Пахом »

Игорь Столяров писал(а): Нет. Но планшет есть могу, попробовать. Будет разница ?
Не, я как раз нагуглил такую проблему для Tablet PC, там это лечится кардинально в настройках девайса.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7384
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 14 раз
Поблагодарили: 49 раз

Неадекватный POPUP()

Сообщение Игорь Столяров »

Я по этой причине принципиально медицинские сайты не гуглю.
Обязательно что-нибудь у себя найдешь ... ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Admin
Администратор
Сообщения: 3961
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Неадекватный POPUP()

Сообщение Admin »

В С++ BS_SPLITBUTTON работает так же. Можно попробовать влезть в потрошки, перед выводом POPUP чекать позицию окна POPUP (вроде есть события) и смещать куда нужно. Но уж больно геморройно сие.
Вложения
cpp2.png
cpp1.png
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7384
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 14 раз
Поблагодарили: 49 раз

Неадекватный POPUP()

Сообщение Игорь Столяров »

Да. :( Углубившись в понимание сути происходящего, я понял что пытаюсь делать
что-то не то, да еще и против ветра ...
explorer.jpg
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить