kami
-
Постов
643 -
Зарегистрирован
-
Посещение
-
Победитель дней
41
Сообщения, опубликованные kami
-
-
3 часа назад, Wovan2 сказал:
А что конкретно в этих байтах - это уже кодировка.
Да, это правильно.
3 часа назад, Wovan2 сказал:На Windows - ANSI(первый байт 0)
Нет, на Windows - UTF-16
3 часа назад, Wovan2 сказал:Как все же правильно работать с кодировками, чтобы всегда знать, в какой кодировке находятся строки в которыми ты работаешь в данный конкретный момент, на данном конкретном компе?
Внутри приложения не стоит заморачиваться на это. Всё приложение работает в единой кодировке и никаких проблем с передачей из класса в класс, из метода в метод, из модуля в модуль нет и не будет.
Другое дело - общение с "внешним миром". Самые простые случаи - сохранение /загрузка текста в файл, общение по сети.
В этом случае необходимо просто явно указывать кодировку при получении и отправке данных.
-
57 минут назад, Wovan2 сказал:
Свойство s.Encoding только для чтения
Зато его можно указать в конструкторе.
1 час назад, Wovan2 сказал:В Delphi строка закодирована в ANSI. (Или в Windows???)
Нет. Исходная string в версиях от 2009 и выше - это UnicodeString. В большинстве случаев можно считать как WideString или UCS-2. Кодировка по 2 байта на символ. ANSI - это 1 байт на символ.
Действительно, получившийся у Вас код не есть супер-красив. Я продолжаю считать, что всего навсего явное указание Encoding для StringStream снимет эти проблемы. Всякие остальные преобразования, включая явные упоминания конкретных TEncoding и функций перекодировки не нужны.
-
38 минут назад, Wovan2 сказал:
mem.Lines.Add(Utf8ToAnsi(s.ReadString(s.Size)));
Одна из ошибок здесь.
Во-первых, ReadString уже возвращает строку. В той кодировке, которую правильно воспримет memo.
Во-вторых, ReadString читает байты как строку, считая что это заранее заданная кодировка. По умолчанию, емнип, идет ANSI. Во внутренностях ReadString сразу идет преобразование из выбранной кодировки в дефолтную на выбранной платформе.Требуется: убрать напрочь излишнее UTF8ToAnsi
У каждого StringStream сразу после создания подставить s.Encoding:=TEncoding.UTF8;
Имхо, этого хватит. -
В 10.11.2017 в 20:23, FREEFAR сказал:
mapFrame.DisposeOf;
mapFrame.Parent := nil;Я бы поменял их местами.
Несколько странно сперва уничтожать объект, а потом обращаться к его полям и методам...
-
11 час назад, Akad сказал:
Точно ни где ошибка не вкралась?
Точно. Полная копипаста из моего модуля.
Под Win - лечит, опробовано лично. Про Андроид - не скажу, не знаю.
11 час назад, Akad сказал:Всё те же падения под win
Так разберитесь, где именно падает. Что за стек вызовов, с какими параметрами. Оттрассируйте и предложите фикс.
-
Апну тему.
На этот раз - 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, и в дальнейшем ничего не мешает его спокойному уничтожению.
-
В 03.11.2017 в 19:00, wamaco сказал:
как Вы это сделали
Можно поподробнее, про что поподробнее?
Скачал последний 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 пары событий - это не знаю...
-
1 час назад, Wovan2 сказал:
Не могу найти ни одного примера использования.
Там искать нечего. В глубине тетеринга эта команда - всего лишь совокупность
SendCommand(AConnection, ACommand); Result := ReceiveCommand(AConnection);
Получается, что (как видно из названия и кода) она отправляет команду (как обычно, т.е. обработка на приеме ничем не отличается) и ждет, пока получит команду в ответ.
Единственное что - следует самому создавать TTetheringCommand со своими параметрами, а не пользоваться готовыми SendStream и SendString
-
1 час назад, mazayhin сказал:
воспользуйтесь готовым IXMLDocument
Далеко не каждый 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 удалял ручками из папки документов).
Главное - есть результат. Если нужны какие-то подробности - пишите, постараюсь ответить (хотя с моей точки зрения - всё это были танцы с бубном).
-
Что значит "не работает"? Конкретнее, пожалуйста.
-
Дочерние компоненты удалятся, если на них не осталось ссылок.
-
В 05.12.2016 в 17:54, Rusland сказал:
как сделать чтобы на разные Edit открывались разные клавиатуры
Слегка запоздалый ответ, но... Выставляешь нужные keyboardtype полям ввода ... и всё. Если нужно анализировать какие-то другие поля - в моей клаве есть метод GetKeyboardTypeForObject, в котором можно провести нужные (не предусмотренные штатным механизмом) манипуляции
-
Раз уж пошла такая пьянка - выложу сюда то, что по виртуальной клавиатуре есть у меня на текущий момент (в телеграме уже выложил).
Поддерживаются операционные системы: iOS, Windows. Оттестировано на 10.1 (Berlin)
Итак: архив распаковать куда угодно, в проект в uses подключить модули uCommonCustomKeyboard (отвечает за подмену "штатной виртуальной клавиатуры" на свою) и ufrCustomNumpad (отвечает за отображение цифровой клавиатуры).
Алфавитную, e-mail-овскую и тому подобные виды клавиатур оставляю на ваше усмотрение. Они делаются на основе ufrCustomNumpad, там больше заморочек с красивым размещением кнопок, чем с кодом.
-
-
NewBitmap.Assign(SourceBitmap);
or
NewBitmap.CopyFromBitmap(SourceBitmap);
-
-
А в 10.2 исправлена вот эта штука?
-
Завтра!!!
5 октября, в 19:00, на "Чердаке" ( https://yandex.ru/maps/-/CBUIUKb0PD Куйбышева 38/40, ближайшее метро - Горьковская ) (А то сам уже почти забыл )
-
1 час назад, Volodja сказал:
Вот код.
Не забываем выставлять Parent у объектов.
3 минуты назад, Volodja сказал:Вот такая очистка корректна?
Не уверен, а копаться лень.
Вариантов "правильной" очистки в FMX несколько, например:
for i:=lbCells.Count-1 downto 0 do lbCells.ItemByIndex(i).Release;
-
2 часа назад, Volodja сказал:
какой-то TGridPanelLayout
Этот компонент - контейнер из сетки "панелек", Опять-таки, на каждую из этих панелек можно накидать чего-нибудь.
-
2 часа назад, Volodja сказал:
на TListBox или на TListView можно как-то наложить какой-то TGridPanelLayout.
для начала можно использовать TListBox. он попроще в понимании и подходит для небольших объемов информации. На объемах от двух экранов и более начинает тормозить, там уже нужен ListView, у которого совсем другой подход.
Вкратце: у TListBox есть элементы, которые (если проводить аналогию с vcl) - просто панельки. На эти "панельки" можно накидать любые компоненты и, выставляя их свойства (начиная от текста и заканчивая выравниванием и стилем), уже регулировать отображение.
-
46 минут назад, Volodja сказал:
Может есть варианты попроще?
Нет. FMX - совсем другой фреймворк, его нельзя сравнивать с привычным вам VCL.
IdTCPClient, IdTCPSever - снова о кодировке
в TIdTCPClient
Опубликовано
Пусть хоть китайской традиционной считает. Повторюсь - абсолютно без разницы, что за кодировка внутри приложения. Главное, чтобы общение (ввод/вывод) с внешним миром шло с явным указанием кодировки, поскольку автоопределение и/или считание кодировкой по умолчанию рано или поздно приведет к фейлу.