-
Постов
414 -
Зарегистрирован
-
Посещение
-
Победитель дней
36
Активность репутации
-
Barbanel получил реакцию от Anatoliy в Возможности Androidapi
Правильно.
Насколько я знаю, не ко всему. Конкретный пример вспомнить не смогу, но некоторые вещи приходится тащить отдельно.
Также, некоторые вещи проще написать на Java и потом импортировать эти библиотеки в FMX.
Однако, бОльшая часть необходимых процедур апи - в наличии, этого вполне достаточно чтобы собрать полноценное приложение со средними я бы сказал запросами.
-
Barbanel получил реакцию от d7d1cd в Возможности Androidapi
Правильно.
Насколько я знаю, не ко всему. Конкретный пример вспомнить не смогу, но некоторые вещи приходится тащить отдельно.
Также, некоторые вещи проще написать на Java и потом импортировать эти библиотеки в FMX.
Однако, бОльшая часть необходимых процедур апи - в наличии, этого вполне достаточно чтобы собрать полноценное приложение со средними я бы сказал запросами.
-
Barbanel отреагировална Alex7wrt в Реализовать рейтинг
Да все норм. Мне самому рисунок не очень понравился ))
Рисовал его в ворде года два назад, когда хотел понять, как удобнее рисовать звезду. Когда понял, то рисунок уже не было смысла доводить до ума, так что таким он и остался.
Но вот щас все-таки решил доделать. Исправил изображение )
-
Barbanel отреагировална Alex7wrt в Реализовать рейтинг
Надеюсь, что в предыдущем посте помог ответить на первую часть вопроса.
Если каждая звезда организована отдельным компонентом, то, соответственно, вы всегда можете узнать по какой звезде был клик и раскрасить все звезды до нее (включительно) в желтый цвет.
Ниже скинул программку для герерации TPathData звезды, может пригодится
star generator.zip
Можно использовать генерируемую строку TPathData, или использовать код
procedure star; var i: byte; a1,a2: single; begin Path.Clear; Path.MoveTo(PointF(0,-r)); a1:=Pi/5-Pi/2; a2:=-Pi/2; for i:=1 to 5 do begin Path.LineTo(PointF((r*cos(Pi/5)-d)*cos(a1+(i-1)*2*Pi/5),(r*cos(Pi/5)-d)*sin(a1+(i-1)*2*Pi/5))); Path.LineTo(PointF(r*cos(i*2*Pi/5+a2),r*sin(i*2*Pi/5+a2))); end; Path.ClosePath; path.Translate(r*cos(Pi/10),r); end; Где R - радиус описанной окружности вокруг звезды. В програме он равен 100. d - Разность радиусов внешней и внутренней окружности согласно рисунка
-
Barbanel получил реакцию от Ingalime в Элементы стиля на Андроид
Возможно это не работает потому, что для Андроида у вас нет стиля, либо он называется не так, либо в данном стиле нет нет элемента с именем 'BackgroundColor'.
Проверьте стили и убедитесь что структура имен совпадает.
-
Barbanel получил реакцию от ENERGY в Элементы стиля на Андроид
Я так и думал.
то что он один - не означает что он для всех платформ.
ЕМНИП, дефолтный стиль предназначен для Виндовс.
Давайте в этом точно разберемся.
Сохраните стиль в файл, при сохранении выберите расширение файла .style
Откройте этот файл текстовым редактором.
Найдите в нем блок "object TStyleDescription"
Покажите что стоит в поле "PlatformTarget" и "MobilePlatform".
Или покажите весь блок.
-
Barbanel получил реакцию от Anatoliy в Элементы стиля на Андроид
1) Было что-то не так со стилем. Удалил из стилей все элементы, кроме двух простейших прямоугольников для background. После этого ошибка более не проявлялась.
2) Убедился что стиль для андроида доступен на устройстве, и нужные объекты присутствуют.
Действительно, под Андроид данный код не работает, и стили здесь ни при чем.
Что характерно, форма не обновляется, если ей присвоить новый стиль в рантайме. Внешний вид формы остается прежним.
Если вместо формы использовать например панель - стиль меняется.
Изменить цвет заливки конкретно в ресурсе у меня не удалось.
Это работает стандартным образом:
AObject := Panel1.FindStyleResource('backgroundrect'); if (AObject is TRectangle) then TRectangle(AObject).Fill.Color := TAlphaColorRec.Yellow; Если позарез нужно менять стиль формы в рантайме - положите на нее панель с align=alClient, и меняйте стиль панели.
Попробуйте, может вас устроит такой способ.
И да, расскажите, для чего вы меняете цвет именно в ресурсе, а не в примененном стиле объекта.
Мне правда интересен такой кейс.
-
Barbanel отреагировална Tumaso в Raise убивает программу для Android
У Эмбы есть описание подобной проблемы: http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Migrating_Delphi_Code_to_Mobile_from_Desktop, раздел Use a Function Call in a try-except Block to Prevent Uncaught Hardware Exceptions
условно говоря, код, который может вызвать аппаратное исключение, нужно вызывать из другой процедуры, и исключение ловить уже там. Это справедливо не только для iOS, но для андроида тоже.
пример:
procedure InternalG1; begin try // что то, приводящее к исключению except // здесь обработчик по факту игнорируется end; end; procedure G1; begin try InternalG1; except // здесь обработчик корректно обработает исключение end; end; А вообще у Grijjy team есть хорошая библиотека обработки необработанных исключений для андроида и иоса.
-
Barbanel получил реакцию от Alisson R Oliveira в При LongTap срабатывают и OnTap и OnClick
У изображения нужно настроить на какие жесты он реагирует. Кинь на форму TGestureManager, потом настрой поля как показано ниже в коде.
OnClick - срабатывает при касании объекта, срабатывает и в виндовс и на мобильных устройствах.
OnTap - срабатывает несколько интеллектуальнее, причем только на мобильных устройствах (в виндовс не срабатывает).
Упрощенно, он срабатывает только если ты коротко тапнул на контрол, если ты нажал на контрол и повел пальцем, скроля контент или скроля родительский ScrollBox, OnTap НЕ сработает.
// инициализация Image.Touch.GestureManager := gestManager; Image.Touch.InteractiveGestures := [TInteractiveGesture.LongTap]; Image.OnGesture := FormGesture; .. // обработка жеста procedure TfrmMain.FormGesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean); begin case EventInfo.GestureID of igiLongTap : begin DoSomething(); end; end; end;
-
Barbanel отреагировална Tumaso в Переход на новую модель разрешений
@Alex7wrt,
конечно смогут. Минимально допустимая версия указывается в minSdkVersion. У меня например во всех приложениях установлено <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="26" />
-
Barbanel отреагировална Евгений Корепов в Сборка приложений под Linux
Проблему решил. Сам дурак. Прописал в iptables разрешающее правило - все заработало.
-
Barbanel отреагировална vasilius в сборка проекта с библиотеками
Принимаю поздравления...
Начал переносить код с нерабочего проекта в рабочий (который запускался)...
у меня в Create было заполнение поля стиля...
тип значения TValue
у меня было
= TValue::From<String>("0"); этот код нормально работал без линковки - все было хорошо
с линковкой вылазил Access violation описаный выше
решение такое :
= TValue::_op_Implicit(String("0")); К сожалению, дебагер, как я и говорил, абсолютно бесполезный в этой среде, жаль.....
-
Barbanel получил реакцию от Anatoliy в переходпо ссылке с push уведомления
Правильно ли я понимаю: вы пишете некое приложение, которое показывает пользователю веб-ссылку в уведомлении?
Имхо: нельзя переходить на внешний ресурс, тапнув на ссылку в уведомлении.
Всегда сначала нужно показать вашу программу, при этом в зависимости от логики программы - показать что именно пришло (чтобы пользователь мог понять полезное ли для него это сообщение), и только потом давать возможность переходить по внешним ссылкам.
-
Barbanel отреагировална Tumaso в Разрешения для приложения не вступают в силу на Android
У делфи большой плюс - кроссплатформенность. У меня реально 90% единого кода для виндов, андроида и иоса. Специфичного для каждой платформы не так и много, по большому счету.
Писать отдельно в андроид студии, отдельно в xcode, отдельно в делфи с VCL реально не очень хочется Заказчикам то пофиг, они хотят как минимум мобильные приложения сразу и для андроида и для иоса.
-
Barbanel отреагировална Евгений Корепов в Разрешения для приложения не вступают в силу на Android
Вот как то так, на базе штатного примера:
Такс, я малость лопухнулся, это пример я уже под карнавал переделал, работать на токио и остальных версиях не будет. Так что я его удалил. Поищите по форуму - уже неоднократно обсуждалась тема.
-
Barbanel получил реакцию от fidel42rus в переходпо ссылке с push уведомления
Правильно ли я понимаю: вы пишете некое приложение, которое показывает пользователю веб-ссылку в уведомлении?
Имхо: нельзя переходить на внешний ресурс, тапнув на ссылку в уведомлении.
Всегда сначала нужно показать вашу программу, при этом в зависимости от логики программы - показать что именно пришло (чтобы пользователь мог понять полезное ли для него это сообщение), и только потом давать возможность переходить по внешним ссылкам.
-
Barbanel отреагировална dnekrasov в сборка проекта с библиотеками
В свойствах проекта укажите "Link with runtime packages = False"
-
Barbanel отреагировална WebPuper в Механизм работы с APK Extension file (OBB)
В FMX, насколько я смог удостовериться, нет нормальных директив чтобы работать с OBB. Видимо посчитали это излишним, т.к. по сути речь идет о работе с обычной файловой системой.
После распаковки приложения в каталоге внешнего хранилища (карты или, если нет, внутренней памяти) Android/obb/<application ID>/ появится файл дополнений с расширением *.obb
Это обычный архив ZIP и его можно распаковать, например, в GetDocumentsPath средствами TZipFile
Проблема в том, что в FMX нет процедуры возвращающей путь к файлу obb.
Пришлось написать костыль:
UnicodeString GetObbFile() { UnicodeString str = StringReplace(System::Ioutils::TPath::GetPublicPath(), "/data/", "/obb/", TReplaceFlags()); str = StringReplace(str, "/files", "/", TReplaceFlags()); TSearchRec sr; FindFirst(str + "*.obb", faAnyFile, sr ); return str + sr.Name; } Теперь у вашего приложения есть путь к единственному obb
-
Barbanel отреагировална ENERGY в Рабочее место для IOS разработки
Имхо тогда уже лучше купить обычный ноут под Win с Intel и на нем запустить виртуалку. Это более универсальное решение. Мне решение с виртуальной машиной больше нравится, т.к в VMWare удобно создавать образы всей системы. Особенно это актуально перед обновление системы или Xcode. Не работает после обновления? Пару кликов и ты вернулся к рабочей версии.
Ну или MacMini, тоже бюджетное решение.
-
Barbanel получил реакцию от Anatoliy в Ошибка QuotedStr
Ошибка "Type mismatch" означает несоответствие типов.
Либо фильтр неправильно настроен, либо поле имеет другой тип.
Если поле всетаки строковое - посмотрите тип поля (String/WideString) и кодировку, если указана.
Посмотрите также, что возвращает источник данных (query или что у вас источником является) по по этому полю.
PS еще можно писать так:
Child.Filter := 'CHILDFAM=' + s.QuotedString;
-
-
Barbanel получил реакцию от Tumaso в Что быстрее Rectangle или TButtonStyleObject, TText или TButtonStyleTextObject
Вы знаете, я лично такие замеры не производил.
Я пользовался здравой логикой: поменьше анимаций, и поменьше объектов в стиле.
Нет, вы не один.
Если вы действительно хотите получить ответ на свой вопрос - сделайти сами такой тест производительности.
Накидайте в стиль то что вы описали, создайте 100500 объектов и замерьте скорость.
Сообщество скажет вам спасибо, да и вы получите профит!
-
Barbanel получил реакцию от Anatoliy в Что быстрее Rectangle или TButtonStyleObject, TText или TButtonStyleTextObject
Вы знаете, я лично такие замеры не производил.
Я пользовался здравой логикой: поменьше анимаций, и поменьше объектов в стиле.
Нет, вы не один.
Если вы действительно хотите получить ответ на свой вопрос - сделайти сами такой тест производительности.
Накидайте в стиль то что вы описали, создайте 100500 объектов и замерьте скорость.
Сообщество скажет вам спасибо, да и вы получите профит!
-
Barbanel получил реакцию от Евгений Корепов в Идентификация устройства
Всем доброго времени!
Как и обещал, выкладываю либы для работы с KeyChain.
Либы были взяты у братьев-китайцев, ни слова про покупку сказано не было (хотя чтобы выкачать их пришлось заплатить какому-то облачному сервису).
Использовать просто, за все отвечают три функции:
function StoreItemToKeychain(const AServiceName, AKey, AValue: string; const bOverride: Boolean=True): Boolean; function GetItemValueFromKeychain(const AServiceName, AKey: string): string; function DeleteItemFromKeychain(const AServiceName, AKey: string): Boolean; Ну и традиционно нужно подключить саму библиотеку, все находится в аттаче.
Enjoy! ?
iOS_KeyChain.zip
-
Barbanel отреагировална ENERGY в Кнопка Done
У формы есть событие OnVirtualKeyboardHidden, оно срабатывает когда юзер нажимает Done и клавиатура скрывается.
Также, срабатывает событие OnExit компонента (напр TEdit).