Неадекватный POPUP()
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию 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() меню ?
Заранее спасибо за любые идеи.
Может быть можно как-то по другому сделать кнопку с выпадающим по нажатию меню ?
Есть непреодолимое желание сделать в MDI окне кнопку с выпадающим меню для выбора операции.
Т.к. в Clarion такой интерфейсный элемент отсутствует напрочь, создаем простой BUTTON (или CHECKBOX)
и вешаем на него что-то вроде: Popup('Пункты меню для выбора',?Button{Prop:XPos},?Button{Prop:YPos} - 2,True)
Все хорошо, за исключением того, что PopUp меню открывается в непредсказуемом направлении (вверх или вниз)
в зависимости от размера и расположения MDI окна ...
Можно как-либо зафиксировать направление открытия Popup() меню ?
Заранее спасибо за любые идеи.
Может быть можно как-то по другому сделать кнопку с выпадающим по нажатию меню ?
За теми кто отстал - не возвращаться. (С) Кодекс
-
- ✯ Ветеран ✯
- Сообщения: 4987
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
Неадекватный POPUP()
А если жёстко задать координаты левого верхнего угла, толку мало? В принципе ещё можно считать эти координаты в зависимости от условий. "Непредсказуемое" поведение popup-меню происходит из-за того, что оно не влезает полностью в окно.
We are hard at work… for you.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7384
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 14 раз
- Поблагодарили: 49 раз
Неадекватный POPUP()
Причины по которым меняется направление открытия - понятны.
Но предположим, кнопка находится в верхнем левом угле окна, предполагая, что PopUp() будет открываться вниз,
где всегда для его открытия достаточно места (поверх MDI окна). Но нет ! Если окно находится посреди экрана -
может открыться и вверх, тем самым портя всю задумку дизайна ...
Координата открытия задается - с этим проблем нет.
Проблема в том, что она может оказаться как координатой левого верхнего, так и левого нижнего угла меню.
А по человечески, ведь хочется стабильности ...
Я почему спросил ... например в AppFrame (точнее в структуре MENU) выпадающие меню никогда не открываются вверх ...
Да, у них другая проблема в C91 с горизонтальной координатой открытия, но это совсем другая история ...
Но предположим, кнопка находится в верхнем левом угле окна, предполагая, что PopUp() будет открываться вниз,
где всегда для его открытия достаточно места (поверх MDI окна). Но нет ! Если окно находится посреди экрана -
может открыться и вверх, тем самым портя всю задумку дизайна ...
Координата открытия задается - с этим проблем нет.
Проблема в том, что она может оказаться как координатой левого верхнего, так и левого нижнего угла меню.
А по человечески, ведь хочется стабильности ...
Я почему спросил ... например в AppFrame (точнее в структуре MENU) выпадающие меню никогда не открываются вверх ...
Да, у них другая проблема в C91 с горизонтальной координатой открытия, но это совсем другая история ...
За теми кто отстал - не возвращаться. (С) Кодекс
-
- ✯ Ветеран ✯
- Сообщения: 1703
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
Неадекватный POPUP()
а взять параметры кнопки-чекета для popup-a и передать их popup не подойдет? Когда то, так делал и получал красивое открытие popup-a привязанное к кнопке
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
- Admin
- Администратор
- Сообщения: 3961
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Неадекватный POPUP()
CFCPopup до упора почти вниз открывает...
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Игорь Столяров
- Ветеран движения
- Сообщения: 7384
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 14 раз
- Поблагодарили: 49 раз
Неадекватный POPUP()
Я извиняюсь, а можно для тех кто в танке пояснить таинство этого действия ? Заранее спасибо.gopstop2007 писал(а):а взять параметры кнопки-чекета для popup-a и передать их popup не подойдет?
Если оно конечно, чем то отличается от того, что я написал в первом сообщении.
( Popup('Пункты меню для выбора',?Button{Prop:XPos},?Button{Prop:YPos} - 2,True) )
За теми кто отстал - не возвращаться. (С) Кодекс
-
- ✯ Ветеран ✯
- Сообщения: 1703
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
Неадекватный POPUP()
вот еле нашел пример с которого лепил в своей "солянке" нашел когда то на 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() не по назначению.
Его задача - раскрытие контекстного меню по координатам мыши. Но более чем уверен, что можно как-то
выключить его функционал по интеллектуальному выбору направления открытия ...
Я так понимаю, что это очень старый пример, который реализует через API привязку к координатам окна.
Сейчас такая возможность есть и у стандартного PopUp() - последний параметр.
Думаю, что указанная мною "проблема" вызвана тем, что я пытаюсь задействовать PopUp() не по назначению.
Его задача - раскрытие контекстного меню по координатам мыши. Но более чем уверен, что можно как-то
выключить его функционал по интеллектуальному выбору направления открытия ...
За теми кто отстал - не возвращаться. (С) Кодекс
- Игорь Столяров
- Ветеран движения
- Сообщения: 7384
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 14 раз
- Поблагодарили: 49 раз
Неадекватный POPUP()
Нет. Но планшет есть могу, попробовать. Будет разница ?
За теми кто отстал - не возвращаться. (С) Кодекс
-
- ✯ Ветеран ✯
- Сообщения: 1703
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
Неадекватный POPUP()
GetWindowRect(hWndControl, rcCtrl)
X# = POPUP('1|2|3', rcCtrl.Right, rcCtrl.Bottom)
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()
В С++ BS_SPLITBUTTON работает так же. Можно попробовать влезть в потрошки, перед выводом POPUP чекать позицию окна POPUP (вроде есть события) и смещать куда нужно. Но уж больно геморройно сие.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Игорь Столяров
- Ветеран движения
- Сообщения: 7384
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 14 раз
- Поблагодарили: 49 раз
Неадекватный POPUP()
Да. Углубившись в понимание сути происходящего, я понял что пытаюсь делать
что-то не то, да еще и против ветра ...
что-то не то, да еще и против ветра ...
За теми кто отстал - не возвращаться. (С) Кодекс