-
Постов
568 -
Зарегистрирован
-
Посещение
-
Победитель дней
57
Сообщения, опубликованные ENERGY
-
-
Что то мне кажется это связано с этим багом https://quality.embarcadero.com/browse/RSP-18210
Загружайте картинки в ImageList - и затем отображайте в TGlyph. Таким образом у вас будут все картинки в едином хранилище, которое можно обновить.
Глобальный ImageList можно хранить в DataModule, который должен загружаться раньше всех форм (в dpr файле).
-
Есть такая процедура, function DelAmp(const Text: string): string; в FMX.Types.
Которая 2 раза выделяет память для всей строки, и сканирует все символы в строке, в поисках &.
TLabel.Text := 'Text'; - эта процедура выполнится 2 раза, на любой платформе. Чтобы она выполнилась 1 раз, нужно сделать
TLabel.PrefixStyle := TPrefixStyle.NoPrefix;
TText
TText.Text := 'Text'; Процедура DelAmp выполниться в любом случае на любой платформе
procedure TText.SetText(const Value: string); [..] begin if Text <> Value then begin NewText := ConvertText(DelAmp(Value)); [..]
Стили состоят из множества TText элементов. Теперь представьте сколько ресурсов тратиться впустую.
function DelAmp(const Text: string): string; var I, J: Integer; Sb: TCharArray; begin Result := ''; if Text <> '' then begin SetLength(Sb, Text.Length); I := Low(Text); J := 0; while I <= High(Text) do begin if (Text[I] <> '&') then begin Sb[J] := Text[I]; Inc(J); end else begin if ((I < High(Text)) and (Text[I + 1] = '&')) then begin Sb[J] := Text[I]; Inc(J); Inc(I); end; end; Inc(I); end; Result := string.Create(Sb, 0, J); end; end;
Решение - скопировать FMX.Types в папку с проектом, и переделать функцию на:
function DelAmp(const Text: string): string; begin Result := Text; end;
-
Автор, мне кажется, если бы вы прикрепили пример проекта, где баг воспроизводится (напр на TImage.Bitmap), было бы больше помощи, втч и тем кто будет спрашивать в будущем об этом.
Ваше решение не добавит производительности программе, тем более вы используете это для каждого Item в списке.
-
1 час назад, dnekrasov сказал:
Ну если быть совсем точным - обычно их 4: 1, 1.5, 2 и 3
Честно говоря столько стилей перебрал, в основном премиум, не замечал scale 1.5. Обычно 1, 2, 3.
-
А как вы его копируете? MakeScreenshot?
-
Попробуйте сделать ресайз не мышкой, а спец. отдельной функцией в редакторе картинок (в Photoshop, Photoimpact). Там можно выбрать Resample метод напрямую - Bicubic.
Если после этого все равно размытый, то можно добавить немного четкости (Sharp ).
А вообще, обычно делается один большой файл с большим разрешением, и с него уже делается ресайз в маленькие разрешения. Так качество будет лучше, чем если делать наоборот.
Маленькие картинки - иконки всмысле, лучше ресайзить из больших картинок не в PS, а в спец. программах, напр. Axialis IconWorkshop - качество будет лучше.
-
Вы же копируете c PaintBox на Bitmap (буфер)?
-
Я бы на вашем месте сначала вывел текст в Timage.Bitmap, чтобы исключить другие направления.
Если бы вы подготовили простой проект с этим багом, чтобы другие могли запустить, - было бы больше помощи. Т.к. у всех работа, и отвлекаться на создание нового проекта мало кому охота.
-
Значит Bitmap растягивается. Странно что WrapMode Original + BitmapScale не помог. Вы для каких платформ пишите? Scale какой возвращает система?
-
А если текст вывести на PaintBox для теста чтобы исключить Bitmap?
-
Если на Timage то
Image1.WrapMode := TImageWrapMode.Original;
Чтобы не растягивало.
Также обратите внимание на параметр BitmapScale.
Он должен быть равен текущему scale, иначе изображение будет тоже искажено.
var lScale: Single; lScreenService: IFMXScreenService; begin // FMX.Platform if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, lScreenService) then lScale := lScreenService.GetScreenScale else lScale := 1;
Если у вас свой компонент от TControl , то там есть переменная Scene. и конструкция выше не нужна.
Result := TBitmap.Create(Trunc(AWidth), Trunc(AHeight));
Result.BitmapScale := lScale;Есть одно но, если указать правильный Scale в Bitmap - то на Windows (если там scale > 1) часть рисунка на канве будет отрезаться, видимо какой то баг с просчетом координат с новым Scale в FMX, при это на мобильных системах все прекрасно работает и корректно рисуется и масштабируется с разными Scale. Я так рисую со сглаживанием через NativeDraw - сначала на Bitmap, для кэша, затем на канву.
Возможно Ярослав знает в чем дело.
Используйте этот метод BitmapScale на Android\iOS (рендер GlobalUseGPUCanvas := true; чтобы посмотреть на Win, но без сглаживания).
-
Значит он растягивается (если на Bitmap) или BitmapScale не тот. Покажите рабочий пример на PaintBox например..
-
9 минут назад, krapotkin сказал:
нет. там столько этих файлов, сколько скейлов вы закладываете в MultiResBitmap
Обычно их 3: Scale 1, 2 и 3.
-
-
В любом.
ЦитатаЯ создал проект в иллюстраторе, и мне необходимо выгрузить png файлы в четырех разрешениях, но когда я выгружаю, границы у прямоугольных объектов становятся размытыми.
Причем здесь стили Delphi? Если иллюстратор размывает финальный png?
Что означает "выгружаю"?
-
В 08.02.2017 в 11:10, POV сказал:
Когда задал компоненте новый TextSettings функция TextWidth возвращает ширину текста для шрифта по умолчанию. Хотя отрисовывает с моими новыми настройками.
Отчего?
Оттого, что ширина текста определяется для шрифта и размера указанного в Canvas, а не для шрифта из компонента.
Например, в TLabel.TextSettings.Font и в его TLabel.Canvas.Font размер шрифта будет разный (в Canvas он дефолтный - 12).
В FMX компонентах Canvas, кстати, общий и один и тот же - это Canvas формы.
Если в OnResize чего-либо, сделать так:
Label.Canvas.Font.Size := Label.Font.Size; или Label.Canvas.Font.Assign(Label.Font); (чуть дольше) lRealWidth := Label.Canvas.TextWidth(Label.Text);
То размер будет корректный.
-
20 минут назад, ra.eremeev сказал:
Доброго времени суток!
Может кому пригодится: конфигурация Berlin отлично работает с MacOS High Sierra + SKD 11
Виртуалка для Hight Sierra доступна по ссылке
А SDK iOS точно 11.x выбрано? А Xcode какой? При билде не возникает ошибка Linker Error 1 или т.п. ?
Кстати, ссылка у вас на какой то фейковый рутрекер. Вот тот же релиз на оригинальном рутрекере.
-
-
Программа на iOS 10.3 будет работать, единственное что опубликовать не получиться в магазине, т.к. Apple может не пропустить (но может и пропустить).
Обновляться можно только до последней версии iOS, может меня поправят.
Насчет компиляции с iOS 11.4 лучше спросить в чате телеграмм. По идее должно работать, проверьте.
XCode - да поверх.
-
-
В 18.07.2018 в 21:22, Ivan B. сказал:
Alex, а как лучше организовать многопоточность? Создать класс TThread или использовать iTask?
Лучше не наследоваться в отдельный класс от TThread, как это делалось раньше в Delphi.
Это громоздкий и запутанный код.
Лучше используйте анонимные потоки. Вот вам шаблон:
http://blog.marcocantu.com/blog/2014_may_background_delphi_android_threads.html
TThread.CreateAnonymousThread( procedure begin // выполняется в потоке TThread.Queue(nil, procedure begin /// выполняется в главном потоке, когда завершиться анонимный поток. end); end ).Start; procedure TForm5.Button3Click(Sender: TObject); begin TThread.CreateAnonymousThread(procedure () begin // выполняется в потоке TThread.Synchronize (TThread.CurrentThread, procedure () begin // выполняется в главном потоке, но при этом анонимный поток еще продолжит работать, но сейчас приостановлен end); end).Start; end;
И помните что с элементами GUI нельзя работать из другого потока, только из главного ( TThread.Queue, TThread.Synchronize). Иначе будет Access Violation, который будет выскакивать случайным образом. -
Мне кажется нужно вообще исключить iPhone 5 и UBF, и компилить только на x64 - 5s или выше, чтобы исключить другие баги.
Вообще Universal Binary File мне не нравится, т.к. файл получается очень большой, под 30 мб - в 2 раза больше.
Я компилирую только под x64. Делать неудобства остальным пользователям (большинству), в виде большого размера не хочу. iPhone 5 уже отошли.
-
Что-то мне кажется проблема в эмуляторе устройства\клавиатуре. Никогда такого не замечал под Android\iOS на реальных устройствах, и на форуме никто не писал про такое.
-
Отловить GET, POST
в Загрузка страницы
Опубликовано
Может лучше напрямую использовать THttpClient и отправлять POST запросы?
Опишите детали для чего это нужно.