x11 Posted October 18, 2020 Share 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;" изолирован в пределах сессии одного пользователя. Как быть? Link to comment Share on other sites More sharing options...
x11 Posted October 18, 2020 Author Share Posted October 18, 2020 Когда я перенес переменные в раздел public внутрь описания класса TUniMainModule, то все нормализовалось. Link to comment Share on other sites More sharing options...
x11 Posted October 18, 2020 Author Share Posted October 18, 2020 Теперь вопрос. Если описать глобальную переменную в модуле формы или фрейма вне описания класса, то такая переменная буде глобальная для всех пользователей приложения вне контекста сессии, т.е. как будто эта переменная описана в ServerModule? Link to comment Share on other sites More sharing options...
x11 Posted October 19, 2020 Author Share Posted October 19, 2020 Вот пример. Размер экрана вычисляю так: function TUniMainModule.GetScreenResolution: string; begin result := UniSession.UniApplication.ScreenWidth.ToString + 'x' + UniSession.UniApplication.ScreenHeight.ToString; end; Запустил три клиентские сессии, в том числе и в браузере смартфона. Размеры окна браузера везде разные. Проблема в том, что у всех экранов одно и то же значение вычисляется. Что я делаю не так? Как вычислить размер окна браузера на стороне клиента и показать это в мониторе сессии? Спасибо. Session List.zip Link to comment Share on other sites More sharing options...
x11 Posted October 30, 2020 Author Share Posted October 30, 2020 Дошло... глобальные переменные конкретного пользователя должны быть внутри объявления класса, а не pas-файла. http://www.unigui.com/doc/online_help/handling-concurrency.htm Link to comment Share on other sites More sharing options...
x11 Posted June 23, 2021 Author Share Posted June 23, 2021 up проблема все еще актуальна Link to comment Share on other sites More sharing options...
x11 Posted June 24, 2021 Author Share Posted June 24, 2021 в мобильной версии есть код UniMainModule.ScreenResolution := UniSession.UniApplication.ScreenWidth.ToString + 'x' + UniSession.UniApplication.ScreenHeight.ToString; Вставлял его в разные места программы, например, в события создания окон входа в программу и в главное окно программы. Всегда результат "0х0". Как получить размер окна или размер окна браузера в мобильной версии? Link to comment Share on other sites More sharing options...
x11 Posted June 24, 2021 Author Share Posted June 24, 2021 На смартфоне это событие не работает (не срабатывает): procedure TfmmMain.UnimFormScreenResize(Sender: TObject; AWidth, AHeight: Integer); begin UniMainModule.ScreenResolution := AWidth.ToString + 'x' + AHeight.ToString; end; UPD. Использовал событие FormResize Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now