Clarion 11-12

Clarion, Clarion 7

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

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

Clarion 11-12

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

finsoftrz писал(а): 08 Август 2021, 10:25 это popup всегда открывается около кнопки
Так и привяжите PopUp() к кнопке.
Из Вашего описания непонятно к каким координатам идёт привязка.

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

   Popup('...',?BPrint{Prop:XPos},?BPrint{Prop:YPos} - 2,True)
Тут есть другая, старая проблема - PopUp() сам выбирает направление открытия. :(
Но это от версии Clarion не зависит.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Clarion 11-12

Сообщение 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#)
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
SergioRaguzini
Старожил
Сообщения: 236
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край
Благодарил (а): 6 раз

Clarion 11-12

Сообщение 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.

Спасибо
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Clarion 11-12

Сообщение finsoftrz »

Ну так Memo Fora. :-)
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Clarion 11-12

Сообщение finsoftrz »

В догонку по багу с popup. Если процедуру из другой dll скопировать в ту же, откуда вызываем, то работает корректно.
То есть, не совсем они ничего не делали в рантайме с11. :-)
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Clarion 11-12

Сообщение finsoftrz »

Вот как такое может быть... И как обойти, с ходу не в голову не приходит.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Clarion 11-12

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

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), а потом снять.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2329
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 18 раз

Clarion 11-12

Сообщение Губин Игорь »

Игорь Столяров писал(а): 08 Август 2021, 13:31 Вы уверены, что у Вас в другой DLL окно не меняется ?
Потому, что цифры координат кнопки напрямую не определяют положение POPUP().
Попробуйте проверить TARGET до вызова и внутри процедуры.

Возможно есть смысл передать в процедуру Window окна и выполнить SetTARGET(Window), а потом снять.
:!:
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Clarion 11-12

Сообщение finsoftrz »

Окно не меняется. Уверен. Там его вообще нет.
SetTarget пробовал, не влияет.
Еще раз обращу внимание. Координаты переданного контрола определяются корректно. Я их сравнил с прямым вызовом popup. И я один в один скопировал процедуру из второй dll в первую, через txa. Таже самая процедура, размещенная в первой dll, работает корректно.

Игорь, а Вы уверены, что у Вас подобная процедура в другой dll, а не в той же самой, откуда вызываете?
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Clarion 11-12

Сообщение finsoftrz »

Попробовал передать ссылку на окно, как параметр, и сделать settarget на него, ничего не изменилось.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Clarion 11-12

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

finsoftrz писал(а): 08 Август 2021, 13:45 что у Вас подобная процедура в другой dll, а не в той же самой, откуда вызываете?
Конечно. Это отдельная DLL в которой находятся отчёты и собственно процедура POPUP() через которую они вызываются.
Более того - таких мест много и в разных программах. Но есть один момент. У нас нажимается не BOTTON, а CHECKBOX
(что показать удержание нажатия кнопки на момент выбора из POPUP() меню)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Clarion 11-12

Сообщение finsoftrz »

Это, по идее, не должно влиять. Значит, чудо. Я своими глазами вижу, тут просто ошибиться негде. Переименование функции тоже не помогает.
Может, у Вас не просто popup, а через класс завернуто?
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Clarion 11-12

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

SergioRaguzini писал(а): 08 Август 2021, 12:49 не плохой реализацией современного интерфейса выполненного средствами Clarion
Это очень обидная тема. Дело в том, что оформительские возможности Clarion исторически убоги.
И далее каждый решает эти вопросы в меру возможностей и готов за свою точку зрения загрызть оппонента. :)
Но есть три основных направления:

1. Как деды учили. Здесь утверждается, что оформление программ - это вообще суета, главное функционал.
Из плюсов - классическая тема оформления одинаково убога везде, а это и есть стабильность ! :)
Сюда же нужно отнести и использование перечисленных Вами прибамбасов сторонних разработчиков -
правда ими пользовались (и они выпускались) 15 лет назад.

2. Как SV придумал (это мы). Просто включаем штатный манифест и молимся, что бы всё всегда работало.
В общем-то красиво. Из минусов - последовательно отгребаем все проблемы попо-рукных программистов SV.

3. Сам себе дизайнер. Разработка своего уникального интерфейса, в т.ч. и через Windows API. Бывает круто.
Но обычно всё заканчивается на перекраске окон и навешивании графики. Всё блымает и это реально бесит.
Из минусов - нужно тестировать под всеми Windows и темами - однако трудоёмко для хорошего результата.
Последний раз редактировалось Игорь Столяров 08 Август 2021, 14:41, всего редактировалось 1 раз.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7373
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Clarion 11-12

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

finsoftrz писал(а): 08 Август 2021, 14:27 Может, у Вас не просто popup, а через класс завернуто?
Нет. Просто вызов процедуры с popup() из DLL.
Но сам проект собран как Multi-DLL, т.е. RunTime Clarion и ABC классы линкуются в проект только один раз.

Если у Вас есть желание - соберите маленьки проект из пары DLL и окна с кнопкой - я его прогоню у себя.
Скорее всего вопрос решиться у Вас уже на этапе формирования такого примера ... ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4615
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Clarion 11-12

Сообщение finsoftrz »

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