-
Постов
79 -
Зарегистрирован
-
Посещение
-
Победитель дней
12
Активность репутации
-
Кривяков Виталий получил реакцию от Rusland в Мобильное рабочее место кассира
Добрый день, коллеги!
Хочу рассказать о выходе нашего нового продукта
1С-Рарус:Мобильное РМК
Приложение написано в 10 версии Delphi (Seatlle), предназначено для автоматизации рабочего места кассира. Есть встроенный демо режим.
Работа пока возможна только на планшетах, поддержка смартфонов в будущем.
Готов воспринять критику, пожелания и ответить на вопросы.
-
Кривяков Виталий получил реакцию от Равиль Зарипов (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, не нашел его в Берлине?
-
Кривяков Виталий получил реакцию от 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, не нашел его в Берлине?
-
Кривяков Виталий получил реакцию от 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, не нашел его в Берлине?
-
Кривяков Виталий получил реакцию от AlexShaman в Android 6 и Exception
Android 6 + XE7 + Exception = Крах приложения
-
Кривяков Виталий получил реакцию от Евгений Корепов в Некорректный вывод текста под Андроид.
Итак, год спустя описываю решение проблемы. Исследования проводил в Берлине, но думаю рецепт подойдет и для младших версий.
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, не нашел его в Берлине?
-
Кривяков Виталий получил реакцию от 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 '%иван%'
Запрос вернет все имена содержащие иван в любом регистре.
-
Кривяков Виталий получил реакцию от 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 '%иван%'
Запрос вернет все имена содержащие иван в любом регистре.
-
Кривяков Виталий получил реакцию от 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 '%иван%'
Запрос вернет все имена содержащие иван в любом регистре.
-
Кривяков Виталий получил реакцию от Евгений Корепов в Зависимость от регистра русских символов при использовании 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 '%иван%'
Запрос вернет все имена содержащие иван в любом регистре.
-
Кривяков Виталий получил реакцию от 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 '%иван%'
Запрос вернет все имена содержащие иван в любом регистре.
-
Кривяков Виталий получил реакцию от Mazzay в Загрузка извне apk-пакета и запуск его на установку
Рекомендую в коде проверять наличие общих папок. Недавно столкнулся на 6 андроиде с тем, что GetSharedDocumentPath не существовала. Просто создал ее и приложение заработало.
-
Кривяков Виталий получил реакцию от МихаилЪ чайковЪ в TUITabControl
Добрый день!
В теме про наш продукт http://fire-monkey.ru/topic/1519-1c-papyc-mobilnoe-prilozhenie-dlia-masterov-priemschiko/ меня просили поделиться исходным кодом компонента TabControl с поддержкой слайда табов пальцем. С удовольствием делюсь
В составе архива сам компонент и пример его использования.
FMXUI.zip
-
Кривяков Виталий получил реакцию от 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
-
Кривяков Виталий получил реакцию от zairkz в После обновления на Андроид 6.01
Я уже писал об этой проблеме. Её не решить, что-то совсем внутри XE7 делает некорректно.
-
Кривяков Виталий получил реакцию от x11 в TUITabControl
Добрый день!
В теме про наш продукт http://fire-monkey.ru/topic/1519-1c-papyc-mobilnoe-prilozhenie-dlia-masterov-priemschiko/ меня просили поделиться исходным кодом компонента TabControl с поддержкой слайда табов пальцем. С удовольствием делюсь
В составе архива сам компонент и пример его использования.
FMXUI.zip
-
Кривяков Виталий получил реакцию от zairkz в Exception в System
Добрый день!
Похожая ситуация была, когда я не уследил за обращениями из не основного потока к экранным компонентам - работает, работает, а потом бац и "Все, они пропали" (с) South park.
-
Кривяков Виталий получил реакцию от Kitty в Exception в System
Добрый день!
Похожая ситуация была, когда я не уследил за обращениями из не основного потока к экранным компонентам - работает, работает, а потом бац и "Все, они пропали" (с) South park.
-
Кривяков Виталий получил реакцию от Kitty в Поменять цвет статус бара Delphi [XE7] - Android
Да, тоже столкнулся с тем, что цвет становиться белым и не меняется.
Вот версия без необходимости менять исходники.
SystemBar.zip
-
Кривяков Виталий получил реакцию от Равиль Зарипов (ZuBy) в Поменять цвет статус бара Delphi [XE7] - Android
Да, тоже столкнулся с тем, что цвет становиться белым и не меняется.
Вот версия без необходимости менять исходники.
SystemBar.zip
-
Кривяков Виталий получил реакцию от Andrey Efimov в Поменять цвет статус бара Delphi [XE7] - Android
Да, тоже столкнулся с тем, что цвет становиться белым и не меняется.
Вот версия без необходимости менять исходники.
SystemBar.zip
-
Кривяков Виталий получил реакцию от zairkz в Поменять цвет статус бара Delphi [XE7] - Android
Да, тоже столкнулся с тем, что цвет становиться белым и не меняется.
Вот версия без необходимости менять исходники.
SystemBar.zip
-
Кривяков Виталий отреагировална 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 -
Кривяков Виталий получил реакцию от afors в TUITabControl
Добрый день!
В теме про наш продукт http://fire-monkey.ru/topic/1519-1c-papyc-mobilnoe-prilozhenie-dlia-masterov-priemschiko/ меня просили поделиться исходным кодом компонента TabControl с поддержкой слайда табов пальцем. С удовольствием делюсь
В составе архива сам компонент и пример его использования.
FMXUI.zip
-
Кривяков Виталий получил реакцию от zairkz в TUITabControl
Проверил - действительно, есть такое поведение. Постараюсь выложить исправление в ближайшее время.