Страница 56 из 198
Clarion 11-12
Добавлено: 08 Август 2021, 11:33
Игорь Столяров
finsoftrz писал(а): 08 Август 2021, 10:25
это popup всегда открывается около кнопки
Так и привяжите PopUp() к кнопке.
Из Вашего описания непонятно к каким координатам идёт привязка.
Код: Выделить всё
Popup('...',?BPrint{Prop:XPos},?BPrint{Prop:YPos} - 2,True)
Тут есть другая, старая проблема - PopUp() сам выбирает направление открытия.

Но это от версии Clarion не зависит.
Clarion 11-12
Добавлено: 08 Август 2021, 12:22
finsoftrz
Рассказываю подробнее. Вот такой код:
Код: Выделить всё
fFeq# = ?Button
fFeqX# = fFeq#{PROP:Xpos}
fFeqY# = fFeq#{PROP:Ypos}
fFeqW# = fFeq#{PROP:Width}
fFeqH# = fFeq#{PROP:Height}
zn# = popup('Пункт1|Пункт2',fFeqX#+fFeqW#/2,fFeqY#+fFeqH#/2,1)
Если этот код разместить под кнопкой в окне (на событии accept), то отрабатывается корректно. Если этот же код оформить в виде отдельной функции в другой dll (в той же не пробовал), то не работает. Причем координаты показывает правильно, но popup не позиционируется.
Прототип функции FsPopUp(long pcontrol, string pstr), long.
Код для простоты такой:
Код: Выделить всё
fFeq# = pcontrol
fFeqX# = fFeq#{PROP:Xpos}
fFeqY# = fFeq#{PROP:Ypos}
fFeqW# = fFeq#{PROP:Width}
fFeqH# = fFeq#{PROP:Height}
zn# = popup('Пункт1|Пункт2',fFeqX#+fFeqW#/2,fFeqY#+fFeqH#/2,1)
return(zn#)
Clarion 11-12
Добавлено: 08 Август 2021, 12:49
SergioRaguzini
Игорь Столяров писал(а): 28 Июнь 2021, 20:54
....я использую текущие версии Clarion и у меня на это пять причин ...
------------------------------------------------------------------------------------------------
1. Современный интерфейс приложений. Интерфейс аля XP юзеры избалованные смартфонами не воспринимают
....
Привет Всем!
К сожалению Example из комплекта Clarion практически не меняются от версии к версии, базовые примеры app наверное остались еще с
Сlarion 2.0 - и в С11 все те же
People и
School и интерфейсы в них те же, просто скомпилированные в новой среде. Я в некоторых приложениях использую украшательство
3rdParty (
Noyantis, CoolFrames, Icetips Power XP и т.д.). Разумеется, обязательно подключаю Manifest. PullDown-меню вроде тоже пока не изжило себя и присутствует в большинстве современных приложений (хотя появилось еще в Dos)...
Коллеги, поделитесь примером (скрином или ссылкой на свою или некую стороннюю программу), которая на сегодняшней день является, на ваш взгляд, не плохой реализацией современного интерфейса выполненного средствами Clarion.
Спасибо
Clarion 11-12
Добавлено: 08 Август 2021, 13:06
finsoftrz
Ну так Memo Fora.

Clarion 11-12
Добавлено: 08 Август 2021, 13:08
finsoftrz
В догонку по багу с popup. Если процедуру из другой dll скопировать в ту же, откуда вызываем, то работает корректно.
То есть, не совсем они ничего не делали в рантайме с11.

Clarion 11-12
Добавлено: 08 Август 2021, 13:13
finsoftrz
Вот как такое может быть... И как обойти, с ходу не в голову не приходит.
Clarion 11-12
Добавлено: 08 Август 2021, 13:31
Игорь Столяров
finsoftrz писал(а): 08 Август 2021, 12:22
же код оформить в виде отдельной функции в другой dll
Даже не буду извиняться, что сам до такого не додумался когда писал ответ !

У нас есть такой код - никаких проблем, работает корректно и в C6 и в C11.1.
Вызов POPUP() как в моём примере в предыдущем сообщении.
finsoftrz писал(а): 08 Август 2021, 12:22
zn# = popup('Пункт1|Пункт2',fFeqX#+fFeqW#/2,fFeqY#+fFeqH#/2,1)
Здесь вопрос в том, что координаты устанавливаются относительно текущего окна
(are treated as relative to the upper left corner of the active window's client area)
Вы уверены, что у Вас в другой DLL окно не меняется ?
Потому, что цифры координат кнопки напрямую не определяют положение POPUP().
Попробуйте проверить TARGET до вызова и внутри процедуры.
Возможно есть смысл передать в процедуру Window окна и выполнить SetTARGET(Window), а потом снять.
Clarion 11-12
Добавлено: 08 Август 2021, 13:44
Губин Игорь
Игорь Столяров писал(а): 08 Август 2021, 13:31
Вы уверены, что у Вас в другой DLL окно не меняется ?
Потому, что цифры координат кнопки напрямую не определяют положение POPUP().
Попробуйте проверить TARGET до вызова и внутри процедуры.
Возможно есть смысл передать в процедуру Window окна и выполнить SetTARGET(Window), а потом снять.

Clarion 11-12
Добавлено: 08 Август 2021, 13:45
finsoftrz
Окно не меняется. Уверен. Там его вообще нет.
SetTarget пробовал, не влияет.
Еще раз обращу внимание. Координаты переданного контрола определяются корректно. Я их сравнил с прямым вызовом popup. И я один в один скопировал процедуру из второй dll в первую, через txa. Таже самая процедура, размещенная в первой dll, работает корректно.
Игорь, а Вы уверены, что у Вас подобная процедура в другой dll, а не в той же самой, откуда вызываете?
Clarion 11-12
Добавлено: 08 Август 2021, 14:08
finsoftrz
Попробовал передать ссылку на окно, как параметр, и сделать settarget на него, ничего не изменилось.
Clarion 11-12
Добавлено: 08 Август 2021, 14:12
Игорь Столяров
finsoftrz писал(а): 08 Август 2021, 13:45
что у Вас подобная процедура в другой dll, а не в той же самой, откуда вызываете?
Конечно. Это отдельная DLL в которой находятся отчёты и собственно процедура POPUP() через которую они вызываются.
Более того - таких мест много и в разных программах. Но есть один момент. У нас нажимается не BOTTON, а CHECKBOX
(что показать удержание нажатия кнопки на момент выбора из POPUP() меню)
Clarion 11-12
Добавлено: 08 Август 2021, 14:27
finsoftrz
Это, по идее, не должно влиять. Значит, чудо. Я своими глазами вижу, тут просто ошибиться негде. Переименование функции тоже не помогает.
Может, у Вас не просто popup, а через класс завернуто?
Clarion 11-12
Добавлено: 08 Август 2021, 14:31
Игорь Столяров
SergioRaguzini писал(а): 08 Август 2021, 12:49
не плохой реализацией современного интерфейса выполненного средствами Clarion
Это очень обидная тема. Дело в том, что оформительские возможности Clarion исторически убоги.
И далее каждый решает эти вопросы в меру возможностей и готов за свою точку зрения загрызть оппонента.

Но есть три основных направления:
1. Как деды учили. Здесь утверждается, что оформление программ - это вообще суета, главное функционал.
Из плюсов - классическая тема оформления одинаково убога везде, а это и есть стабильность !
Сюда же нужно отнести и использование перечисленных Вами прибамбасов сторонних разработчиков -
правда ими пользовались (и они выпускались) 15 лет назад.
2. Как SV придумал (это мы). Просто включаем штатный манифест и молимся, что бы всё всегда работало.
В общем-то красиво. Из минусов - последовательно отгребаем все проблемы попо-рукных программистов SV.
3. Сам себе дизайнер. Разработка своего уникального интерфейса, в т.ч. и через Windows API. Бывает круто.
Но обычно всё заканчивается на перекраске окон и навешивании графики. Всё блымает и это реально бесит.
Из минусов - нужно тестировать под всеми Windows и темами - однако трудоёмко для хорошего результата.
Clarion 11-12
Добавлено: 08 Август 2021, 14:38
Игорь Столяров
finsoftrz писал(а): 08 Август 2021, 14:27
Может, у Вас не просто popup, а через класс завернуто?
Нет. Просто вызов процедуры с popup() из DLL.
Но сам проект собран как Multi-DLL, т.е. RunTime Clarion и ABC классы линкуются в проект только один раз.
Если у Вас есть желание - соберите маленьки проект из пары DLL и окна с кнопкой - я его прогоню у себя.
Скорее всего вопрос решиться у Вас уже на этапе формирования такого примера ...

Clarion 11-12
Добавлено: 08 Август 2021, 14:40
finsoftrz
Игорь Столяров писал(а): 08 Август 2021, 14:12
finsoftrz писал(а): 08 Август 2021, 13:45
что у Вас подобная процедура в другой dll, а не в той же самой, откуда вызываете?
Конечно. Это отдельная DLL в которой находятся отчёты и собственно процедура POPUP() через которую они вызываются.
Более того - таких мест много и в разных программах. Но есть один момент. У нас нажимается не BOTTON, а CHECKBOX
(что показать удержание нажатия кнопки на момент выбора из POPUP() меню)
Единственное, что мне приходит в голову, это разные билды клариона. Я тестирую на 11.0.13505. Возможно, Вы на более позднем смотрите, и там этот баг пофиксили.