AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Дед Пахом
- Старичок
- Сообщения: 3133
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 10 раз
- Поблагодарили: 28 раз
- Контактная информация:
AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны
Сколько вас, кто купил AS? А блог один Губин ведёт.
С уважением, ДП
- Губин Игорь
- ✯ Ветеран ✯
- Сообщения: 2329
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Поблагодарили: 18 раз
AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны
Люди делом заняты! Один я фигнёй маюсь
Дело в том, что один я, видимо, был уже морально готов к немедленному началу процесса. Да и выкладываю, далеко, не всё. Куча мелочёвки, которую надо учесть... Скажем, есть тонкости в изменениях цветов стилей в таблице.
Плюс, я иду шагами, отрабатывая методику на мелких приложениях, откуда потом перетаскиваю методику в основное. Вот и появляется информация.
Но резюме: фактически, всё равно, получается два разных приложения в одном APP. Внутренняя логика одна, а вот с фишками возникает масса различий, хорошо, что спасает массированное применение шаблонов и классов для повторяющихся элементов.
Это я только кажусь дураком! На самом деле я полный идиот!
- Губин Игорь
- ✯ Ветеран ✯
- Сообщения: 2329
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Поблагодарили: 18 раз
AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны
Очередной штурм флешей, атака отбита!
FileDropCombo работает некорректно
1. не отрабатывает ReadOnly на поле ввода
2. выпадающий спискок не прокручивается, как дошли до верха или низа отображённого списка - он закрывается с выбором поля
Решение
Всё заменено на FileDrop, который отрабатывает правильно
Сложности с отображением "бесконечного" прогресса при выполнении длительных операций и отображения после этого смены содержимого Queue в поле List (только после клика на поле, принудительный Display не помогал)
Решение
Заменено с помощью шаблонов и условной компиляции на встроенный Progress от AnyScreen. Не так красиво, сложности с "гладкостью" бегущего поля (особенности его логики), но результат равносилен RefreshWindow, т.е., после завершения процесса все поля обновились, всё в полном порядке.
Непонятки с сохранением на компьютер пользователя результатов экспорта в файл. Не удаётся никак заставить открыть на стороне клиента FileDialog, сразу всё сохраняется в загрузках с именем и расширением заданными при генерации.
Решение
Решил забить до перехода к тестированию на выделенном сервере, некритично.
Дело к вечеру.
FileDropCombo работает некорректно
1. не отрабатывает ReadOnly на поле ввода
2. выпадающий спискок не прокручивается, как дошли до верха или низа отображённого списка - он закрывается с выбором поля
Решение
Всё заменено на FileDrop, который отрабатывает правильно
Сложности с отображением "бесконечного" прогресса при выполнении длительных операций и отображения после этого смены содержимого Queue в поле List (только после клика на поле, принудительный Display не помогал)
Решение
Заменено с помощью шаблонов и условной компиляции на встроенный Progress от AnyScreen. Не так красиво, сложности с "гладкостью" бегущего поля (особенности его логики), но результат равносилен RefreshWindow, т.е., после завершения процесса все поля обновились, всё в полном порядке.
Непонятки с сохранением на компьютер пользователя результатов экспорта в файл. Не удаётся никак заставить открыть на стороне клиента FileDialog, сразу всё сохраняется в загрузках с именем и расширением заданными при генерации.
Решение
Решил забить до перехода к тестированию на выделенном сервере, некритично.
Дело к вечеру.
Это я только кажусь дураком! На самом деле я полный идиот!
- Губин Игорь
- ✯ Ветеран ✯
- Сообщения: 2329
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Поблагодарили: 18 раз
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, но только потому, что проект один, а вот задача получается специализированной
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, но только потому, что проект один, а вот задача получается специализированной
Это я только кажусь дураком! На самом деле я полный идиот!
- Губин Игорь
- ✯ Ветеран ✯
- Сообщения: 2329
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Поблагодарили: 18 раз
AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны
Борьба продолжается...
AnyScreen вылетает при пересвоении списка через текст.
Т.е.
?List{PROP:From} = 'Первый|#1|Третий|#3'
...
?List{PROP:From} = 'Первый|#1|Второй|#2|Третий|#3'
...
С вероятностью, практически, 100% приведёт к вылету по памяти. Или переходить на работу с Queue, но там свои тараканы при такой динамике, или играться с с разными списками и Hide/Unhide
5 часов убил на локализацию...
AnyScreen вылетает при пересвоении списка через текст.
Т.е.
?List{PROP:From} = 'Первый|#1|Третий|#3'
...
?List{PROP:From} = 'Первый|#1|Второй|#2|Третий|#3'
...
С вероятностью, практически, 100% приведёт к вылету по памяти. Или переходить на работу с Queue, но там свои тараканы при такой динамике, или играться с с разными списками и Hide/Unhide
5 часов убил на локализацию...
Это я только кажусь дураком! На самом деле я полный идиот!
-
- ✯ Ветеран ✯
- Сообщения: 4983
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 20 раз
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.
- Губин Игорь
- ✯ Ветеран ✯
- Сообщения: 2329
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Поблагодарили: 18 раз
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|'
Это я только кажусь дураком! На самом деле я полный идиот!
- Губин Игорь
- ✯ Ветеран ✯
- Сообщения: 2329
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Поблагодарили: 18 раз
AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны
Наверное. Если честно, то мне сейчас некогда писать, весь в отладке... Уже вижу финишную ленточку.
Это я только кажусь дураком! На самом деле я полный идиот!
- Губин Игорь
- ✯ Ветеран ✯
- Сообщения: 2329
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Поблагодарили: 18 раз
AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны
Мелкие стычки партизанских отрядов с французскими фуражирами
Notify, в принципе, работает, но как-то странно. Все проблемы решило
Или нечто аналогичное (я продпочитаю OMIT/COMPILE в силу широкого использования шаблонов)
Одновременно рекомендую использование AnyScreen:DisplayThread(...) для вящей красоты работы
Резюме 1: там где есть функция AnyScreen, аналогичная используемой в десктопном варианте, лучше использовать её.
Резюме 2: при работе с AnyScreen приложение гораздо жёстче реагирует на всякие вольности в коде, влияющие на работу с окнами и тем, что на них отображается - регулярные вылетания по памяти или непонятное поведение там, где в десктопной версии ничего не случалось. Но все эти вылетания, как показали разборки, связаны с использованием недокументированных фич на грани фола или, будем честны, слишком вольного применения особенностей языка.
Notify, в принципе, работает, но как-то странно. Все проблемы решило
Код: Выделить всё
IF AnyScreen:Active() Then
AnyScreen:Notify(...)
Else
Notify(...)
End
Одновременно рекомендую использование AnyScreen:DisplayThread(...) для вящей красоты работы
Резюме 1: там где есть функция AnyScreen, аналогичная используемой в десктопном варианте, лучше использовать её.
Резюме 2: при работе с AnyScreen приложение гораздо жёстче реагирует на всякие вольности в коде, влияющие на работу с окнами и тем, что на них отображается - регулярные вылетания по памяти или непонятное поведение там, где в десктопной версии ничего не случалось. Но все эти вылетания, как показали разборки, связаны с использованием недокументированных фич на грани фола или, будем честны, слишком вольного применения особенностей языка.
Это я только кажусь дураком! На самом деле я полный идиот!
- Дед Пахом
- Старичок
- Сообщения: 3133
- Зарегистрирован: 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
С уважением, ДП
- Губин Игорь
- ✯ Ветеран ✯
- Сообщения: 2329
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Поблагодарили: 18 раз
AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны
1. На цвет и вкус...
2. У меня так и сделано там, где нет кодогенерации через шаблоны
Но я здесь лишь даю рекомендации и описываю проблемы, а как реализовывать конкретно каждый пусть решает сам.
Это я только кажусь дураком! На самом деле я полный идиот!
- Губин Игорь
- ✯ Ветеран ✯
- Сообщения: 2329
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Поблагодарили: 18 раз
AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны
Мелкие стычки с мародёрами (забыл описать)
Если используется смена стилей в List, то не все цвета нормально отображаются. К примеру Gray:Text отыгрывает только если фон не белый. Пришлось для случая AnyScreen менять и стиль шрифта (я использовал зачёркнутый)
Если используется смена стилей в List, то не все цвета нормально отображаются. К примеру Gray:Text отыгрывает только если фон не белый. Пришлось для случая AnyScreen менять и стиль шрифта (я использовал зачёркнутый)
Это я только кажусь дураком! На самом деле я полный идиот!
- Губин Игорь
- ✯ Ветеран ✯
- Сообщения: 2329
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Поблагодарили: 18 раз
AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны
Русская армия оставила Москву и под прикрытием арьергарда отступила к Тарутино
1. Для меню фрейма не работают {PROP:Disable}
2. желающим тупо потыкать -
http://95.183.9.36/app/WinSteel%2010%20Rus
Login: test_111001
Пароль такой же
P.S. Кстати, там, при желании можно загрузить и почитать руководство пользователя на 100 страницах , чтобы понимать о чём речь
1. Для меню фрейма не работают {PROP:Disable}
2. желающим тупо потыкать -
http://95.183.9.36/app/WinSteel%2010%20Rus
Login: test_111001
Пароль такой же
P.S. Кстати, там, при желании можно загрузить и почитать руководство пользователя на 100 страницах , чтобы понимать о чём речь
Это я только кажусь дураком! На самом деле я полный идиот!
- Губин Игорь
- ✯ Ветеран ✯
- Сообщения: 2329
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Поблагодарили: 18 раз
AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны
Сделал на сервере тестовое приложение из Invoice из примеров (без изменений). Открыл всем желающим. Практика показывает, что нагрузка на сервер заметно меньше того, что порождал App Broker. Сервер работает устойчиво.
Это я только кажусь дураком! На самом деле я полный идиот!
- Губин Игорь
- ✯ Ветеран ✯
- Сообщения: 2329
- Зарегистрирован: 16 Сентябрь 2005, 16:35
- Откуда: Москва
- Поблагодарили: 18 раз
AnyScreen (форсировали Неман Бонапартовы войска) - хроника войны
Сражение за Малоярославец выиграно. Программы уходят в коммерческую эксплуатацию.
Из неожиданных плюсов: в программе есть потоковое чтение больших объёмов данных (раз за сессию), так, из-за кеширования Windows, этот процесс проходит заметно быстрее, чем на локальном компьютере.
Из неожиданных плюсов: в программе есть потоковое чтение больших объёмов данных (раз за сессию), так, из-за кеширования Windows, этот процесс проходит заметно быстрее, чем на локальном компьютере.
Это я только кажусь дураком! На самом деле я полный идиот!