Класс PopUP Hint окон с примером

Программы на Clarion, шаблоны, библиотеки и пр.

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

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

Класс PopUP Hint окон с примером

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

Кстати, да. Я заметил, что сейчас пошла мода на звуковое информирование.
Например в том же OZON'е когда заказ получаешь - его данные "проговаривают" громко.
Видимо "чтецы" с успешно сданным ЕГЭ уже вышли на работу ! 🤷‍♀️
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
Admin
Администратор
Сообщения: 4066
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 72 раза
Поблагодарили: 50 раз
Контактная информация:

Класс PopUP Hint окон с примером

Сообщение Admin »

finsoftrz писал(а): 08 Декабрь 2025, 12:15 Что-то мне кажется, через день работы этот плюс 1 начнет во сне приходить. :idied:
Без проблем могу поменять на любой сигнал. Я спрашивал. Все устраивает.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 6164
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 26 раз
Поблагодарили: 92 раза

Класс PopUP Hint окон с примером

Сообщение finsoftrz »

Раньше beep использовали с разной длительностью/частотой. Сейчас модно голосовые сообщения. Это делает всех вокруг счастливыми, так как думают, что у них тоже используется ИИ, и они идут в ногу с временем. :lol:
Мне тут очки массажеры подарили. Прикольно так, надеваешь, они тебя приветствуют приятным женским голосом, потом начинают надуваться и спускаться минут 15, а в конце спасибо говорят, что выбрал путь заботы о себе. :D
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8812
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 40 раз
Поблагодарили: 155 раз

Класс PopUP Hint окон с примером

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

Всем привет !

На основании штатного примера класса, сделал процедуру для показа быстрого сообщения в любом месте программы.
Всё работает, код простой, может быть будет кому-нибудь полезно для теста класса:

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

HintMess    Procedure(String sHintText,Long lBackgroundColor = Color:Orange,Long lFontColor = Color:White)
Hint        cHint
HintParams  Like(MsgOptions)
bFlag       Byte(False)
Action      Long,Auto
NotifyPar   Long,Auto
MyWin       Window,AT(,,1,1).  

  Code
  Open(MyWin)
  MyWin{Prop:Hide} = True  
  
  ! Запомним HWMD активного окна
  Hint.HwndActiveWindow = 0{Prop:Handle}
  
  Accept
    Case Event()
    Of Event:Notify
       If Notification(Action,,NotifyPar)
          If Action = NOTIFY:SetFocusHint
             hint.Set_Active_Windows()             
             If bFlag then Post(Event:CloseWindow) else bFlag = True.
          end
       end
       
    Of Event:OpenWindow   
       
       Clear(HintParams)
       HintParams.MainThead        = Thread()
       HintParams.AbsolutePosition = WND:CENTER
       HintParams.CloseTimeOut     = 3
       HintParams.Cascade          = 1       
       HintParams.Round            = 30
       HintParams.Fade             = 1       
       HintParams.BackgroundColor  = lBackgroundColor
       HintParams.FontColor        = lFontColor
       HintParams.FontSize         = 20
       HintParams.FontStyle        = 400
       HintParams.FontName         = 'Arial Narrow'
       HintParams.CloseImage       = 'none'       
       Hint.Show(Clip(sHintText),Address(HintParams))       
       
    Of Event:CloseWindow
       Hint.CloseAll()
    end
  end
И позвольте высказать моё сугубо субъективное мнение: это вообще не то, что я хотел бы видеть в своих программах.
Ни по размещению, ни по оформлению, ни по содержанию окна с быстрым сообщением ... :(

Я сам понимаю, что

36576784_1.jpg
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
SergioRaguzini
Ветеран
Сообщения: 324
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край
Благодарил (а): 49 раз
Поблагодарили: 1 раз

Класс PopUP Hint окон с примером

Сообщение SergioRaguzini »

Привет Всем!
Игорь Столяров писал(а): 24 Август 2026, 11:00 ...сделал процедуру для показа быстрого сообщения в любом месте программы...
если не сложно, выложите простой app-пример
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8812
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 40 раз
Поблагодарили: 155 раз

Класс PopUP Hint окон с примером

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

SergioRaguzini писал(а): 18 Сентябрь 2026, 9:37 если не сложно, выложите простой app-пример
Вы уже можете её юзать в классе HONEST (Честный ЗНАК).
У нас всё предельно просто. Без всяких там наворотов и настроек вызываем:

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

  Honest::FastMess(3,'Не удалось получить токен доступа !')
опционально мона изменить время экспозиции сообщения в секундах:

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

  Honest::FastMess(4,'Выбранные товары добавлены в корзину',1)
И обратите внимание, что быстрое сообщение самонастраивается на текущий системный размер шрифта.
Т.е. при динамическом масштабировании интерфейса (например в CapeSoft AnyFonts) всё будет работать чётко ! :D
Последний раз редактировалось Игорь Столяров 19 Сентябрь 2026, 8:01, всего редактировалось 9 раз.
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
SergioRaguzini
Ветеран
Сообщения: 324
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край
Благодарил (а): 49 раз
Поблагодарили: 1 раз

Класс PopUP Hint окон с примером

Сообщение SergioRaguzini »

Игорь Столяров писал(а): 18 Сентябрь 2026, 9:57 [Вы уже можете её юзать в классе HONEST (Честный ЗНАК)....
Спасибо!
Аватара пользователя
SergioRaguzini
Ветеран
Сообщения: 324
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край
Благодарил (а): 49 раз
Поблагодарили: 1 раз

Класс PopUP Hint окон с примером

Сообщение SergioRaguzini »

Привет Всем!

Посмотрел оба варианта класса, мне понравились оба, но, как мне субъективно показалось, пример Игоря (ввиде процедуры Honest::FastMess)
Игорь Столяров писал(а): 24 Август 2026, 11:00 сделал процедуру для показа быстрого сообщения в любом месте программы
более прост в использовании (большего и не надо).

Вячеслав ранее в своем сообщении привел пример из 1С
finsoftrz писал(а): 07 Декабрь 2025, 11:52 В 1С8 хорошо сделана работа с ошибками при заполнении формы. Как я понимаю, с помощью данного класса можно изобразить подобное (сноски оформляются в виде картинок фона).
...
Как мне кажется, если чуть развить эту "PopUP Hint"-тему, то мы можем получить нечто подобное.
Я, (к сожалению не помню автора) более лет 20 назад увидел простой шаблон выделения рамкой активного контрола, который периодически использую:

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

#!----------------------------------------------------------------
#TEMPLATE  (ActiveBox, '2002')
#! =============================================
#CONTROL (ActiveBox, 'Выделение активного control')
#! =============================================
#DISPLAY ('')
#DISPLAY ('Выделяет активный control прямоугольником.')
#DISPLAY ('')
  CONTROLS
    BOX,AT(3,3,5,5),USE(?ActiveBox),ROUND,LINEWIDTH(1),HIDE
  END
#!
#AT (%BeforeAccept)
  ?ActiveBox{prop:HIDE} = ''
  ?ActiveBox{prop:ROUND} = 1
 ! ?ActiveBox{prop:Color} = COLOR:InActiveCaption
  ?ActiveBox{prop:LINEWIDTH} = 2
#ENDAT
#! 
#! --- 'CASE EVENT() structure, before generated code'
#AT (%EventCaseBeforeGenerated)
  of event:Selected
    contr# = selected()
    ?ActiveBox{prop:XPos}  = contr#{prop:XPos}-2
    ?ActiveBox{prop:YPos}  = contr#{prop:YPos}-2
    ?ActiveBox{prop:Width} = contr#{prop:Width}+4
    ?ActiveBox{prop:Height}= contr#{prop:Height}+4
#ENDAT
в этом шаблоне присутствуют координаты выделенного контрола. Т.о. если применять этот шаблон (или его принцип получения координат) в экранной форме и при возникновении некой ошибки со стороны пользоавтеля, можно делать SELECT(?control_Name), и далее (если чуть модернизировать процедуру Honest::FastMess) передавать в нее координаты для применения в "SetPosition(FastWin...."

В результате (чтобы было понятнее, я чуть подправил скрин приведенный Вячеславом) мы можем получить что-то подобное:
picture_01.png
picture_01.png (9.91 КБ) 82 просмотра
Хотелось бы узнать мнение - расширение, в процедуре, Honest::FastMess принимаемых параметров для позиционирования Hint-окна - это оптимальный вариант или же есть более рациональное решение?

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

Класс PopUP Hint окон с примером

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

SergioRaguzini писал(а): 30 Сентябрь 2026, 20:18 пример Игоря (ввиде процедуры Honest::FastMess) более прост в использовании (большего и не надо).
Собственно это мне и хотелось сделать.
- Просто сообщение в центре экрана / для MDI в рабочей области AppFrame;
- Сообщение всегда одно (успеть бы его прочитать без ступора !);
- Размер сообщение зависим от динамического масштаба самого приложения (AnyFont и т.д.);
- Без прилинковки к проекту LIB непонятного возраста, происхождения и поддержки;
- Субъективно моё мнение: 100 строк кода более чем достаточно, что бы тупо показать строку сообщения. :D

Если Вы видите красивую идею - не бойтесь делать её реализацию под свои проекты и потребности.
Хотите привязать сообщение FastMess() к полю ? Уберите центровку окна и выставьте координаты - это обычный Window.
Последний раз редактировалось Игорь Столяров 01 Октябрь 2026, 6:48, всего редактировалось 1 раз.
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 6164
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 26 раз
Поблагодарили: 92 раза

Класс PopUP Hint окон с примером

Сообщение finsoftrz »

Как правило, на полях ввода мы используем обычный тултип с краткой информацией о назначении этого поля.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
SergioRaguzini
Ветеран
Сообщения: 324
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край
Благодарил (а): 49 раз
Поблагодарили: 1 раз

Класс PopUP Hint окон с примером

Сообщение SergioRaguzini »

finsoftrz писал(а): 30 Сентябрь 2026, 21:39 Как правило, на полях ввода мы используем обычный тултип с краткой информацией о назначении этого поля.
Но ведь стандартными средствами Clarion управление tooltip весьма ограничено (разве что показывать или не показывать), поэтому, в качестве подсказки tooltip как инструмент удобен (да и то, если пользователь понимает(хотя, на практике, даже не всегда о таком знает), что для вызова tooltip нужно навести курсор на контрол и задержатся там), а вот для отображения ошибки не очень...
Может быть, можно как-то управлять принудительным вызовом с позиционированием и задержкой (в некоторых языках можно управлять задержкой)?
Ответить