Jump to content

x11

uniGUI Subscriber
  • Posts

    2822
  • Joined

  • Last visited

  • Days Won

    13

Everything posted by x11

  1. x11

    Image jfif

    And what about webp?
  2. Я пока вижу пользу от HyperServer только в одном случае - это загрузка exe-файла серверной части, ну т.е. обновление бэкэнда. Да, это действительно удобно. Подключенные пользователи не отваливаются и продолжают работать, а новые подключаются уже к новой версии *.exe. Но не нужно забывать, что на бэкэнде еще может быть куча файлов, папок и/или база данных, т.е. можно было бы как-то выгрузить на сервер какой-нибудь архив, чтобы потом его распаковать и распределить всё по нужным папкам, но такого функционала нет, т.е. и обновление пока еще неполноценное. HyperServer может запустить 2-3-5 копий моего приложения на сервере, но зачем это нужно, ведь процессор все равно у компьютера один? Какой реально толк от трех параллельно запущенных приложений? Еще есть какой-то монитор ресурсов, тоже может быть полезная вещь, пока не знаю. А что еще полезного можно извлечь из HyperServer`а? Спасибо.
  3. Еще пример с RemoteQuery в событии OnRemoteQueryEx() procedure TfmmEditObjectParent.comboStreetsRemoteQueryEx(Sender: TComponent; const QueryString: string; Result: TStrings); begin comboOnRemoteQuery3(Sender as TUniCustomDBLookupComboBox, 'STREETS', QueryString, Result); end; procedure comboOnRemoteQuery3(combo: TUniCustomDBLookupComboBox; const sTable, QueryString: string; var Result: TStrings); Var n: integer; q: TUniQuery; begin q := combo.ListSource.DataSet as TUniQuery; q.Close; // выбрать из справочника нужные данные q.SQL.Text := 'SELECT ID, NAME FROM ' + sTable + ' WHERE UPPER(NAME) CONTAINING(UPPER(:NAME)) AND DELETED IS DISTINCT FROM 1 ORDER BY NAME'; if (QueryString.Length <= 2) and (QueryString <> '*') then// если пользователь ввел меньше 2 символов, но не звездочку, то поиск не начинать exit; if (QueryString = '*') or (QueryString = '[null]') then // если пользователь ввел звездочку или нажал на кнопку раскратия выпадающего списка - значит нужно выбрать из базы всеп значения q.Params[0].AsString := '' else q.Params[0].AsString := QueryString;// искомое название, что ввел пользователь q.Open; if q.RecordCount = 0 then begin Result.Add(constEmptyRes);// если в базе нет походящих записей, показать ему "данных нет" exit; end; n := 0; q.First; while not q.Eof do begin Result.AddObject(q.Fields[1].AsString, Pointer(q.Fields[0].AsInteger));// добавляем в выпадающий список имена и ID q.Next; inc(n); if N > 100 then Break;// макс. 100 строк end; end; В событии OnGetKeyValueEx() procedure TfmmEditObjectParent.comboStreetsGetKeyValueEx(const Sender: TComponent; const Value: string; var KeyValue: Variant); var lcb: TUniCustomDBLookupComboBox; begin lcb := Sender as TUniCustomDBLookupComboBox; if (lcb.Items.Count = 0) or (lcb.ItemIndex = -1) then exit; lcb.Tag := integer(lcb.Items.Objects[lcb.ItemIndex]);// что выбрал польлователь - записываем в TAG id из базы if lcb.Tag > 0 then lcb.KeyValue := lcb.Tag;// выбираем нужную запись по ID end;
  4. ну я давал здесь несколько примеров, как работать со свойством Objects http://forums.unigui.com/index.php?/topic/17909-unicolorcombobox/page/2/&tab=comments#comment-99611 Если кратко, используем свойства AddObject для наполнения и Objects для получения
  5. function focus(sender, e, eOpts) { sender.blur(); } in (TUniEventStrings)
  6. try blur http://forums.unigui.com/index.php?/topic/14514-не-показывать-виртуальную-клавиатуру-для-unimspinner/&tab=comments#comment-78786
  7. я верю, а почему вы не хотите показать как? на примере
  8. @Sherzod неудобство в том, что кнопки ооочень маленькие и расположены между собой далеко. Было бы значительно удобнее вот так: с большими кнопками, которые расположены рядом. Юзабилити же!
  9. tunimImage.JSInterface.JSConfig('cls', ['imgPhoto']); or tunimImage.LayoutConfig.cls := 'imgPhoto'; then css: .imgPhoto img { width: 100%; height: 100%; object-fit: scale-down; }
  10. Первая проблема в том, что меню не хочет автоматически скрываться после нажатия на какой-нибудь пункт. Вторая проблема в том, что я добавил код: procedure TfmmSearchResults.popupMnuResClick(Sender: TUnimMenuItem); begin popupMnuRes.Visible := False; end; но меню все равно остается висеть на экране, даже у чужой формы, перекрывая ее
  11. Мне кажется, что проблему у меню тоже связана со свойством ServerModule.Options.soControlNameAsId как описано в этой теме и что-то мне подсказывает, что во всем фреймворке есть и другие проблемы, связанные с этим свойством, когда оно включено
  12. Ну да, есть разница, в UnimFormReady() работает. Спасибо.
  13. Нет. В UnimFormShow() Есть большая разница?
  14. Нет, 0 все равно остается
  15. Подскажите, а как можно вместо нулевого значения, т.е. вместо 0, выводить свой placeholder, свой текст? Ну т.е. как добавить свой placeholder я знаю, но он не отображается, т.к. там введено значение 0.
  16. Сделайте заодно и пример, как программно листать внутренние панели вперед-назад. Чтобы на главной панели было 2 кнопки (вперед-назад) и пользователь листает внутренние панели этими двумя кнопками. Это будет полезно для организации галереи, т.к. в uniGUI пока что отсутствует компонента-галерея.
  17. Спасибо. Получилось. Извиняюсь за свою невнимательность
  18. правильно так?? function beforeInit(sender, config) { config.defaults = { listeners: { expand: function() { ajaxRequest(sender, "_expand", ["uname="+sender.layout.getExpanded()[0].uname]); } } }; config.header = { defaults: { width: 25 } }; }
  19. добавил код к сетке uniDBGrid и здесь получилось function beforeInit(sender, config) { config.header = { defaults: { width: 25 } } } но, как видите, здесь код без моего кода, без события listeners
  20. Конечно. Я об этом и написал, что без CSS обрезает иконки. И картинку приложил. Вот, еще раз перепроверил на всякий случай. CSS закоментировал. У панели добавил код width: 25,
×
×
  • Create New...