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

Brovin Yaroslav

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

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

  • Посещение

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

    390

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

  1. Каждый производитель делает клавиатуру по своим принципах. К сожалению, андроид никак не регулирует принцип работы такой клавиатуры с точки зрения взаимодействия такой клавиатуры с другими приложениями. После вашего сообщения, мы проверили несколько Swype клавиатур и на всех все работает корректно. На указанной вами, действительно проблема есть. Но она связана с тем, что сама версия клавиатуры ведет себя абсолютно по своим принципам. Например, вместо посимвольного набора слова, она при добавлении нового символа почему-то очищает только что набранное слово и тд. В вашем случае проще решить это, поставив более новую версию (например 3.26.92.37556) этой клавиатуры: http://4pda.ru/forum/index.php?showtopic=150358&st=6500#entry10426659, которая видимо исправляет это поведение.
  2. Chrome блокирует этот архив, как вредоносный Почему проект весит 45 мегабайт? Выложите согласно правилам, проект только с исходными кодами, необходимыми для воспроизведения поведения.
  3. Очевидно, если прочитать документацию на функцию RectF, можно обнаружить, что третий и четвертый параметр это правая и нижняя граница, а не ширина и высота соответственно. В связи с нарушением контракта функции создания прямоугольника, функция вполне корректно говорит о том, что пересечений прямоугольников нет. Для правильного создания TRectF, вы можете воспользоваться любым из предложенных по ссылкам ниже способам: RectF - старым способом. TRectF.Create - новым способом
  4. Добрый день, Никаких проблем с приобретением AppMethod нет. Как мне известно, можно приобрести у российских поставщиков и оплатить любым способом, и картой и СМС Например тут: http://allsoft.ru/software/software-engineering/development/appmethod/ Причем на сколько я знаю, цены в любом другом месте будут одинаковые. Поскольку это регулируется и отслеживается самой компанией. Лицензия на один год, можно приобрести для одной платформы (Android или iOS) за 10 600 руб, можно для всех платформ за 39 021 руб. P.S. Лицензия на месяц увы не продается.
  5. Добрый день, Собственно исключение оправдано. Вы пытаетесь в качестве картинки подсунуть видео. И считаете, что объект TBitmap почему-то должен работать с видео. Почему тогда туда не подсунуть аудио запись или файл экселя, полагая, что он выдаст скриншот файла и тд. Мысль я думаю понятна. Теперь к задаче: решить ее можно двумя путями: Простой. Храните вместе с видео обложку с видео. И когда нужно отобразить обложку просто загружать ее. Сложный. Поискать в интернете, как храниться обложка видео в видеофайле и написать код, который будет читать ее из файла.
  6. Добрый день, Посмотрите на тему: Автоматический переход на вторую строку TLabel Там рассказывается, как вычислить высоту текста.
  7. Вы можете использовать OnTap для этих целей. Он вызовется, только когда было непосредственно нажатие, без сдвига пальца.
  8. Нет, Как вариант, использовать заливку полигона или пути: procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); begin Canvas.Fill.Kind := TBrushKind.Solid; Canvas.Fill.Color := TAlphaColorRec.Red; Canvas.FillPolygon([TPointF.Create(0, 0), TPointF.Create(100, 0), TPointF.Create(100, 100)], 1); end;
  9. Укажите, какое устройство вы используете и какую программу Swype клавиатуры?
  10. Для OSX: uses FMX.Platform.Mac, Macapi.CoreGraphics; procedure SetFormMinSize(const AForm: TForm; const AMinSize: TSize); var MacHandle: TMacWindowHandle; begin MacHandle := WindowHandleToPlatform(AForm.Handle); MacHandle.Wnd.setMinSize(CGSizeMake(AMinSize.Width, AMinSize.Height)); end; procedure SetFormMaxSize(const AForm: TForm; const AMaxSize: TSize); var MacHandle: TMacWindowHandle; begin MacHandle := WindowHandleToPlatform(AForm.Handle); MacHandle.Wnd.setMaxSize(CGSizeMake(AMaxSize.Width, AMaxSize.Height)); end; procedure TForm1.Button1Click(Sender: TObject); begin SetFormMinSize(Self, TSize.Create(300, 100)); end;
  11. Добрый день, Два варианта: Как я могу скрыть / показать клавиатуру под "Android"? Сбросить фокус Edit.ResetFocus
  12. Добрый день, Лучше не использовать TClearingEdit, потому что TEdit поддерживает добавление специальных кнопок. И компонент TClearingEdit является частным случаем и не исключено, что он может быть в будущем удален. Чтобы можно было очистить поле Edit, не достаточно применить к нему стиль ClearingEditStyle. Необходимо, чтобы сам TEdit умел работать с объектами стиля. Но "clearingeditstyle" не предназначен для TEdit. Поэтому не смотря на то, что эдит будет выглядеть с кнопкой очисти, кнопка работать не будет. Как встроить кнопки в TEdit Обратите внимание, что при использовании этого способа, кнопка очистки будет автоматически очищать поле.
  13. Добрый день, Использование отдельного потока для длительной операции - хорошая практика. Вопрос о том, как вы будите информировать пользователя об этом ложится на ваши плечи. И зависит от того, чего вы хотите добиться. Способы индикации выполнения длительной операции В голову на первый взгляд мне приходят, например, такие способы: 1. Модальное окно с индикацией хода выполнения операции Полностью блокирует работу с приложением, до тех пор, пока операция не закончится или пользователь не отменит ее выполнение. Достоинства: Хорошо применимо, когда в вашем приложении много окон и вам нужно разом заблокировать все. Если вы идете этим путем, то вы можете сделать свою модальную форму со своим дизайном и любыми вариантами индикации вашей задачи, так же как вы работаете с FireMonkey. Такой подход будет кроссплатформенным и хорошо будет работать, как на Windows, так и на OSX. Недостатки: Если вы не используете специальные стили и хотите, чтобы ваше приложение выглядело на всех настольных версиях ОС, как родное, придется постараться, чтобы добиться полного соответствия с темой ОС. 2. Системное окно выполнения долгой операции Такой же способ, как и первый. Единственное отличие, что в этом способе вы используете диалоговое окно операционной системы. Достоинства: Такое диалоговое окно будет на всех версия ОС Windows выглядеть, как родное. Вам не надо будет заботиться о том, что оно будет выглядеть "не так" в какой-то версии Windows. Недостатки: Если вы используете свою стилизацию, отличную от системной. То вам придется изрядно попыхтеть, чтобы сделать нативный диалог в вашем стиле. Такое решение не кроссплатформенно. Вам придется отдельно реализовать такой диалог на разных платформах по разному. 3. Создание слоя, перекрывающего всю форму Заключается в размещении TLayout с TAniIndicator и TProgressDialog, перекрывающей все содержимое формы. Достоинства: В случаях, когда ваше приложение состоит из одной формы (без Docked окон), такое решение будет эффектно и красиво выглядеть. Кроссплатформенно Недостатки: Не позволяет полностью блокировать интерфейс, если ваше приложение состоит из нескольких окон (не модальных). 4. Локальное отображение выполнения операции Если действие не должно блокировать весь интерфейс, то лучше сделать отображение индикации локальным. Например, в примере выше, при отправке заявки, пока заявка выполняется, отображается индикатор в самой кнопки. Кнопка при этом блокируется. P.S. Если речь идет об андроиде, то обратите свое внимание на готовые компоненты отображения диалогов: FGX. Индикация хода выполнения длительных операций, виртуальная клавиатура и ActionSheet
  14. Добрый день, У FireMonkey нету готового решения из коробки. Но, можно реализовать вручную так: Получаем хендл окна формы: uses FMX.Platform.Win; //...... var WinHandle: TWinWindowHandle; begin WinHandle := WindowHandleToPlatform(Handle); // WinHandle.Wnd < -- Хендл окна end Вешаем Hook на оконную процедуру, используя полученный хендл и функции установки хука: Hook Functions В перекрытой нами оконной процедуре перехватываем сообщение WM_WINDOWPOSCHANGING и корректируем позицию окна, используя информацию о границе экрана и других окнах на экране. Таким способом можно сделать прилипание не только к границе экрана, но и к другим окнам (так же как прилипают между собой окна виджетов).
  15. Добрый день, Могу посоветовать вам прочитать две хорошие статьи, как это сделать: Пишем свой файловый менеджер для Android, #1 Пишем свой файловый менеджер для Android, #2 Нужно только адаптировать предложенное решение на ваш вкус и цвет, согласно вашему скриншоту. P.S. Если оформите, описанное в статьях, решение в виде фрейма, то в будущем сможете легко повторно это использовать.
  16. Это хороший вопрос. Я поясню. TListBox может иметь большое число элементов (Items, например 1000). Однако, реально из них отображается только видимая часть (Например 50). Отсюда приходит мысль, что не следует грузить стиль всем элементам в лист боксе, поскольку это займет очень много ресурсов: как процессорного времени на загрузку, так и памяти на хранение. При прокручивании TListBox, стили выгружаются с невидимых элементов, и загружаются для новых видимых. Каждый элемент TListBoxItem, хранит свои данные у себя (Text, IsChecked, Bitmap). Когда стиль загружается, сам элемент TListBoxItem, устанавливает нужные данные в объекты стиля в соответствии с хранимыми данными (Text, IsChecked, Bitmap). При выгрузке стиля установленные данные в объекты стиля, теряются. Если только они не были самостоятельно сохранены. Когда вы вручную самостоятельно добавляете свой объект в стиле, вы должны позаботиться о том, чтобы сохранить задаваемые данные для элементов и восстановить эти значения при очередной загрузке стиля. TStyledControl поддерживает встроенный механизм кэширования пользовательских данных через StylesData. При использовании StylesData контрол автоматически сохраняет ваше значение в своем словаре и при смене стиля самостоятельно обновляет свойства объектов стиля в соответствии с хранимыми данными в словаре. О том, как работать с StylesData можно прочитать тут: Доступ к элементам стиля StylesData Когда вы стали использовать вариант с icon, то по сути сам TListBoxItem за вас восстановил иконку, поскольку это заложено в его базовое поведение P.S. Используйте StylesData.
  17. В FireMonkey нету поддержки ограничений размеров, как это есть в VCL. Поэтому на текущий момент, вы можете сделать: Либо общими средствами FM, через OnResize. Но он вас не устраивает. Второй напрямую использовать WinApi WM_GETMINMAXINFO. Но для этого придется протянуть из FMX.Platform.Win.pas наружу обработку этого сообщения.
  18. И правильно, у вас в разных местах путь к вашему Java классу по разному написан. В одном случае это: com.antareyanimation В другом почему-то: com/antarey/AntareyAnimation Почистите код и внимательно все проверьте. У вас целая куча неряшливого кода, в котором вы просто погрязните.
  19. Отвечу, но тему все равно создайте новую типа: "Как вызвать метод java объекта", чтобы другим тоже помогла. Как вы понимаете, в JAVA все объекты. Поэтому, чтобы вызвать какой-либо метод объекта, нужно вначале создать объект, если речь конечно не идет о статическом методе или методе класса (одно и тоже). Если у вас статический метод (в java помечен ключевым словом static) //Toast zxczx = Toast.makeText(context, "Привет", Toast.LENGTH_SHORT); var Toast: JToast; begin Toast := TJToast.JavaClass.makeText(SharedActivity, StringToJString('Привет'), TJToast.JavaClass.LENGTH_SHORT); Обратите внимание, что метод makeText статический! Значит он запрашивается через JavaClass, как и константы java-класса. Если у вас метод класса: var Animation: JAntareyAnimation; begin Animation := TJAntareyAnimation.Create; Animation.Rotate3D; end;
  20. Для начала нужно понять, что вы имеете в виду тут: procedure Rotate3D(); begin CallInUIThread( procedure() begin Rotate3D(); end); end; Это бесконечная рекурсия с запуском в UI потоке. Вообще в коде не вижу, как вы вызываете ваш java код.
  21. Для версий выше, включая XE7 Используйте специальную утилиту для автоматического получения pas файлов: "Утилита генерации pas файлов для AndroidAPI из jar файлов" Актуально для XE6 и ниже Связь происходит автоматически по атрибуту: [JavaSignature('android/widget/Toast')] Дополнительно советую зарегистрировать типы таким образом: procedure RegisterTypes; begin TRegTypes.RegisterType('com.antarey.AntareyAnimation', TypeInfo(<Название вашего юнита>.JAntareyAnimation)); end; initialization RegisterTypes; end. Базовый интефейс для вашего класса, например для Toast должен соответствовать базовому классу Toast в Android Api. Например, если Toast в Android API наследуется от java.lang.Object, то на стороне делфи обертка JToast должна расширять интерфейс JavaObject JToastClass = interface(JObjectClass) .... JToast = interface(JObject) Как у вас и написано в вопросе. Мост программно проверит классы помеченные атрибутом JavaSignature (JavaSignatureAttribute - классовая реализация атрибута). И для них сделает связь с нативным классом. Если вы неправильно укажите сигнатуру методов в интерфейсе JToast или неправильно определите базовый интерфейс, то будет ошибка при попытке вызова неправильного метода, а не на этапе компиляции, так как мост программный. При этом нужно знать: Что не обязательно транслировать в JToast все методы из Android Api, достаточно объявить только нужные вам.
  22. Оставлю здесь только два факта: <TControl>!= <View> <TForm> = <View> Из которых следует, что использовать анимацию от нативного View не получится для анимации контрола. Максимум может получится для анимации самой формы, но тоже далеко не факт.
  23. В FireMonkey у объекта TApplication нету Handle. Поэтому, как его получить читаем тему: [Windows] Как получить HWND Application? P.S. В следующий раз я такую тему закрою, так как она не соответствует правилам.
×
×
  • Создать...