Страница 1 из 2
Неадекватный POPUP()
Добавлено: 06 Март 2015, 14:58
Игорь Столяров
Привет всем !
Есть непреодолимое желание сделать в MDI окне кнопку с выпадающим меню для выбора операции.
Т.к. в Clarion такой интерфейсный элемент отсутствует напрочь, создаем простой BUTTON (или CHECKBOX)
и вешаем на него что-то вроде: Popup('Пункты меню для выбора',?Button{Prop:XPos},?Button{Prop:YPos} - 2,True)
Все хорошо, за исключением того, что PopUp меню открывается в непредсказуемом направлении (вверх или вниз)
в зависимости от размера и расположения MDI окна ...
Можно как-либо зафиксировать направление открытия Popup() меню ?
Заранее спасибо за любые идеи.
Может быть можно как-то по другому сделать кнопку с выпадающим по нажатию меню ?
Неадекватный POPUP()
Добавлено: 06 Март 2015, 15:47
kreator
А если жёстко задать координаты левого верхнего угла, толку мало? В принципе ещё можно считать эти координаты в зависимости от условий. "Непредсказуемое" поведение popup-меню происходит из-за того, что оно не влезает полностью в окно.
Неадекватный POPUP()
Добавлено: 06 Март 2015, 15:52
Игорь Столяров
Причины по которым меняется направление открытия - понятны.
Но предположим, кнопка находится в верхнем левом угле окна, предполагая, что PopUp() будет открываться вниз,
где всегда для его открытия достаточно места (поверх MDI окна). Но нет ! Если окно находится посреди экрана -
может открыться и вверх, тем самым портя всю задумку дизайна ...
Координата открытия задается - с этим проблем нет.
Проблема в том, что она может оказаться как координатой левого верхнего, так и левого нижнего угла меню.
А по человечески, ведь хочется стабильности ...
Я почему спросил ... например в AppFrame (точнее в структуре MENU) выпадающие меню никогда не открываются вверх ...
Да, у них другая проблема в C91 с горизонтальной координатой открытия, но это совсем другая история ...
Неадекватный POPUP()
Добавлено: 06 Март 2015, 17:24
gopstop2007
а взять параметры кнопки-чекета для popup-a и передать их popup не подойдет? Когда то, так делал и получал красивое открытие popup-a привязанное к кнопке
Неадекватный POPUP()
Добавлено: 06 Март 2015, 17:24
Admin
CFCPopup до упора почти вниз открывает...
Неадекватный POPUP()
Добавлено: 06 Март 2015, 17:43
Игорь Столяров
gopstop2007 писал(а):а взять параметры кнопки-чекета для popup-a и передать их popup не подойдет?
Я извиняюсь, а можно для тех кто в танке пояснить таинство этого действия ? Заранее спасибо.
Если оно конечно, чем то отличается от того, что я написал в первом сообщении.
( Popup('Пункты меню для выбора',?Button{Prop:XPos},?Button{Prop:YPos} - 2,True) )
Неадекватный POPUP()
Добавлено: 06 Март 2015, 22:49
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)
может поможет
Неадекватный POPUP()
Добавлено: 06 Март 2015, 23:05
Игорь Столяров
Спасибо. Проблемы те же.
Я так понимаю, что это очень старый пример, который реализует через API привязку к координатам окна.
Сейчас такая возможность есть и у стандартного PopUp() - последний параметр.
Думаю, что указанная мною "проблема" вызвана тем, что я пытаюсь задействовать PopUp() не по назначению.
Его задача - раскрытие контекстного меню по координатам мыши. Но более чем уверен, что можно как-то
выключить его функционал по интеллектуальному выбору направления открытия ...
Неадекватный POPUP()
Добавлено: 06 Март 2015, 23:14
Дед Пахом
Случаем не на планшете тестируешь?
Неадекватный POPUP()
Добавлено: 06 Март 2015, 23:19
Игорь Столяров
Нет. Но планшет есть могу, попробовать. Будет разница ?
Неадекватный POPUP()
Добавлено: 06 Март 2015, 23:29
gopstop2007
GetWindowRect(hWndControl, rcCtrl)
X# = POPUP('1|2|3', rcCtrl.Right, rcCtrl.Bottom)
Неадекватный POPUP()
Добавлено: 07 Март 2015, 0:05
Дед Пахом
Игорь Столяров писал(а): Нет. Но планшет есть могу, попробовать. Будет разница ?
Не, я как раз нагуглил такую проблему для Tablet PC, там это лечится кардинально в настройках девайса.
Неадекватный POPUP()
Добавлено: 07 Март 2015, 0:29
Игорь Столяров
Я по этой причине принципиально медицинские сайты не гуглю.
Обязательно что-нибудь у себя найдешь ...

Неадекватный POPUP()
Добавлено: 07 Март 2015, 1:18
Admin
В С++ BS_SPLITBUTTON работает так же. Можно попробовать влезть в потрошки, перед выводом POPUP чекать позицию окна POPUP (вроде есть события) и смещать куда нужно. Но уж больно геморройно сие.
Неадекватный POPUP()
Добавлено: 07 Март 2015, 8:36
Игорь Столяров
Да.

Углубившись в понимание сути происходящего, я понял что пытаюсь делать
что-то не то, да еще и против ветра ...