-
Постов
2 124 -
Зарегистрирован
-
Посещение
-
Победитель дней
390
Весь контент Brovin Yaroslav
-
Полная поддержка Bluethooth была добавлена в RAD Studio XE7
-
В FMX работа с канвой принципиально отличается от работы в VCL. В VCL канва была у каждого оконного контрола своя. В FMX одна канва на все контролы в одной форме. Несколько важных фактов, которые помогут вам: Канва одна на всю форму и на все контролы формы. Из пункта 1 следует - Значит каждый контрол рисует себя на одной общей канве При передачи управления на отрисовку контролу, канве задаются настройки (матрица трансформации, кисти и тд) таким образом, чтобы отрисовка выполнялась в локальных координатах контрола. Значит если вы рисуете в другом месте, то отрисовка выполняется в глобальных координатах формы. По этому отрисовку нужно выполнять в абсолютных координатах (координатах формы) Прямую отрисовку на форме нельзя выполнять по нажатию на кнопку. Так как в FMX есть четкая последовательность фаз отрисовки. Места отведенные для рисования - это событие OnPaint. В противном случае, не гарантируется корректная отрисовка на всех платформах.
-
Я в процессе создания версии для XE7... Постараюсь на следующей неделе доделать.
- 21 ответ
-
- opensource
- tfgactivitydialog
-
(и ещё 2 )
C тегом:
-
TScrollBox Как прокрутить TScrollBox в самый низ?
Brovin Yaroslav ответил ruslan вопрос в TScrollBox
В XE7 мне не удалось воспроизвести вашу ситуацию. TScrollBox прокручивается до самого низа при использовании кода: ScrollBox1.ScrollBy(0, -ScrollBox1.ContentBounds.Height); -
Дело тут скорее не в свойстве Scale. представьте у вас есть картинка 32 на 32 точки. Вам нужно сжать ее до размеров 20 на 20. Естественно, что способов сжатия такого изображения множество. Можно сжать способом по умолчанию (так как это принято в используемой FMX графической библиотеке), через Scale, но в таком случае изображение может потерять четкость. Это неизбежно. Но разные алгоритмы могут снизить этот эффект. Так что тут речь скорее о алгоритмических задачах сжатия с минимальными потерями качества.
-
Совет: Самый действенный способ, по моему опыту. Это завести в QC баг и прикрепить проект, на котором это гарантированно воспроизводится. Тогда с большой долей вероятности такая ошибка будет исправлена. Остальное обсуждение ошибок в любых других местах не сделает исправление этих ошибок ближе.
-
Это была ошибка в ХЕ5. В ХЕ6 ее должны были исправить. Сейчас такой проблемы быть уже не должно.
-
-
В вашим проекте у вас ошибка. Посмотрите внимательно на: CornerButton1.StyleName = 'CornerButtonImageStyle'. Должен быть пуст в вашем случае CornerButton1.StyleLookupName = 'CornerButton1Style1'. Хотя в стиле ваш стиль назван: "CornerButtonImageStyle"
- 2 ответа
-
- TCornerButton
- StyleLookup
-
(и ещё 1 )
C тегом:
-
SplashScreen Заставка приложения для Android
Brovin Yaroslav ответил Brovin Yaroslav вопрос в Что нового?
Для iOS такая функция была добавлена еще в XE4 -
Запустил ваш проект, моргания пи открытии формы не вижу.
-
В XE7 появилась функция задания заставки приложения для андроид устройств. Если раньше пользователям приходилось создавать свои решения этой задачи (Как создать заставку для андроид приложения?), то теперь заставку можно легко указать в настройках проекта:
-
Добрый день, ShowMessage MessageDlg и другие производные
-
В XE6 появился специальный сервис для контролирования смены состояния приложения IFMXApplicationEventService. Он позволяет задать свой обработчик на событие смены состояния. Всего поддерживаются следующие типы состояний TApplicationEvent: FinishedLaunching - приложение запущено BecameActive - приложение стало активным, после того, как до этого было свернутым. WillBecomeInactive - приложение будет активировано EnteredBackground - приложение свернулось WillBecomeForeground - приложение будет свернуто WillTerminate - приложение будет завершено LowMemory - Нехватка памяти OpenURL - открытие приложение по ссылке. 1 Способ. Запрос сервиса IFMXApplicationEventService Соответственно, чтобы узнать о смене состояния нужно: Запросить сервис: uses FMX.Platform; var ApplicationService: IFMXApplicationEventService; begin TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, ApplicationService); Создать свой обработчик и задать его при помощи полученного сервиса: function TForm1.ApplicationEventChanged(AAppEvent: TApplicationEvent; AContext: TObject): Boolean; begin // Здесь получаем новое состояние приложения end; var ApplicationService: IFMXApplicationEventService; begin TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, ApplicationService); if ApplicationService <> nil then ApplicationService.SetApplicationEventHandler(ApplicationEventChanged); end; 2 Способ. Подписка на получение сообщения: Вместе со сменой состояния платформа FMX осуществляет широковещательную рассылку сообщения о смене состояния: TApplicationEventMessage Второй способ заключается в подписке на это сообщение: Подписываемся на получение сообщения TApplicationEventMessage: uses System.Messaging; // Подписка TMessageManager.DefaultManager.SubscribeToMessage(TApplicationEventMessage, DoApplicationEventChanged); Получаем сообщения procedure DoApplicationEventChanged(const Sender: TObject; const Message: TMessage); begin end; Не забываем отписаться от сообщений, когда это больше уже не нужно: // Отписка TMessageManager.DefaultManager.Unsubscribe(TApplicationEventMessage, DoApplicationEventChanged);
-
На счет сеттера я ошибся, не обратил внимание, что это TImage. Ошибка в неправильном подходе создания собранного компонента. Вы создаете в конструкторе объект TImage и добавляете его прямо к компоненту. Если вы не сбрасываете для TImage stored, то TImage будет сериализован в ресурсы формы (fmx - файл). НО при открытии формы заново, ваш компонент создаст опять новый объект TImage и + при чтении данных из ресурсов, общий механизм десериализации объектов восстановит старый TImage и в итоге вы получите два TImage. Если вы говорите, что TImage не должен сохраняться в ресурсы. То при копировании объекта TImаge не будет копироваться, так как при копировании объекта в IDE по сути происходит копирование части ресурсов, относимые к этому объекту. В вашем случае нужно создать поля для хранения именно картинки TBitmap, открыть доступ к этому полю на запись и чтения. И в сеттере выполнять присваивание вашей картинки из поля TBitmap в TImage, который вы создаете динамически, но не сохраняете его в ресурсы (Stored = False) P.S. Кстати, такая тема частично уже обсуждалась на форуме: Как добавить в свой компонент TImage и дать возможность менять картинку? посмотрите
-
В XE7 описанные ошибки не воспроизводятся.