Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » uniGUI - создание веб-приложений на Delphi

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

Открыть новую тему     Написать ответ в эту тему

XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
uniGUI – это библиотека, позволяющая создавать веб-приложения в классической Delphi-манере, посредством визуальных компонентов,  в большинстве случаев не требуется знать ни HTML, ни CSS, ни JavaScript, вся разработка ведётся лишь на одном языке – Delphi.
 
Офсайт uniGUI
 
Для рендеринга на стороне клиента uniGUI использует библиотеки Sencha Ext JS, а также Sencha Touch.
 
  • Большая тема по UniGUI https://www.sql.ru/forum/1264360/primenenie-unigui
  • Варианты добавления favicon в uniGUI
  • три режима в одном проекте
     
     
     
     

  • Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 17:41 29-04-2020 | Исправлено: XPerformer, 20:13 11-05-2020
    X11



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    А по поводу иконки, элементарно, открываешь в браузере инструменты разработчика, через Inspect ищещь свою иконку

     
    это шрифт, а не конкретный файл с иконкой

    ----------
    /не мы такие, жизнь такая/

    Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 09:29 03-06-2020
    andyzubov

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    какая разница, можно посмотреть и какой шрифт подтянулся и из какого css

    Всего записей: 493 | Зарегистр. 02-04-2015 | Отправлено: 09:39 03-06-2020
    MagistrAnatol



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Ну с прелоадером разобрался.
    Если кому интересно
    В MainModule->EnableSynchronousOperations=true
        ShowMask("Загрузка");
        UniSession->Synchronize();
            ..........
            HideMask();
     
    Правда пока не понял как менять фон и гифку
     
    Добавлено:

    Цитата:
    зачем весь справочник тянуть на клиента?

    Да начитался грамотных статей по mysql - не советуют использовать select * from limit для больших смещений. Плюс тогда надо будет самому делать пагинатор - не знаю как передать гриду количество записей в таблице и связать кнопки вперед/назад, поле страница № пагинатора грида и sql запрос
     
     
    Добавлено:

    Цитата:
    это шрифт, а не конкретный файл с иконкой

    В том то и дело, не знаю как определить какой шрифт грузится.
    В разных темах ссылка на елемент шрифта у всех одинакова, но в одной теме пропадают одни иконки
    а в другой другие

    Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 10:17 03-06-2020
    X11



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    MainModule->EnableSynchronousOperations

     
    это не прелоадер )))
     
    Добавлено:

    Цитата:
    Да начитался грамотных статей по mysql - не советуют использовать select * from limit для больших смещений. Плюс тогда надо будет самому делать пагинатор - не знаю как передать гриду количество записей в таблице и связать кнопки вперед/назад, поле страница № пагинатора грида и sql запрос  

     
    не надо никаких limit
    Если дело касается DevART UniDAC, то там достаточно включить SmartFetch. И проверить, чтобы количество записей совпадало в сетке и в TUniQuery.

    ----------
    /не мы такие, жизнь такая/

    Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 10:26 03-06-2020
    MagistrAnatol



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

    Цитата:
    Специально для этого есть возможность подгружать данные в рантайме через RemoteQuery

    А где у грида ето свойство?

    Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 10:33 03-06-2020
    andyzubov

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    В том то и дело, не знаю как определить какой шрифт грузится.

     
    вообще не понимаю в чем проблема
    https://yadi.sk/i/_2dqBOAIvF6PfQ
     
    скриншот сделан в FF, но в хроме посути тоже самое
    открываем инструменты разработчика и смотрим что там с твоей иконкой, какой стиль, откуда, какой фонт и так далее.

    Всего записей: 493 | Зарегистр. 02-04-2015 | Отправлено: 10:33 03-06-2020
    MagistrAnatol



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

    Цитата:
    это не прелоадер )))

    но без него не хочет работать
    Вариант прелоадера  ShowMask("Загрузка"); - меня устраивает.
     

    Цитата:
     И проверить, чтобы количество записей совпадало в сетке и в TUniQuery.

    Имеется в виду uniQuery->FetchRows = Grid->WebOptions->PageSize  
     

    Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 10:43 03-06-2020
    andyzubov

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    А где у грида ето свойство?

     
    По уму у тебя не должно быть гигантских выборок вообще, ты должен запросить у клиента некие параметры благодаря которым отсечь большую часть данных. Браузер не предназначен для работы одновременно с большими массивами данных, ну 100-200 записей, зачем клиенту больше на одном запросе?
    А вот редактирование уже интереснее, предположим у тебя надо выпадающим списком выбрать элемент из справочника в котором 10к значений, естественно не надо грузить их все в комбобокс/лукап. Для этого можно сделать так что когда клиент начинает набирать в этом поле свое значение на сервер идет запрос с тем что он ввел и оттуда падает список элементов удовлетворяющий запросу что ввел клиент. Схема там достаточно гибкая. Смотри демки в которых есть "custom remote query".
    Править запись датасета прямо в гриде дурная практика, и подходит разве что для совсем простых линейных справочников. Для полноценного редактирования данных надо делать карточку записи и уже в ней редактировать. В идеале не должно быть db контролов, карточка через property должна получить значения для отображения и в них же вернуть значения после редактирования попутно скажем вернув true на функции вызова чтобы понять, а были вообще отредактированы данные в карточке.

    Всего записей: 493 | Зарегистр. 02-04-2015 | Отправлено: 10:46 03-06-2020
    X11



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Смотри демки в которых есть "custom remote query".  

     
    включи unimDBLookupComboBox.RemoteQuery и RemoteQueryRetainingResults
     
     
    событие RemoteQuery у unimDBLookupComboBox

    Код:
    procedure TfmmXXXXX.comboRemoteQuery();
    Var
     n: integer;
     sql: string;
    begin
     
      sql := 'SELECT ID, NAME FROM ' + sTable + ' WHERE UPPER(NAME) CONTAINING(UPPER(:NAME)) AND DELETED IS DISTINCT FROM 1';
     
      qFill.Close;
      qFill.SQL.Text := sql;
     
      if (QueryString.Length <= 2) and (QueryString <> '*') then
        exit;
     
     
      if (QueryString = '*') or (QueryString = '[null]') then
        qFill.Params[0].AsString := ''
      else
        qFill.Params[0].AsString := QueryString;
     
      qFill.Open;
     
      if qFill.RecordCount = 0 then
      begin
        Result.Add(constEmptyRes);
        exit;
      end;
     
      n := 0;
      qFill.First;
      while not qFill.Eof do
      begin
        Result.Add(qFill.FieldByName('name').AsString);
        qFill.Next;
     
        inc(n);
        if N > 100 then Break;
      end;
    end;

     
     
    + обязательно событие OnGetKeyValue
     

    Код:
    if qFill.Active then
        KeyValue := qFill.Lookup('name', VarToStr(comboStreets.Text), 'ID');

     
    Саму компоненту unimDBLookupComboBox ни к чему привязывать не надо
     
    посмотри на пример в демках: DBLookupComboBox - Custom Remote Query (CDS)

    ----------
    /не мы такие, жизнь такая/

    Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 11:17 03-06-2020
    MagistrAnatol



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Подскажите, если возможно - как поднять быстродействие.
    Делаю запрос на большую таблицу - на обычном ВСЛ приложении запрос выполняется 2с. а на unigui 8c.

    Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 11:54 04-06-2020
    X11



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    disablecontrols?

    ----------
    /не мы такие, жизнь такая/

    Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 12:39 04-06-2020
    andyzubov

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    не забывай что в отличие от vcl, unigui фактически точно так же открывает таблицу и после этого сериализует ее содержимое которое затем отправляется по сети клиенту, там десериализуется и отображается в гриде. Посмотри какой-объем информации передается на клиента и если он реально большой то уменьшай количество передаваемых данных.

    Всего записей: 493 | Зарегистр. 02-04-2015 | Отправлено: 14:39 04-06-2020
    MagistrAnatol



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

    Цитата:
    disablecontrols?
    чуть быстрее, но не очень

    Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 15:27 04-06-2020
    X11



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    В MainModule->EnableSynchronousOperations=true  

     
    1. а если всё-таки вернуть в асинхронный режим.
    2. а если всё таки показываать инфу порциями, по 25-50-100 записей?
     
    Не может быть, чтобы 100 записей открывались 2 сек.

    ----------
    /не мы такие, жизнь такая/

    Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 17:46 04-06-2020
    andyzubov

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    я ну пойму, зачем гадать.
    На сервере сделать в логи отсечку времени по открытию датасета, после чего в браузере посмотреть какой траффик идет из браузера к серверу. И все станет кристально понятно.

    Всего записей: 493 | Зарегистр. 02-04-2015 | Отправлено: 09:06 05-06-2020
    MagistrAnatol



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    X11
    MainModule->EnableSynchronousOperations=false
    дает увеличение быстродействия запроса раза в два, но ето не сильно заметно - запрос меньше секунды.
    Проблема была в другом. Правда не пойму почему.
    В продолжение справочника населенных пунктов для уменьшения кол-ва строк на клиента решил
    грузить только те записи что надо клиенту.
    Создал 4 Query & 4 Combobox - Область/Район/Город/Район города
    Основной справочник и Query  брали данные естественно из одной таблицы.
    Если я держал открытыми  ети 4 Query и рефрешил при смене в Combobox запрос открывался секунд 10 - открыл - заполнил комбо-закрыл - все нормально, обошелся даже без лимитов в запросе.
     
     
    Правда при MainModule->EnableSynchronousOperations=false не знаю как обновлять клиента - есть операция импорта которая длится 30-40 сек. У меня был прогресс и я его заполнял. В асинхроннном режиме ето не работает - но клиенту надо как-то показать что извини я не завис а че-то все таки делаю

    Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 09:06 05-06-2020
    andyzubov

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В гриде не надо делать никаких лукапов и прочего. В гриде должен отображаться просто запрос сразу составленный со всеми JOIN'ами требующимися для отображения всех необходимых полей.
    Лукапы, комбобоксы и прочее у тебя должны быть в форме редактирования одной записи. При этом если сделать на основе Remote Query то фактически у тебя вообще не будет происходить никакой загрузки данных при открытии этой формы.
    Ребят, я вас не понимаю, я Вам уже который день пытаюсь объяснить как надо делать, при этом вы все равно делаете по своему и удивляетесь что оно тормозит. Хотите быстро, отвыкайте от того как Вы это делали в vcl, это не vcl это web и принципы построения приложений тут несколько другие. Хотя бы по причине того что вы фактически пишете трехзвенку.

    Всего записей: 493 | Зарегистр. 02-04-2015 | Отправлено: 09:19 05-06-2020 | Исправлено: andyzubov, 09:19 05-06-2020
    MagistrAnatol



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    andyzubov

    Цитата:
    В гриде не надо делать никаких лукапов и прочего

    Как раз в гриде ничего и нет.
    Комбобоксы в отдельной панели для выбора какие данные показывать

    Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 09:58 05-06-2020
    andyzubov

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    в датасете к которому подцеплен грид есть какие-то лукапы?

    Всего записей: 493 | Зарегистр. 02-04-2015 | Отправлено: 10:06 05-06-2020
    X11



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
     У меня был прогресс и я его заполнял. В асинхроннном режиме ето не работает - но клиенту надо как-то показать что извини я не завис а че-то все таки делаю  

     
    http://forums.unigui.com/index.php?/topic/10018-easy-way-to-implement-a-progressbar/
    http://forums.unigui.com/index.php?/topic/10017-omnithreads-and-unigui/&do=findComment&comment=52203
     
     
     
    Добавлено:

    Цитата:
     но клиенту надо как-то показать что извини я не завис а че-то все таки делаю  

     
    показывай gif анимашку, а потом прячь ее
    https://www.youtube.com/watch?v=94-jQ4eNWpg&feature=youtu.be
     
    loading.zip https://t.me/c/1428287863/2307


    ----------
    /не мы такие, жизнь такая/

    Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 14:08 05-06-2020 | Исправлено: X11, 14:23 05-06-2020
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » uniGUI - создание веб-приложений на Delphi


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru