-
Постов
568 -
Зарегистрирован
-
Посещение
-
Победитель дней
57
Весь контент ENERGY
-
Может лучше напрямую использовать THttpClient и отправлять POST запросы? Опишите детали для чего это нужно.
-
Что то мне кажется это связано с этим багом 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 в списке.
-
Честно говоря столько стилей перебрал, в основном премиум, не замечал 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 например..
-
Обычно их 3: Scale 1, 2 и 3.
-
В любом. Причем здесь стили Delphi? Если иллюстратор размывает финальный png? Что означает "выгружаю"?
-
Оттого, что ширина текста определяется для шрифта и размера указанного в 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); То размер будет корректный.
-
А SDK iOS точно 11.x выбрано? А Xcode какой? При билде не возникает ошибка Linker Error 1 или т.п. ? Кстати, ссылка у вас на какой то фейковый рутрекер. Вот тот же релиз на оригинальном рутрекере. https://rutracker.org/forum/viewtopic.php?t=5461837
-
Тема как то неправильно названа. Я подумал про ориентацию экрана. Назовите пожалуйста лучше как "Targeting SDK на Android 8" или "Целевая версия SDK на Android 8"
-
Программа на iOS 10.3 будет работать, единственное что опубликовать не получиться в магазине, т.к. Apple может не пропустить (но может и пропустить). Обновляться можно только до последней версии iOS, может меня поправят. Насчет компиляции с iOS 11.4 лучше спросить в чате телеграмм. По идее должно работать, проверьте. XCode - да поверх.
-
Мне кажется вам нужно искать iPhone x64, это 5s или выше.
-
Лучше не наследоваться в отдельный класс от 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 уже отошли.