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

kami

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

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

  • Посещение

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

    41

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

  1. Пусть хоть китайской традиционной считает. Повторюсь - абсолютно без разницы, что за кодировка внутри приложения. Главное, чтобы общение (ввод/вывод) с внешним миром шло с явным указанием кодировки, поскольку автоопределение и/или считание кодировкой по умолчанию рано или поздно приведет к фейлу.
  2. Да, это правильно. Нет, на Windows - UTF-16 Внутри приложения не стоит заморачиваться на это. Всё приложение работает в единой кодировке и никаких проблем с передачей из класса в класс, из метода в метод, из модуля в модуль нет и не будет. Другое дело - общение с "внешним миром". Самые простые случаи - сохранение /загрузка текста в файл, общение по сети. В этом случае необходимо просто явно указывать кодировку при получении и отправке данных.
  3. Зато его можно указать в конструкторе. Нет. Исходная string в версиях от 2009 и выше - это UnicodeString. В большинстве случаев можно считать как WideString или UCS-2. Кодировка по 2 байта на символ. ANSI - это 1 байт на символ. Действительно, получившийся у Вас код не есть супер-красив. Я продолжаю считать, что всего навсего явное указание Encoding для StringStream снимет эти проблемы. Всякие остальные преобразования, включая явные упоминания конкретных TEncoding и функций перекодировки не нужны.
  4. Одна из ошибок здесь. Во-первых, ReadString уже возвращает строку. В той кодировке, которую правильно воспримет memo. Во-вторых, ReadString читает байты как строку, считая что это заранее заданная кодировка. По умолчанию, емнип, идет ANSI. Во внутренностях ReadString сразу идет преобразование из выбранной кодировки в дефолтную на выбранной платформе. Требуется: убрать напрочь излишнее UTF8ToAnsi У каждого StringStream сразу после создания подставить s.Encoding:=TEncoding.UTF8; Имхо, этого хватит.
  5. Я бы поменял их местами. Несколько странно сперва уничтожать объект, а потом обращаться к его полям и методам...
  6. Точно. Полная копипаста из моего модуля. Под Win - лечит, опробовано лично. Про Андроид - не скажу, не знаю. Так разберитесь, где именно падает. Что за стек вызовов, с какими параметрами. Оттрассируйте и предложите фикс.
  7. Апну тему. На этот раз - Tokio upd1, с патчем под iOS11. Что требуется: скопировать в папку с проектом (рядом с dpr) файл FMX.WebBrowser.pas. В нем внести изменения в метод TCustomWebBrowser.FormHandleCreated, чтобы он выглядел следующим образом: procedure TCustomWebBrowser.FormHandleCreated(const Sender: TObject; const Msg: TMessage); function GetParentForm(Control: TFmxObject): TCommonCustomForm; begin if (Control.Root <> nil) and (Control.Root.GetObject is TCommonCustomForm) then Result := TCommonCustomForm(Control.Root.GetObject) else Result := nil; end; var WBService : IFMXWBService; begin if not (csDesigning in ComponentState) and ((FWeb = nil) or (Sender = GetParentForm(self as TFmxObject))) and TPlatformServices.Current.SupportsPlatformService(IFMXWBService, WBService) then begin WBService.DestroyWebBrowser(FWeb); // добавлена эта строка. FWeb := WBService.CreateWebBrowser; FWeb.SetWebBrowserControl(Self); FWeb.UpdateContentFromControl; FWeb.URL := FURL; FWeb.Navigate; end; end; Что дает правка: допустим, у вас есть WB на главной форме и на дочерней форме (или фрейме - без разницы), которая создается / уничтожается динамически. При создании вторичной формы метод FormHandleCreated вызывается дважды, при этом FWeb, созданный в первом вызове просто забывается, но не уничтожается (сильная ссылка в списке веббраузеров в WBService). Дальше вторичная форма уничтожается (захватывая с собой FWeb, созданный при втором вызове FormHandleCreated ), а в "забытом" FWeb остаются невалидные ссылки на родителя. Что при вызове метода TWBFactoryService.RealignBrowsers (активация / изменение размеров формы) приведет к AV. Внесенное изменение удаляет FWeb из списка WBService, и в дальнейшем ничего не мешает его спокойному уничтожению.
  8. Можно поподробнее, про что поподробнее? Скачал последний XCode, поставил, убедился что в Preferences-Locations стоит последняя версия Command line tools -> Установил патчи в PAServer и IDE -> удалил напрочь все "старые" SDK из опций IDE, удалил их из папки -> скачал SDK 11.1, убедился что SDK 11.1 активны -> скомпилировал и задеплоил (кажется, во время деплоя мне было сказано, что Bundle Identificator плох, пришлось заменить его с вида F43234.com.application.my на com.application.my. Это, по большому счету, всё, что касается работы с SDK 11.1, остальные танцы с бубном (на предыдущих SDK) не вижу смысла приводить. Тщательно разбирайте ошибки компиляции и деплоя и будет вам счастье
  9. kami

    SendCommandWithResponse

    TTetheringCommand - есть метод Create, принимающий TBytes А вот почему 3 пары событий - это не знаю...
  10. kami

    SendCommandWithResponse

    Там искать нечего. В глубине тетеринга эта команда - всего лишь совокупность SendCommand(AConnection, ACommand); Result := ReceiveCommand(AConnection); Получается, что (как видно из названия и кода) она отправляет команду (как обычно, т.е. обработка на приеме ничем не отличается) и ждет, пока получит команду в ответ. Единственное что - следует самому создавать TTetheringCommand со своими параметрами, а не пользоваться готовыми SendStream и SendString
  11. Далеко не каждый html-документ валиден с точки зрения xml, поскольку допускает применение открывающих тегов без закрывающих. Посему - html может просто не загрузиться в IXMLDocument.
  12. XCode 9.1 + SDK 11.1 + iOS 11.1 +RAD 10.2.1 (с патчем PAServer и IDE под iOS11) Собрано 64 битное приложение (Universal binary file) и оно РАБОТАЕТ!!! Мучился довольно долго, под 11.0 сборка не хотела идти категорически (валилось на лишних разрешениях в Provision profile, про них говорилось в окне Build делфи). Заново ставил патч, удалял SDK 11.0, накатывал заново - не хотело идти, приложение вроде запускалось и сразу закрывалось на IPAD mini. А с 11.1 прокатило сразу же. Я не знаю, почему - может, из-за свежего SDK, может из-за того, что оно ставилось "в чистую" (хотя я и 11.0 SDK удалял ручками из папки документов). Главное - есть результат. Если нужны какие-то подробности - пишите, постараюсь ответить (хотя с моей точки зрения - всё это были танцы с бубном).
  13. kami

    Release vs Debug

    Что значит "не работает"? Конкретнее, пожалуйста.
  14. Дочерние компоненты удалятся, если на них не осталось ссылок.
  15. Слегка запоздалый ответ, но... Выставляешь нужные keyboardtype полям ввода ... и всё. Если нужно анализировать какие-то другие поля - в моей клаве есть метод GetKeyboardTypeForObject, в котором можно провести нужные (не предусмотренные штатным механизмом) манипуляции
  16. Раз уж пошла такая пьянка - выложу сюда то, что по виртуальной клавиатуре есть у меня на текущий момент (в телеграме уже выложил). Поддерживаются операционные системы: iOS, Windows. Оттестировано на 10.1 (Berlin) Итак: архив распаковать куда угодно, в проект в uses подключить модули uCommonCustomKeyboard (отвечает за подмену "штатной виртуальной клавиатуры" на свою) и ufrCustomNumpad (отвечает за отображение цифровой клавиатуры). Алфавитную, e-mail-овскую и тому подобные виды клавиатур оставляю на ваше усмотрение. Они делаются на основе ufrCustomNumpad, там больше заморочек с красивым размещением кнопок, чем с кодом. CustomKeyboards.7z
  17. Your code can be replaced with: var Stream: TStream; begin Stream:=TMemoryStream.Create; try SourceBitmap.SaveToStream(Stream); Stream.Seek(0, soBeginning); NewBitmap.LoadFromStream(Stream); finally Stream.Free; end; end;
  18. NewBitmap.Assign(SourceBitmap); or NewBitmap.CopyFromBitmap(SourceBitmap);
  19. Где фотоотчет и краткое содержание? @Vitaldj , @Error Телеграм телеграмом, но далеко не все там сидят, да и темы в чате быстро уходят в небытие. Срочно зафиксировать здесь для потомков!
  20. Завтра!!! 5 октября, в 19:00, на "Чердаке" ( https://yandex.ru/maps/-/CBUIUKb0PD Куйбышева 38/40, ближайшее метро - Горьковская ) (А то сам уже почти забыл )
  21. Не забываем выставлять Parent у объектов. Не уверен, а копаться лень. Вариантов "правильной" очистки в FMX несколько, например: for i:=lbCells.Count-1 downto 0 do lbCells.ItemByIndex(i).Release;
  22. Этот компонент - контейнер из сетки "панелек", Опять-таки, на каждую из этих панелек можно накидать чего-нибудь.
  23. для начала можно использовать TListBox. он попроще в понимании и подходит для небольших объемов информации. На объемах от двух экранов и более начинает тормозить, там уже нужен ListView, у которого совсем другой подход. Вкратце: у TListBox есть элементы, которые (если проводить аналогию с vcl) - просто панельки. На эти "панельки" можно накидать любые компоненты и, выставляя их свойства (начиная от текста и заканчивая выравниванием и стилем), уже регулировать отображение.
  24. Нет. FMX - совсем другой фреймворк, его нельзя сравнивать с привычным вам VCL.
×
×
  • Создать...