kami
Пользователи-
Постов
643 -
Зарегистрирован
-
Посещение
-
Победитель дней
41
Весь контент kami
-
Пусть хоть китайской традиционной считает. Повторюсь - абсолютно без разницы, что за кодировка внутри приложения. Главное, чтобы общение (ввод/вывод) с внешним миром шло с явным указанием кодировки, поскольку автоопределение и/или считание кодировкой по умолчанию рано или поздно приведет к фейлу.
-
Да, это правильно. Нет, на Windows - UTF-16 Внутри приложения не стоит заморачиваться на это. Всё приложение работает в единой кодировке и никаких проблем с передачей из класса в класс, из метода в метод, из модуля в модуль нет и не будет. Другое дело - общение с "внешним миром". Самые простые случаи - сохранение /загрузка текста в файл, общение по сети. В этом случае необходимо просто явно указывать кодировку при получении и отправке данных.
-
Зато его можно указать в конструкторе. Нет. Исходная string в версиях от 2009 и выше - это UnicodeString. В большинстве случаев можно считать как WideString или UCS-2. Кодировка по 2 байта на символ. ANSI - это 1 байт на символ. Действительно, получившийся у Вас код не есть супер-красив. Я продолжаю считать, что всего навсего явное указание Encoding для StringStream снимет эти проблемы. Всякие остальные преобразования, включая явные упоминания конкретных TEncoding и функций перекодировки не нужны.
-
Одна из ошибок здесь. Во-первых, ReadString уже возвращает строку. В той кодировке, которую правильно воспримет memo. Во-вторых, ReadString читает байты как строку, считая что это заранее заданная кодировка. По умолчанию, емнип, идет ANSI. Во внутренностях ReadString сразу идет преобразование из выбранной кодировки в дефолтную на выбранной платформе. Требуется: убрать напрочь излишнее UTF8ToAnsi У каждого StringStream сразу после создания подставить s.Encoding:=TEncoding.UTF8; Имхо, этого хватит.
-
Я бы поменял их местами. Несколько странно сперва уничтожать объект, а потом обращаться к его полям и методам...
-
windows Вызов TPopup ломает поведение TWebBrowser
kami ответил Вадим Смоленский вопрос в TWebBrowser
Точно. Полная копипаста из моего модуля. Под Win - лечит, опробовано лично. Про Андроид - не скажу, не знаю. Так разберитесь, где именно падает. Что за стек вызовов, с какими параметрами. Оттрассируйте и предложите фикс. -
windows Вызов TPopup ломает поведение TWebBrowser
kami ответил Вадим Смоленский вопрос в TWebBrowser
Апну тему. На этот раз - 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, и в дальнейшем ничего не мешает его спокойному уничтожению. -
Можно поподробнее, про что поподробнее? Скачал последний 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) не вижу смысла приводить. Тщательно разбирайте ошибки компиляции и деплоя и будет вам счастье
-
TTetheringCommand - есть метод Create, принимающий TBytes А вот почему 3 пары событий - это не знаю...
-
Там искать нечего. В глубине тетеринга эта команда - всего лишь совокупность SendCommand(AConnection, ACommand); Result := ReceiveCommand(AConnection); Получается, что (как видно из названия и кода) она отправляет команду (как обычно, т.е. обработка на приеме ничем не отличается) и ждет, пока получит команду в ответ. Единственное что - следует самому создавать TTetheringCommand со своими параметрами, а не пользоваться готовыми SendStream и SendString
-
Далеко не каждый html-документ валиден с точки зрения xml, поскольку допускает применение открывающих тегов без закрывающих. Посему - html может просто не загрузиться в IXMLDocument.
-
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 удалял ручками из папки документов). Главное - есть результат. Если нужны какие-то подробности - пишите, постараюсь ответить (хотя с моей точки зрения - всё это были танцы с бубном).
-
Что значит "не работает"? Конкретнее, пожалуйста.
-
Слегка запоздалый ответ, но... Выставляешь нужные keyboardtype полям ввода ... и всё. Если нужно анализировать какие-то другие поля - в моей клаве есть метод GetKeyboardTypeForObject, в котором можно провести нужные (не предусмотренные штатным механизмом) манипуляции
-
Раз уж пошла такая пьянка - выложу сюда то, что по виртуальной клавиатуре есть у меня на текущий момент (в телеграме уже выложил). Поддерживаются операционные системы: iOS, Windows. Оттестировано на 10.1 (Berlin) Итак: архив распаковать куда угодно, в проект в uses подключить модули uCommonCustomKeyboard (отвечает за подмену "штатной виртуальной клавиатуры" на свою) и ufrCustomNumpad (отвечает за отображение цифровой клавиатуры). Алфавитную, e-mail-овскую и тому подобные виды клавиатур оставляю на ваше усмотрение. Они делаются на основе ufrCustomNumpad, там больше заморочек с красивым размещением кнопок, чем с кодом. CustomKeyboards.7z
-
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;
-
NewBitmap.Assign(SourceBitmap); or NewBitmap.CopyFromBitmap(SourceBitmap);
-
Где фотоотчет и краткое содержание? @Vitaldj , @Error Телеграм телеграмом, но далеко не все там сидят, да и темы в чате быстро уходят в небытие. Срочно зафиксировать здесь для потомков!
-
Завтра!!! 5 октября, в 19:00, на "Чердаке" ( https://yandex.ru/maps/-/CBUIUKb0PD Куйбышева 38/40, ближайшее метро - Горьковская ) (А то сам уже почти забыл )
-
Не забываем выставлять Parent у объектов. Не уверен, а копаться лень. Вариантов "правильной" очистки в FMX несколько, например: for i:=lbCells.Count-1 downto 0 do lbCells.ItemByIndex(i).Release;
-
Этот компонент - контейнер из сетки "панелек", Опять-таки, на каждую из этих панелек можно накидать чего-нибудь.
-
для начала можно использовать TListBox. он попроще в понимании и подходит для небольших объемов информации. На объемах от двух экранов и более начинает тормозить, там уже нужен ListView, у которого совсем другой подход. Вкратце: у TListBox есть элементы, которые (если проводить аналогию с vcl) - просто панельки. На эти "панельки" можно накидать любые компоненты и, выставляя их свойства (начиная от текста и заканчивая выравниванием и стилем), уже регулировать отображение.
-
Нет. FMX - совсем другой фреймворк, его нельзя сравнивать с привычным вам VCL.