AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны

Clarion, Clarion 7

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

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

AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны

Сообщение Дед Пахом »

Сколько вас, кто купил AS? А блог один Губин ведёт.
С уважением, ДП
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны

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

Дед Пахом писал(а): 12 Март 2022, 12:41 Сколько вас, кто купил AS? А блог один Губин ведёт.
Люди делом заняты! :nr: Один я фигнёй маюсь :facepalm:

Дело в том, что один я, видимо, был уже морально готов к немедленному началу процесса. Да и выкладываю, далеко, не всё. Куча мелочёвки, которую надо учесть... Скажем, есть тонкости в изменениях цветов стилей в таблице.

Плюс, я иду шагами, отрабатывая методику на мелких приложениях, откуда потом перетаскиваю методику в основное. Вот и появляется информация.

Но резюме: фактически, всё равно, получается два разных приложения в одном APP. Внутренняя логика одна, а вот с фишками возникает масса различий, хорошо, что спасает массированное применение шаблонов и классов для повторяющихся элементов.
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны

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

Очередной штурм флешей, атака отбита!

FileDropCombo работает некорректно
1. не отрабатывает ReadOnly на поле ввода
2. выпадающий спискок не прокручивается, как дошли до верха или низа отображённого списка - он закрывается с выбором поля
Решение
Всё заменено на FileDrop, который отрабатывает правильно

Сложности с отображением "бесконечного" прогресса при выполнении длительных операций и отображения после этого смены содержимого Queue в поле List (только после клика на поле, принудительный Display не помогал)
Решение
Заменено с помощью шаблонов и условной компиляции на встроенный Progress от AnyScreen. Не так красиво, сложности с "гладкостью" бегущего поля (особенности его логики), но результат равносилен RefreshWindow, т.е., после завершения процесса все поля обновились, всё в полном порядке.

Непонятки с сохранением на компьютер пользователя результатов экспорта в файл. Не удаётся никак заставить открыть на стороне клиента FileDialog, сразу всё сохраняется в загрузках с именем и расширением заданными при генерации.
Решение
Решил забить до перехода к тестированию на выделенном сервере, некритично.

Дело к вечеру. :nr:
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны

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

Вечер Бородино...

AnyScreen не совсем корректно отрабатывает (помните историю с уходящим на задний план окном?) следующую конструкцию

В одном из потоков выполняем Start(NewThread)

В NewThread запускаем потоковую обработку

Program1() ! Потоковый процесс
Program2() ! Окно просмотра результатов

Program1:
Open(WindowProcess) ! Показываем процесс обработки
Loop
AnyScreen:Display()
End
Close(WindowProcess))

Program2
Обычный Window с List, Button и т.п.

Так вот, окно открытое в Program2 уходит на задний план, приходится на него тыкать.
Лечится следующим кодом в After Window Opening

IF AnyScreen::Active() Then
AnyScreen:DisplayThread(AnyScreen:CurrentThread())
Window{PROP:Active} = TRUE
AnyScreen:Display()
End

Я-то использую Omit и Compile, но только потому, что проект один, а вот задача получается специализированной
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны

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

Борьба продолжается...

AnyScreen вылетает при пересвоении списка через текст.
Т.е.

?List{PROP:From} = 'Первый|#1|Третий|#3'
...
?List{PROP:From} = 'Первый|#1|Второй|#2|Третий|#3'
...

С вероятностью, практически, 100% приведёт к вылету по памяти. Или переходить на работу с Queue, но там свои тараканы при такой динамике, или играться с с разными списками и Hide/Unhide

5 часов убил на локализацию...
Это я только кажусь дураком! На самом деле я полный идиот!
kreator
✯ Ветеран ✯
Сообщения: 4958
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны

Сообщение kreator »

Губин Игорь писал(а): 26 Март 2022, 20:35 AnyScreen вылетает при пересвоении списка через текст.
Посмотрел у себя. Вообще не присваивает. Вот такая конструкция не работает:

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

?LOC:PassportType{prop:From} = 'Все|#0|-1|' & COLOR:White & '|-1|-1|Серийные|#1|-1|' & COLOR:KreatoRSecondBGNormal & '|-1|-1|Доработки|#2|-1|' & COLOR:White & '|-1|-1'
Правда, я обновление ещё не накатил.
В любом случае надо писать им. Всё менять в сотнях мест?
We are hard at work… for you. :)
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны

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

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

DisplayPoiskParam1   BYTE                                  ! 
DisplayPoiskparam2   BYTE                                  ! 

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

                LIST,AT(391,31,275,10),USE(DisplayPoiskParam1),FONT('Arial',10,,FONT:regular, |
                  CHARSET:CYRILLIC),LEFT(-5),DROP(5),HIDE,IMM,#ORDINAL(21)
                LIST,AT(391,31,275,10),USE(DisplayPoiskparam2),FONT('Arial',10,,FONT:regular, |
                  CHARSET:CYRILLIC),LEFT(-5),DROP(5),HIDE,IMM,#ORDINAL(22)

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

  ?DisplayPoiskParam1{PROP:From} = All(' ',5) & GetINIString('FindChemWindow','?DisplayPoiskParam:Radio0_Text','') & '|#1|' & | 
                  All(' ',5) & GetINIString('FindChemWindow','?DisplayPoiskParam:Radio2_Text','') & '|#3|' & | 
                  All(' ',5) & GetINIString('FindChemWindow','?DisplayPoiskParam:Radio3_Text','') & '|#4|'
  ?DisplayPoiskParam2{PROP:From} = All(' ',5) & GetINIString('FindChemWindow','?DisplayPoiskParam:Radio0_Text','') & '|#1|' & | 
                      All(' ',5) & GetINIString('FindChemWindow','?DisplayPoiskParam:Radio1_Text','') & '|#2|' & | 
                      All(' ',5) & GetINIString('FindChemWindow','?DisplayPoiskParam:Radio2_Text','') & '|#3|' & | 
                      All(' ',5) & GetINIString('FindChemWindow','?DisplayPoiskParam:Radio3_Text','') & '|#4|'
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны

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

kreator писал(а): 26 Март 2022, 20:59 В любом случае надо писать им. Всё менять в сотнях мест?
Наверное. Если честно, то мне сейчас некогда писать, весь в отладке... Уже вижу финишную ленточку.
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны

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

Мелкие стычки партизанских отрядов с французскими фуражирами

Notify, в принципе, работает, но как-то странно. Все проблемы решило

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

IF AnyScreen:Active() Then
     AnyScreen:Notify(...)
Else
     Notify(...)
End
Или нечто аналогичное (я продпочитаю OMIT/COMPILE в силу широкого использования шаблонов)

Одновременно рекомендую использование AnyScreen:DisplayThread(...) для вящей красоты работы

Резюме 1: там где есть функция AnyScreen, аналогичная используемой в десктопном варианте, лучше использовать её.

Резюме 2: при работе с AnyScreen приложение гораздо жёстче реагирует на всякие вольности в коде, влияющие на работу с окнами и тем, что на них отображается - регулярные вылетания по памяти или непонятное поведение там, где в десктопной версии ничего не случалось. Но все эти вылетания, как показали разборки, связаны с использованием недокументированных фич на грани фола или, будем честны, слишком вольного применения особенностей языка.
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3130
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны

Сообщение Дед Пахом »

Губин Игорь писал(а): 28 Март 2022, 13:17 Резюме 1: там где есть функция AnyScreen, аналогичная используемой в десктопном варианте, лучше использовать её
Я бы тогда наделал обёрток типа

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

MyNotify  PROCEDURE(...)
  CODE
  IF AnyScreen:Active) Then
     AnyScreen:Notify(...) 
  Else
     Notify(...)
 End
С уважением, ДП
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны

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

Дед Пахом писал(а): 28 Март 2022, 13:37 Я бы тогда наделал обёрток типа
1. На цвет и вкус... :P
2. У меня так и сделано :lol: там, где нет кодогенерации через шаблоны :nr:

Но я здесь лишь даю рекомендации и описываю проблемы, а как реализовывать конкретно каждый пусть решает сам.
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны

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

Мелкие стычки с мародёрами (забыл описать)

Если используется смена стилей в List, то не все цвета нормально отображаются. К примеру Gray:Text отыгрывает только если фон не белый. Пришлось для случая AnyScreen менять и стиль шрифта (я использовал зачёркнутый)
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны

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

Русская армия оставила Москву и под прикрытием арьергарда отступила к Тарутино

1. Для меню фрейма не работают {PROP:Disable}

2. желающим тупо потыкать -
http://95.183.9.36/app/WinSteel%2010%20Rus
Login: test_111001
Пароль такой же

P.S. Кстати, там, при желании можно загрузить и почитать руководство пользователя на 100 страницах :idied: , чтобы понимать о чём речь :lol:
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны

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

Сделал на сервере тестовое приложение из Invoice из примеров (без изменений). Открыл всем желающим. Практика показывает, что нагрузка на сервер заметно меньше того, что порождал App Broker. Сервер работает устойчиво.
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны

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

Сражение за Малоярославец выиграно. Программы уходят в коммерческую эксплуатацию. :cat:

Из неожиданных плюсов: в программе есть потоковое чтение больших объёмов данных (раз за сессию), так, из-за кеширования Windows, этот процесс проходит заметно быстрее, чем на локальном компьютере.
Это я только кажусь дураком! На самом деле я полный идиот!
Ответить