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

Brovin Yaroslav

Администраторы
  • Постов

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

  • Посещение

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

    390

Весь контент Brovin Yaroslav

  1. Может меняется порядок инициализации юнитов, которая приводит к неправильному порядку?
  2. По скольку указанная мною цена оказалась для участников форума завышенной. То я сбрасываю цену: Учащиеся - 1 000 р Остальные - 1 200 р
  3. С моей точки зрения, метод TThread.Queue имеет один весомый недостаток. А именно: Если вызов метода TThread.Queue идет в главном потоке, то код будет вызыван немедленно. class procedure TThread.Queue(const AThread: TThread; AMethod: TThreadMethod); var LSynchronize: PSynchronizeRecord; begin if AThread <> nil then AThread.Queue(AMethod) else begin New(LSynchronize); try LSynchronize.FThread := nil; LSynchronize.FSynchronizeException := nil; LSynchronize.FMethod := AMethod; Synchronize(LSynchronize, True); // <-- Смотрим сюда finally if MainThreadID = CurrentThread.ThreadID then Dispose(LSynchronize); end; end; end; А потом на кусочек этого кода: class procedure TThread.Synchronize(ASyncRec: PSynchronizeRecord; QueueEvent: Boolean = False); var SyncProc: TSyncProc; SyncProcPtr: PSyncProc; begin if CurrentThread.ThreadID = MainThreadID then begin if Assigned(ASyncRec.FMethod) then ASyncRec.FMethod() else if Assigned(ASyncRec.FProcedure) then ASyncRec.FProcedure(); end else Из реализации метода Synchronize, как раз и видно, что код будет вызван немедленно, если текущий тред - это главный поток. Итог TThread.Queue заменяет PostMessage, если вызов идет не из главного потока. Если вызов TThread.Queue идет из главного потока, то это равносильно прямому вызову процедуры или метода.
  4. Если вы хотите, чтобы ваш класс компонента мог быть использован в TStyleBook, нужно пометить ваш дизайн тайм пакет, как всегда загружаемым: ForceDemandLoadState(dlDisable); В этом случае при старте среды, ваш пакет с компонентами не зависимо от того, использует ли среда или нет, будет загружен. А значит ваши компоненты будут зарегистриованы в среде.
  5. Эта ошибка говорит, что в мемо строк больше, чем о них знает презентация, которая их рисует. Теоретически такая ситуация могла произойти при многопоточной записи.
  6. Запись в мемо осуществлялась всегда в одном потоке? Ваше приложение похоже на логгер от нескольких клиентов. Не могло ли получиться так, что у вас два разных потока одновременно пытались вывести сообщение в мемо?
  7. Добрый день, Да, ошибку исправлю. Используйте ComboBox.Clear; Вместо: ComboBox.Items.Clear;
  8. Да, конечно. У TPresentedControl есть методы для этого. Но они к сожалению в протектед секции. Я повышу им область видимости, так как здесь нету причин делать их protected. А пока делаем старым "дедовским способом": type TOpenPresentedControl = class(TPresentedControl); TOpenPresentedControl(Edit).ReloadPresentation;
  9. Раньше нельзя было прикреплять 7z файлы. Я после вашего сообщения добавил эти файлы в список разрешенных к прикреплению.
  10. У вас остались собранные файлы от предыдущей версии моей библиотеки. Потому что в последней версии в файлах FGX.Helpers.Androd нету функции GetNativeTheme. Поищите и удалите все dcu файлы с префиксом FGX.
  11. Прочитать всю новость целиком на сайте Embarcadero
  12. Прочитать всю новость целиком на сайте Embarcadero
  13. Могу вам предложить использовать TListBox.OnItemClick. Он возвращает в параметры выделенный итем. Из него можно извлечь текст и передать в ApplySelection
  14. Для Label1. Уберите WordWrap = False. Сейчас он True, поэтому на андроиде у вас идет перенос текста. Почему на винде все ок. не знаю. Нужно смотреть. На счет Label2 и артефактов снизу, пока не могу их получить, как у вас на скриншоте.
  15. У меня компонент состоит из двух частей: Внутреннее представление документа. Оно состоит из базовых элементов и служебных. Базовые - отображают что-то (текси, картинки, параграфы, списки) и служебные (перенос строк, смена параметров шрифта вложенных элементов) Парсеры. Пока у меня есть очень в зачаточном состоянии HTML парсер, который считывает разметку и генерирует на входе представление документа. По идеи у меня заложено, что можно сделать свой парсер, который будет разбирать любой документ. Но времени на парсер особо нет. Меня больше интересует первая часть. Так как она основопологающая.
  16. На текущий момент у меня есть только прототип. Не все гладно в архитектурном плане. Нужно переработать некоторые моменты внутреннего представления документа. Когда это будет готово и отлажено, тогда я думаю имеет смысл будет уже выложить компонент с базовым функционалом.
  17. Дело в том, что в андроиде нету нормального ввода текста. Весь ввод идет через IME. А вот цифры идет отдельно, поэтому ввод цифр шел напрямую в всплывающее окно. MM_Data_Changed - это уведомление, когда пользователь меняет значение свойства в Model.Data. DoChangeTracking (Аналог MM_EDIT_TEXT_CHANGING) - это уведомление о том, что текст в TEdit меняется. Поэтому это две разных по сути сущности Если вы хотите, чтобы при изменении данных в моделе, модель не уведомляла об этом презентацию, то используйте парные методы модели: Model.DisableNotify; try // Меняем данные в моделе без уведомлений finally Model.EnableNotify; end;
  18. Любопытная ошибка. Попробуйте внести следующие изменения в FMX.Platform.Android.pas так: Найдите метод function TWindowManager.FindTopWindow: TAndroidWindowHandle; var I: Integer; begin for I := FWindows.Count - 1 downto 0 do if FWindows[I].Form.Visible then Exit(FWindows[I]); Result := nil; end; И замените условие IF на следующее: if FWindows[I].Form.Visible and not (FWindows[I].Form is TCustomPopupForm) then По идеи это должно помочь
  19. В текущую версию добавлена поддержка: Нумерованные списки Ненумерованные списки Форматированный код. Пока только сохранение отступов в коде и применение моношрифта. В будущем планирую добавить систему плагинов расширяющих базовые элементы разметки для реализации подсветки кода. Добавлено прокручивание текста
  20. Добрый день, При добавлении маркера, методы возвращаюют вам инстанс маркера. /// <summary>Add marker specified by Descriptor and return new TMapMarker object</summary> function AddMarker(const Descriptor: TMapMarkerDescriptor): TMapMarker; /// <summary>Add circle specified by Descriptor and return new TMapCircle object</summary> function AddCircle(const Descriptor: TMapCircleDescriptor): TMapCircle; /// <summary>Add polygon specified by Descriptor and return new TMapPolygon object</summary> function AddPolygon(const Descriptor: TMapPolygonDescriptor): TMapPolygon; /// <summary>Add polyline specified by Descriptor and return new TMapPolyline object</summary> function AddPolyline(const Descriptor: TMapPolylineDescriptor): TMapPolyline; Сохраните его. И когда нужно будет его удалить, выполните: Marker.Remove; Marker.Free; Или Marker.DisposeOf;
  21. Добрый день, Изменилось, был добавлен метод: TWebBrowser.LoadFromStrings(const Content: string; const BaseUrl: string); Content - текст вашей страницы, BaseUrl - это фейковый путь, по которому якобы размещается ваша страница.
×
×
  • Создать...