x11 Posted October 18, 2020 Posted October 18, 2020 В MainModule есть глобальные переменные, т.е. те переменные, которые идут (описаны) после описания класса TUniMainModule = class(TUniGUIMainModule) Type TUniMainModule = class(TUniGUIMainModule) ... private ... ... public ... ... end; function UniMainModule: TUniMainModule; Var UserData: TUserData; implementation {$R *.dfm} В частности речь идет о UserData. Такое впечатление, что UserData находится не в MainModule, а в ServerModule. Каждый раз, когда пользователь логинится, в эту переменную ( типа Record) записываются текущие данные пользователя (имя, логин, ID) в событии OnBeforLogin в этом же главном модуле приложения. Я обратил внимание, что когда логинится второй пользователь, то у первого пользователя перезаписываются данные от второго пользователя. А когда логинится третий пользователь, то у двух предыдущих в переменной UserData теперь данные от третьего пользователя. Изначально я думал, что модуль "unit MainModule;" изолирован в пределах сессии одного пользователя. Как быть? Quote
x11 Posted October 18, 2020 Author Posted October 18, 2020 Когда я перенес переменные в раздел public внутрь описания класса TUniMainModule, то все нормализовалось. Quote
x11 Posted October 18, 2020 Author Posted October 18, 2020 Теперь вопрос. Если описать глобальную переменную в модуле формы или фрейма вне описания класса, то такая переменная буде глобальная для всех пользователей приложения вне контекста сессии, т.е. как будто эта переменная описана в ServerModule? Quote
x11 Posted October 19, 2020 Author Posted October 19, 2020 Вот пример. Размер экрана вычисляю так: function TUniMainModule.GetScreenResolution: string; begin result := UniSession.UniApplication.ScreenWidth.ToString + 'x' + UniSession.UniApplication.ScreenHeight.ToString; end; Запустил три клиентские сессии, в том числе и в браузере смартфона. Размеры окна браузера везде разные. Проблема в том, что у всех экранов одно и то же значение вычисляется. Что я делаю не так? Как вычислить размер окна браузера на стороне клиента и показать это в мониторе сессии? Спасибо. Session List.zip Quote
x11 Posted October 30, 2020 Author Posted October 30, 2020 Дошло... глобальные переменные конкретного пользователя должны быть внутри объявления класса, а не pas-файла. http://www.unigui.com/doc/online_help/handling-concurrency.htm Quote
x11 Posted June 24, 2021 Author Posted June 24, 2021 в мобильной версии есть код UniMainModule.ScreenResolution := UniSession.UniApplication.ScreenWidth.ToString + 'x' + UniSession.UniApplication.ScreenHeight.ToString; Вставлял его в разные места программы, например, в события создания окон входа в программу и в главное окно программы. Всегда результат "0х0". Как получить размер окна или размер окна браузера в мобильной версии? Quote
x11 Posted June 24, 2021 Author Posted June 24, 2021 На смартфоне это событие не работает (не срабатывает): procedure TfmmMain.UnimFormScreenResize(Sender: TObject; AWidth, AHeight: Integer); begin UniMainModule.ScreenResolution := AWidth.ToString + 'x' + AHeight.ToString; end; UPD. Использовал событие FormResize Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.