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

ENERGY

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

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

  • Посещение

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

    57

Весь контент ENERGY

  1. Может лучше напрямую использовать THttpClient и отправлять POST запросы? Опишите детали для чего это нужно.
  2. Что то мне кажется это связано с этим багом https://quality.embarcadero.com/browse/RSP-18210 Загружайте картинки в ImageList - и затем отображайте в TGlyph. Таким образом у вас будут все картинки в едином хранилище, которое можно обновить. Глобальный ImageList можно хранить в DataModule, который должен загружаться раньше всех форм (в dpr файле).
  3. Есть такая процедура, 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;
  4. Автор, мне кажется, если бы вы прикрепили пример проекта, где баг воспроизводится (напр на TImage.Bitmap), было бы больше помощи, втч и тем кто будет спрашивать в будущем об этом. Ваше решение не добавит производительности программе, тем более вы используете это для каждого Item в списке.
  5. Честно говоря столько стилей перебрал, в основном премиум, не замечал scale 1.5. Обычно 1, 2, 3.
  6. А как вы его копируете? MakeScreenshot?
  7. Попробуйте сделать ресайз не мышкой, а спец. отдельной функцией в редакторе картинок (в Photoshop, Photoimpact). Там можно выбрать Resample метод напрямую - Bicubic. Если после этого все равно размытый, то можно добавить немного четкости (Sharp ). А вообще, обычно делается один большой файл с большим разрешением, и с него уже делается ресайз в маленькие разрешения. Так качество будет лучше, чем если делать наоборот. Маленькие картинки - иконки всмысле, лучше ресайзить из больших картинок не в PS, а в спец. программах, напр. Axialis IconWorkshop - качество будет лучше.
  8. Вы же копируете c PaintBox на Bitmap (буфер)?
  9. Я бы на вашем месте сначала вывел текст в Timage.Bitmap, чтобы исключить другие направления. Если бы вы подготовили простой проект с этим багом, чтобы другие могли запустить, - было бы больше помощи. Т.к. у всех работа, и отвлекаться на создание нового проекта мало кому охота.
  10. Значит Bitmap растягивается. Странно что WrapMode Original + BitmapScale не помог. Вы для каких платформ пишите? Scale какой возвращает система?
  11. А если текст вывести на PaintBox для теста чтобы исключить Bitmap?
  12. Если на 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, но без сглаживания).
  13. Значит он растягивается (если на Bitmap) или BitmapScale не тот. Покажите рабочий пример на PaintBox например..
  14. Это видимо чтобы сделать "введите email повторно", самая раздражающая функция на Земле.
  15. В любом. Причем здесь стили Delphi? Если иллюстратор размывает финальный png? Что означает "выгружаю"?
  16. Оттого, что ширина текста определяется для шрифта и размера указанного в 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); То размер будет корректный.
  17. А SDK iOS точно 11.x выбрано? А Xcode какой? При билде не возникает ошибка Linker Error 1 или т.п. ? Кстати, ссылка у вас на какой то фейковый рутрекер. Вот тот же релиз на оригинальном рутрекере. https://rutracker.org/forum/viewtopic.php?t=5461837
  18. Тема как то неправильно названа. Я подумал про ориентацию экрана. Назовите пожалуйста лучше как "Targeting SDK на Android 8" или "Целевая версия SDK на Android 8"
  19. ENERGY

    IOS: Exception class 6

    Программа на iOS 10.3 будет работать, единственное что опубликовать не получиться в магазине, т.к. Apple может не пропустить (но может и пропустить). Обновляться можно только до последней версии iOS, может меня поправят. Насчет компиляции с iOS 11.4 лучше спросить в чате телеграмм. По идее должно работать, проверьте. XCode - да поверх.
  20. ENERGY

    IOS: Exception class 6

    Мне кажется вам нужно искать iPhone x64, это 5s или выше.
  21. Лучше не наследоваться в отдельный класс от 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, который будет выскакивать случайным образом.
  22. ENERGY

    IOS: Exception class 6

    Мне кажется нужно вообще исключить iPhone 5 и UBF, и компилить только на x64 - 5s или выше, чтобы исключить другие баги. Вообще Universal Binary File мне не нравится, т.к. файл получается очень большой, под 30 мб - в 2 раза больше. Я компилирую только под x64. Делать неудобства остальным пользователям (большинству), в виде большого размера не хочу. iPhone 5 уже отошли.
  23. Что-то мне кажется проблема в эмуляторе устройства\клавиатуре. Никогда такого не замечал под Android\iOS на реальных устройствах, и на форуме никто не писал про такое.
  24. ENERGY

    Лайки

    Я надеюсь, если Ярославу станет не интересно, он передаст форум другому для поддержки.
×
×
  • Создать...