Перейти к содержанию
Fire Monkey от А до Я

Кривяков Виталий

Пользователи
  • Постов

    79
  • Зарегистрирован

  • Посещение

  • Победитель дней

    12

Активность репутации

  1. Like
    Кривяков Виталий получил реакцию от Rusland в Мобильное рабочее место кассира   
    Добрый день, коллеги!
    Хочу рассказать о выходе нашего нового продукта 
    1С-Рарус:Мобильное РМК
    Приложение написано в 10 версии Delphi (Seatlle), предназначено для автоматизации рабочего места кассира. Есть встроенный демо режим.
    Работа пока возможна только на планшетах, поддержка смартфонов в будущем.
    Готов воспринять критику, пожелания и ответить на вопросы.
  2. Like
    Кривяков Виталий получил реакцию от Равиль Зарипов (ZuBy) в Некорректный вывод текста под Андроид.   
    Итак, год спустя описываю решение проблемы.  Исследования проводил в Берлине, но думаю рецепт подойдет и для младших версий.
    1. Ошибка существует в файле FMX.TextLayout.GPU, поэтому копируем его в проект.
    2. Убираем мусор при отрисовке кропнутого символа.
    Ищем в файле следующий фрагмент:
     
    ColoredGlyph := TFontGlyphStyle.ColorGlyph in Rec.Glyph.Style; if ColoredGlyph then TCustomCanvasGpu(ACanvas).ModulateColor := $FFFFFFFF; ACanvas.DrawBitmap(Rec.Bitmap, SrcR, R, Opacity); if ColoredGlyph then TCustomCanvasGpu(ACanvas).ModulateColor := LRun.Color; и заменяем его на 
    if not R.IsEmpty then begin // Disable draw empty rect ColoredGlyph := TFontGlyphStyle.ColorGlyph in Rec.Glyph.Style; if ColoredGlyph then TCustomCanvasGpu(ACanvas).ModulateColor := $FFFFFFFF; ACanvas.DrawBitmap(Rec.Bitmap, SrcR, R, Opacity); if ColoredGlyph then TCustomCanvasGpu(ACanvas).ModulateColor := LRun.Color; end; Пояснение: при расчете области отрисовки R символа, мы можем получить "отрицательный размер", где Bottom будет меньше чем Top. Соответсвенно такой же неправильной становиться область источника SrcR и на экран вылазит мусор.
    3. От мусора избавились, но если присмотреться к нижней границе текста, то можно увидеть, что отрезка не ровная, одни символы отрезаны больше, другие меньше. Для этого нужно исправить алгоритм расчета области отсечения. 
    Для этого ищем комментарий  //Checking for lines lower than bottom border - с него начинается ветка, в которую нужно внести изменения.
    Чуть далее ищем код
     
    Rec := AddOrGetChar(nil, Run.Chars[K], ChDic, Run.Font); X := MaxSize.Y - FFrame.Last.TopLeft.Y - Rec.Glyph.VerticalAdvance * FScaleFactor; и меняем его на 
     
    Rec := AddOrGetChar(LayoutCanvas, Run.Chars[K], ChDic, Run.Font); X := MaxSize.Y - FFrame.Last.TopLeft.Y - ((Rec.SrcRect.Height + Rec.Glyph.Origin.Y) * FScaleFactor); Здесь пояснения дать сложнее, скажу только, что разработчики проигнорировали тот момент, что символы имеют разные размеры (например . и Ж) и считают отсечение не по размеру глифа символа а по экранному размеру символа, т.е. он будет одинаковый для всей строки, что неправильно, так как в дальнейшем данное отсечение применяется к глифу символа.
     
    P.S. А куда переехал CodeCentral, не нашел его в Берлине? 
  3. Like
    Кривяков Виталий получил реакцию от rareMax в Некорректный вывод текста под Андроид.   
    Итак, год спустя описываю решение проблемы.  Исследования проводил в Берлине, но думаю рецепт подойдет и для младших версий.
    1. Ошибка существует в файле FMX.TextLayout.GPU, поэтому копируем его в проект.
    2. Убираем мусор при отрисовке кропнутого символа.
    Ищем в файле следующий фрагмент:
     
    ColoredGlyph := TFontGlyphStyle.ColorGlyph in Rec.Glyph.Style; if ColoredGlyph then TCustomCanvasGpu(ACanvas).ModulateColor := $FFFFFFFF; ACanvas.DrawBitmap(Rec.Bitmap, SrcR, R, Opacity); if ColoredGlyph then TCustomCanvasGpu(ACanvas).ModulateColor := LRun.Color; и заменяем его на 
    if not R.IsEmpty then begin // Disable draw empty rect ColoredGlyph := TFontGlyphStyle.ColorGlyph in Rec.Glyph.Style; if ColoredGlyph then TCustomCanvasGpu(ACanvas).ModulateColor := $FFFFFFFF; ACanvas.DrawBitmap(Rec.Bitmap, SrcR, R, Opacity); if ColoredGlyph then TCustomCanvasGpu(ACanvas).ModulateColor := LRun.Color; end; Пояснение: при расчете области отрисовки R символа, мы можем получить "отрицательный размер", где Bottom будет меньше чем Top. Соответсвенно такой же неправильной становиться область источника SrcR и на экран вылазит мусор.
    3. От мусора избавились, но если присмотреться к нижней границе текста, то можно увидеть, что отрезка не ровная, одни символы отрезаны больше, другие меньше. Для этого нужно исправить алгоритм расчета области отсечения. 
    Для этого ищем комментарий  //Checking for lines lower than bottom border - с него начинается ветка, в которую нужно внести изменения.
    Чуть далее ищем код
     
    Rec := AddOrGetChar(nil, Run.Chars[K], ChDic, Run.Font); X := MaxSize.Y - FFrame.Last.TopLeft.Y - Rec.Glyph.VerticalAdvance * FScaleFactor; и меняем его на 
     
    Rec := AddOrGetChar(LayoutCanvas, Run.Chars[K], ChDic, Run.Font); X := MaxSize.Y - FFrame.Last.TopLeft.Y - ((Rec.SrcRect.Height + Rec.Glyph.Origin.Y) * FScaleFactor); Здесь пояснения дать сложнее, скажу только, что разработчики проигнорировали тот момент, что символы имеют разные размеры (например . и Ж) и считают отсечение не по размеру глифа символа а по экранному размеру символа, т.е. он будет одинаковый для всей строки, что неправильно, так как в дальнейшем данное отсечение применяется к глифу символа.
     
    P.S. А куда переехал CodeCentral, не нашел его в Берлине? 
  4. Like
    Кривяков Виталий получил реакцию от enatechno в Некорректный вывод текста под Андроид.   
    Итак, год спустя описываю решение проблемы.  Исследования проводил в Берлине, но думаю рецепт подойдет и для младших версий.
    1. Ошибка существует в файле FMX.TextLayout.GPU, поэтому копируем его в проект.
    2. Убираем мусор при отрисовке кропнутого символа.
    Ищем в файле следующий фрагмент:
     
    ColoredGlyph := TFontGlyphStyle.ColorGlyph in Rec.Glyph.Style; if ColoredGlyph then TCustomCanvasGpu(ACanvas).ModulateColor := $FFFFFFFF; ACanvas.DrawBitmap(Rec.Bitmap, SrcR, R, Opacity); if ColoredGlyph then TCustomCanvasGpu(ACanvas).ModulateColor := LRun.Color; и заменяем его на 
    if not R.IsEmpty then begin // Disable draw empty rect ColoredGlyph := TFontGlyphStyle.ColorGlyph in Rec.Glyph.Style; if ColoredGlyph then TCustomCanvasGpu(ACanvas).ModulateColor := $FFFFFFFF; ACanvas.DrawBitmap(Rec.Bitmap, SrcR, R, Opacity); if ColoredGlyph then TCustomCanvasGpu(ACanvas).ModulateColor := LRun.Color; end; Пояснение: при расчете области отрисовки R символа, мы можем получить "отрицательный размер", где Bottom будет меньше чем Top. Соответсвенно такой же неправильной становиться область источника SrcR и на экран вылазит мусор.
    3. От мусора избавились, но если присмотреться к нижней границе текста, то можно увидеть, что отрезка не ровная, одни символы отрезаны больше, другие меньше. Для этого нужно исправить алгоритм расчета области отсечения. 
    Для этого ищем комментарий  //Checking for lines lower than bottom border - с него начинается ветка, в которую нужно внести изменения.
    Чуть далее ищем код
     
    Rec := AddOrGetChar(nil, Run.Chars[K], ChDic, Run.Font); X := MaxSize.Y - FFrame.Last.TopLeft.Y - Rec.Glyph.VerticalAdvance * FScaleFactor; и меняем его на 
     
    Rec := AddOrGetChar(LayoutCanvas, Run.Chars[K], ChDic, Run.Font); X := MaxSize.Y - FFrame.Last.TopLeft.Y - ((Rec.SrcRect.Height + Rec.Glyph.Origin.Y) * FScaleFactor); Здесь пояснения дать сложнее, скажу только, что разработчики проигнорировали тот момент, что символы имеют разные размеры (например . и Ж) и считают отсечение не по размеру глифа символа а по экранному размеру символа, т.е. он будет одинаковый для всей строки, что неправильно, так как в дальнейшем данное отсечение применяется к глифу символа.
     
    P.S. А куда переехал CodeCentral, не нашел его в Берлине? 
  5. Like
    Кривяков Виталий получил реакцию от AlexShaman в Android 6 и Exception   
    Android 6 + XE7 + Exception = Крах приложения
  6. Like
    Кривяков Виталий получил реакцию от Евгений Корепов в Некорректный вывод текста под Андроид.   
    Итак, год спустя описываю решение проблемы.  Исследования проводил в Берлине, но думаю рецепт подойдет и для младших версий.
    1. Ошибка существует в файле FMX.TextLayout.GPU, поэтому копируем его в проект.
    2. Убираем мусор при отрисовке кропнутого символа.
    Ищем в файле следующий фрагмент:
     
    ColoredGlyph := TFontGlyphStyle.ColorGlyph in Rec.Glyph.Style; if ColoredGlyph then TCustomCanvasGpu(ACanvas).ModulateColor := $FFFFFFFF; ACanvas.DrawBitmap(Rec.Bitmap, SrcR, R, Opacity); if ColoredGlyph then TCustomCanvasGpu(ACanvas).ModulateColor := LRun.Color; и заменяем его на 
    if not R.IsEmpty then begin // Disable draw empty rect ColoredGlyph := TFontGlyphStyle.ColorGlyph in Rec.Glyph.Style; if ColoredGlyph then TCustomCanvasGpu(ACanvas).ModulateColor := $FFFFFFFF; ACanvas.DrawBitmap(Rec.Bitmap, SrcR, R, Opacity); if ColoredGlyph then TCustomCanvasGpu(ACanvas).ModulateColor := LRun.Color; end; Пояснение: при расчете области отрисовки R символа, мы можем получить "отрицательный размер", где Bottom будет меньше чем Top. Соответсвенно такой же неправильной становиться область источника SrcR и на экран вылазит мусор.
    3. От мусора избавились, но если присмотреться к нижней границе текста, то можно увидеть, что отрезка не ровная, одни символы отрезаны больше, другие меньше. Для этого нужно исправить алгоритм расчета области отсечения. 
    Для этого ищем комментарий  //Checking for lines lower than bottom border - с него начинается ветка, в которую нужно внести изменения.
    Чуть далее ищем код
     
    Rec := AddOrGetChar(nil, Run.Chars[K], ChDic, Run.Font); X := MaxSize.Y - FFrame.Last.TopLeft.Y - Rec.Glyph.VerticalAdvance * FScaleFactor; и меняем его на 
     
    Rec := AddOrGetChar(LayoutCanvas, Run.Chars[K], ChDic, Run.Font); X := MaxSize.Y - FFrame.Last.TopLeft.Y - ((Rec.SrcRect.Height + Rec.Glyph.Origin.Y) * FScaleFactor); Здесь пояснения дать сложнее, скажу только, что разработчики проигнорировали тот момент, что символы имеют разные размеры (например . и Ж) и считают отсечение не по размеру глифа символа а по экранному размеру символа, т.е. он будет одинаковый для всей строки, что неправильно, так как в дальнейшем данное отсечение применяется к глифу символа.
     
    P.S. А куда переехал CodeCentral, не нашел его в Берлине? 
  7. Like
    Кривяков Виталий получил реакцию от Maximus в Зависимость от регистра русских символов при использовании LIKE   
    Добрый день!
    В стандартных компонента есть механизм по встраиванию своих функций в SQLite. 
    ... // создаю встроенную функцию ru_lower F1 := TFDSQLiteFunction.Create(nil); F1.DriverLink := WC1; F1.FunctionName := 'ru_lower'; F1.ArgumentsCount := 1; F1.OnCalculate := ru_lower; ... procedure TORMmanager.ru_lower(AFunc: TSQLiteFunctionInstance; AInputs: TSQLiteInputs; AOutput: TSQLiteOutput; var AUserData: TObject); begin AOutput.AsString := AInputs[0].AsString.ToLower; end; SQL:
    select name from users where ru_lower(name) like '%иван%'
    Запрос вернет все имена содержащие иван в любом регистре.
  8. Like
    Кривяков Виталий получил реакцию от Axbor в Зависимость от регистра русских символов при использовании LIKE   
    Добрый день!
    В стандартных компонента есть механизм по встраиванию своих функций в SQLite. 
    ... // создаю встроенную функцию ru_lower F1 := TFDSQLiteFunction.Create(nil); F1.DriverLink := WC1; F1.FunctionName := 'ru_lower'; F1.ArgumentsCount := 1; F1.OnCalculate := ru_lower; ... procedure TORMmanager.ru_lower(AFunc: TSQLiteFunctionInstance; AInputs: TSQLiteInputs; AOutput: TSQLiteOutput; var AUserData: TObject); begin AOutput.AsString := AInputs[0].AsString.ToLower; end; SQL:
    select name from users where ru_lower(name) like '%иван%'
    Запрос вернет все имена содержащие иван в любом регистре.
  9. Like
    Кривяков Виталий получил реакцию от Rusland в Зависимость от регистра русских символов при использовании LIKE   
    Добрый день!
    В стандартных компонента есть механизм по встраиванию своих функций в SQLite. 
    ... // создаю встроенную функцию ru_lower F1 := TFDSQLiteFunction.Create(nil); F1.DriverLink := WC1; F1.FunctionName := 'ru_lower'; F1.ArgumentsCount := 1; F1.OnCalculate := ru_lower; ... procedure TORMmanager.ru_lower(AFunc: TSQLiteFunctionInstance; AInputs: TSQLiteInputs; AOutput: TSQLiteOutput; var AUserData: TObject); begin AOutput.AsString := AInputs[0].AsString.ToLower; end; SQL:
    select name from users where ru_lower(name) like '%иван%'
    Запрос вернет все имена содержащие иван в любом регистре.
  10. Like
    Кривяков Виталий получил реакцию от Евгений Корепов в Зависимость от регистра русских символов при использовании LIKE   
    Добрый день!
    В стандартных компонента есть механизм по встраиванию своих функций в SQLite. 
    ... // создаю встроенную функцию ru_lower F1 := TFDSQLiteFunction.Create(nil); F1.DriverLink := WC1; F1.FunctionName := 'ru_lower'; F1.ArgumentsCount := 1; F1.OnCalculate := ru_lower; ... procedure TORMmanager.ru_lower(AFunc: TSQLiteFunctionInstance; AInputs: TSQLiteInputs; AOutput: TSQLiteOutput; var AUserData: TObject); begin AOutput.AsString := AInputs[0].AsString.ToLower; end; SQL:
    select name from users where ru_lower(name) like '%иван%'
    Запрос вернет все имена содержащие иван в любом регистре.
  11. Like
    Кривяков Виталий получил реакцию от Pax Beach в Зависимость от регистра русских символов при использовании LIKE   
    Добрый день!
    В стандартных компонента есть механизм по встраиванию своих функций в SQLite. 
    ... // создаю встроенную функцию ru_lower F1 := TFDSQLiteFunction.Create(nil); F1.DriverLink := WC1; F1.FunctionName := 'ru_lower'; F1.ArgumentsCount := 1; F1.OnCalculate := ru_lower; ... procedure TORMmanager.ru_lower(AFunc: TSQLiteFunctionInstance; AInputs: TSQLiteInputs; AOutput: TSQLiteOutput; var AUserData: TObject); begin AOutput.AsString := AInputs[0].AsString.ToLower; end; SQL:
    select name from users where ru_lower(name) like '%иван%'
    Запрос вернет все имена содержащие иван в любом регистре.
  12. Like
    Кривяков Виталий получил реакцию от Mazzay в Загрузка извне apk-пакета и запуск его на установку   
    Рекомендую в коде проверять наличие общих папок. Недавно столкнулся на 6 андроиде с тем, что  GetSharedDocumentPath не существовала. Просто создал ее и приложение заработало.
  13. Like
    Кривяков Виталий получил реакцию от МихаилЪ чайковЪ в TUITabControl   
    Добрый день!
     
    В теме про наш продукт http://fire-monkey.ru/topic/1519-1c-papyc-mobilnoe-prilozhenie-dlia-masterov-priemschiko/ меня просили поделиться исходным кодом компонента TabControl с поддержкой слайда табов пальцем. С удовольствием делюсь
    В составе архива сам компонент и пример его использования.
    FMXUI.zip
  14. Like
    Кривяков Виталий получил реакцию от Kitty в Как установить Mobile Add-On Pack?   
    Только что поставил.
    Вот инструкция от производителя:
    Using the Feature Installer - If you installed Delphi, C++Builder or RAD Studio 10.1 Berlin using the
    feature installer, please follow these steps to install your Add-On Pack:
    1. Register the license in the license manager
    2. Launch the Feature Manager
    (docwiki.embarcadero.com/RADStudio/Berlin/en/Feature_Manager) to add the new features to the product
  15. Like
    Кривяков Виталий получил реакцию от zairkz в После обновления на Андроид 6.01   
    Я уже писал об этой проблеме. Её не решить, что-то совсем внутри XE7 делает некорректно.
  16. Like
    Кривяков Виталий получил реакцию от x11 в TUITabControl   
    Добрый день!
     
    В теме про наш продукт http://fire-monkey.ru/topic/1519-1c-papyc-mobilnoe-prilozhenie-dlia-masterov-priemschiko/ меня просили поделиться исходным кодом компонента TabControl с поддержкой слайда табов пальцем. С удовольствием делюсь
    В составе архива сам компонент и пример его использования.
    FMXUI.zip
  17. Like
    Кривяков Виталий получил реакцию от zairkz в Exception в System   
    Добрый день!
    Похожая ситуация была, когда я не уследил за обращениями из не основного потока к экранным компонентам - работает, работает, а потом бац и "Все, они пропали" (с) South park.
  18. Like
    Кривяков Виталий получил реакцию от Kitty в Exception в System   
    Добрый день!
    Похожая ситуация была, когда я не уследил за обращениями из не основного потока к экранным компонентам - работает, работает, а потом бац и "Все, они пропали" (с) South park.
  19. Like
    Кривяков Виталий получил реакцию от Kitty в Поменять цвет статус бара Delphi [XE7] - Android   
    Да, тоже столкнулся с тем, что цвет становиться белым и не меняется.
    Вот версия без необходимости менять исходники.
    SystemBar.zip
  20. Like
    Кривяков Виталий получил реакцию от Равиль Зарипов (ZuBy) в Поменять цвет статус бара Delphi [XE7] - Android   
    Да, тоже столкнулся с тем, что цвет становиться белым и не меняется.
    Вот версия без необходимости менять исходники.
    SystemBar.zip
  21. Like
    Кривяков Виталий получил реакцию от Andrey Efimov в Поменять цвет статус бара Delphi [XE7] - Android   
    Да, тоже столкнулся с тем, что цвет становиться белым и не меняется.
    Вот версия без необходимости менять исходники.
    SystemBar.zip
  22. Like
    Кривяков Виталий получил реакцию от zairkz в Поменять цвет статус бара Delphi [XE7] - Android   
    Да, тоже столкнулся с тем, что цвет становиться белым и не меняется.
    Вот версия без необходимости менять исходники.
    SystemBar.zip
  23. Like
    Кривяков Виталий отреагировална Brovin Yaroslav в [RX] [FGX] Описание версии 0.7.1.74   
    Ссылка на скачивание (Только для RAD Studio RX): fgx_0.7.1.74.zip Инструкция по установке: "Инструкция по установке набора компонентов FGX" FGX - Donate - QIWI: 4890 4941 7671 0929 Описание
    Эта версия включает в себя следующий набор компонентов:
    Дизайнер итемов - дизайнер итемов. TfgToast (UPDATED) - класс отображения быстрых сообщений TfgFlipView - слайдер изображений. Поддерживает несколько способов переключения фотографий при помощи эффектов и сдвигов. При первом использовании ОБЯЗАТЕЛЬНО прочитать инструкцию "TfgFlipView - Инструкция загрузки стиля" TfgPositionAnimation - анимация свойств типа TPosition TfgPosition3DAnimation - анимация свойств типа TPosition3D  TfgBitmapLinkAnimation - анимация свойств типа TBitmapLink  TfgProgressDialog - Компонент для отображения диалогового окна в момент выполнения длительной фоновой операции, когда время выполнения фоновой операции можно оценить. TfgActivityDialog - компонент для отображения диалогового окна в момент выполнения длительной фоновой операции, когда время выполнения операции не возможно адекватно оценить. TfgActionSheet - Аналог контекстного меню для мобильных платформ. TfgColorsPanel - Палитра цветов с возможностью выбора цвета. TfgGradientEdit - Компонент выбора градиента. TfgLinkedLabel  - Метка поддерживающая открытие Web ссылки в браузере по умолчанию. TfgApplicationEvents - компонент с возможностью легко задать обработчики на основные события приложения: Отслеживание смены состояния приложения, простой, обновление и выполнение действий Actions, Изменение ориентации устройства и тд. TfgVirtualKeyboard - компонент облегчающий работу с виртуальной клавиатурой. Позволяет задать пользовательские кнопки над виртуальной клавиатурой под iOS, а так же отлавливать события по отображению и скрытию клавиатуры. Зарегистрированы все стилевые объекты на вкладке "FGX: Style objects" Список изменений
    TfgToast: Добавлена реализация для iOS платформы. С эмулирована очередь тостов. Другими словами, при быстрой отправки несколько тостов, они будут показываться последовательно согласно заданным интервалом отображения тоста.  Добавлены глобальные настройки, позволяющие настроить внешний вид всех тостов в рамках приложения: TfgToast.DefaultBackgroundColor, TfgToast.DefaultMessageColor и TfgToast.DefaultPadding Исправлена ошибка, которая не меняла цвет текста тоста, если тост без картинки. Обновлен пример ToastsDemo
  24. Like
    Кривяков Виталий получил реакцию от afors в TUITabControl   
    Добрый день!
     
    В теме про наш продукт http://fire-monkey.ru/topic/1519-1c-papyc-mobilnoe-prilozhenie-dlia-masterov-priemschiko/ меня просили поделиться исходным кодом компонента TabControl с поддержкой слайда табов пальцем. С удовольствием делюсь
    В составе архива сам компонент и пример его использования.
    FMXUI.zip
  25. Like
    Кривяков Виталий получил реакцию от zairkz в TUITabControl   
    Проверил - действительно, есть такое поведение. Постараюсь выложить исправление в ближайшее время.
×
×
  • Создать...