Jump to content

x11

uniGUI Subscriber
  • Posts

    2822
  • Joined

  • Last visited

  • Days Won

    13

Everything posted by x11

  1. я ставил две точки останова: на создании и на уничтожении, так вот, старый главный модуль данных разрушается только при следующем логине, т.е. сперва создается новый экземпляр главного модуля, а потом срабатывает событие уничтожения старого модуля
  2. а если хочется, чтобы сессия была "вечной", но только пока пользователь залогинен?
  3. Так это потому что сервер не уничтожает сессию, наверно. Т.е. пользователь уже закрыл браузер, а uniMainModule не был уничтожен почему-то.
  4. 138. TunimMenu (Touch). У меню отсутствует событие BeforShow, чтобы можно было как-то изменить меню перед показом.
  5. Unfortunately, the developers have not created a convenient mobile mobile ListView for several years. We have to reinvent our new bicycle uniGui_Mob_XTamplate_Example.zip
  6. Use parameters in SQL-query Query1.ParamByName('DateTimeField1').AsDateTime := uniDateTime1.Date;
  7. 137. Неправильно отрисовываются мобильные элементы - они становятся прозрачными в некоторых темах, если указать Align := alTop, ссылка.
  8. Я так понял, что ошибка проявляется, если у элементов указать свойства Align := alTop.
  9. На мобильной форме лежат 2 элемента: TunimSelect и TUnimEdit. В теме Material через них видна предыдущая форма. т.е. эти два элемента прозрачны. Никаких CSS свойств к ним я не применял. Так же на форме лежат еще и 2 сетки TUnimDBGrid, но они не прозрачны. В других темах проблем нет.
  10. попробуйте заморозить memo или веб-сессию Вообще, в VCL, например, если много строк добавляется в визуальную компоненту, то там есть спец. методы типа memoExecSQL.Lines.BeginUpdate цикл добавления строк memoExecSQL.Lines.EndUpdate Но в uniGUI есть свои методы: SuspendLayouts; цикл добавления строк ResumeLayouts; А чтобы сессия не заканчивалась, если работы не много, но на одну сессию не хватает: uniMainModule.AllowSess := True;// автопродление сессии пока идет работа SuspendLayouts; что-то делаем ResumeLayouts; uniMainModule.AllowSess := false; procedure TUniMainModule.UniGUIMainModuleSessionTimeout(ASession: TObject; var ExtendTimeOut: Integer); begin if fAllowSess then ExtendTimeOut := UniServerModule.SessionTimeout;// продлеваем сессию end; Но пользователь может закрыть браузер, а когда откроет, то сессия будет все равно закрыта. А если и не закрыта, то ID сессии уже поменяется и при отправке в эту сессию файла, файл отправится в никуда. Но, если работы уж очень много, то вообще, правильней делать как-то так, чтобы это не зависело от веб-сессии. Например, в модуле сервера, чтобы не было привязки к mainModule, т.к. mainModule при уничтожении будет уничтожать все, где он указан в качестве Owner`а (владельца). Пример. Запустить процедуру/поток или что там у тебя. Запомнить логин пользователя. Пользователю выдавать сообщение, что он будет оповещен по завершению, даже если работа будет закончена завтра. Когда процедура закончит работу, то нужно сохранить данные куда-то, где пользователь сможет скачать данные или просмотреть их в окне в любое время, далее нужно найти сессию пользователя и отправить ему оповещение, а если такой сессии уже нет (пользователь уже вышел из программы), то при следующем входе этого пользователя в программу, выдать ему сообщение, что данные можно получить/увидеть/скачать, нажав ту или иную кнопку. Также выполненную работу можно отправить по эл. почте, Телеграм-ботом и т.д.
  11. Загрузил на сервер очередную новую версию EXE-файла (имеется ввиду через кнопку "Upload new version" HyperServer`а). Реально к серверу подключено сейчас 3 устройства. При нажатии на кнопку в браузере "Обновить страницу" подключение происходит к каким-то старым версиям. Но не к новым. Т.е. HyperServer подключает меня к старой версии, к 101, к 103, но не к 106. Такое впечатление, что после того, как я закрыл браузер или вкладку, или просто нажал кнопку "Обновить страницу" в браузере, старая сессия НЕ завершается. Получается, что сервер (ServerModule) не уничтожает уже ненужный MainModule, к которому никто более не подключен. Добавлю еще, что у меня есть код для автоматического продления сессии: procedure TUniMainModule.UniGUIMainModuleSessionTimeout(ASession: TObject; var ExtendTimeOut: Integer); begin if not AllowTerminate then ExtendTimeOut := UniServerModule.SessionTimeout;// продлеваем сессию end; Как быть в таких случаях? Отключить автопродление сессии?
  12. Спасибо. Помогло. UniSession.AddJS( 'Ext.defer(function(){'+ ' var fWin = Ext.WindowManager.getActive();'+ ' if (fWin) {'+ ' fWin.setHeight(300);'+ ' try {'+ ' fWin.query("button")[0].alignTo(fWin, "br-br", [-20, -20]);'+ ' fWin.query("button")[1].alignTo(fWin, "bl-bl", [20, -20]);'+ ' fWin.query("button")[0].setUserCls("btnWindowPhoto");'+ ' fWin.query("button")[1].setUserCls("btnWindowPhoto");'+ ' fWin.query("textarea")[0].setHeight(fWin.getHeight() - 90)'+ ' } catch (err) {}'+ ' }'+ '}, 10);' ); CustomCSS: .btnWindowPhoto{ width: auto !important; }
  13. Присвоить класс не получается UniSession.AddJS( 'Ext.defer(function(){'+ ' var fWin = Ext.WindowManager.getActive();'+ ' if (fWin) {'+ ' fWin.setHeight(300);'+ ' try {'+ ' fWin.query("button")[0].alignTo(fWin, "br-br", [-20, -20]);'+ ' fWin.query("button")[1].alignTo(fWin, "bl-bl", [20, -20]);'+ ' fWin.query("button")[0].setCls("btnWindowPhoto");'+ ' fWin.query("button")[1].setCls("btnWindowPhoto");'+ ' fWin.query("textarea")[0].setHeight(fWin.getHeight() - 90)'+ ' } catch (err) {}'+ ' }'+ '}, 10);' ); код не работает
  14. Сделал пока так: UniSession.AddJS( 'Ext.defer(function(){'+ ' var fWin = Ext.WindowManager.getActive();'+ ' if (fWin) {'+ ' fWin.setHeight(300);'+ ' try {'+ ' fWin.query("button")[0].alignTo(fWin, "br-br", [-20, -20]);'+ ' fWin.query("button")[1].alignTo(fWin, "bl-bl", [20, -20]);'+ ' fWin.query("button")[0].setWidth("auto");'+ ' fWin.query("button")[1].setWidth("auto");'+ ' fWin.query("textarea")[0].setHeight(fWin.getHeight() - 90)'+ ' } catch (err) {}'+ ' }'+ '}, 10);' );
  15. Отлично. Спасибо. А можно еще спросить, как кнопку увеличить или даже сделать ее размер от надписи типа fit-content по ширине? Какая из них кнопка 0, 1 и 2? Например, как назначить кнопке свой CSS-класс, чтобы через CustomCSS упралять шириной или другими свойствами?
  16. Да. Не знаю, как получилось значение -1. Сам себя запутал. Потом посмотрел, какие свойства имеет компонента по умолчанию и понял, в чем проблема. Ложная тревога.
  17. Поставил MinValue тоже 0, проблема ушла.
  18. и как нужно заполнить свойства, чтобы можно было вводить большие значения?
×
×
  • Create New...