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

kami

Пользователи
  • Постов

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

  • Посещение

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

    41

Активность репутации

  1. Like
    kami получил реакцию от #WAMACO в Окно "Настройки"   
    Да! Я знал, что мыслю в нужном направлении
  2. Like
    kami получил реакцию от Равиль Зарипов (ZuBy) в Окно "Настройки"   
    Да! Я знал, что мыслю в нужном направлении
  3. Like
    kami отреагировална Brovin Yaroslav в Окно "Настройки"   
    Вы делаете систему плагинов. У вашего плагина есть ряд настроек. Все настройки в вашей системе находятся в одном месте. Вам нужно сделать так, чтобы любой плагин мог свои настройки показать в этом окне. Вопрос, как бы вы тогда сделали окно настроек, если вы не знаете, какие настройки там будут?
  4. Like
    kami получил реакцию от Steepe_Hare в Окно "Настройки"   
    хм... ну сравните:
     
    lbOptionCaption:=TLabel.Create(Panel); lbOptionCaption.Parent:=Panel; lbOptionCaption.Text:='some option'; cbOption1:=TCheckBox.Create(Panel); cbOption1.OnChecked:=.... cbOption1.Caption:='asdfasdf'; ...
    с этим:
     
    < накидали контролов на фрейм> fr:=TOptionsFrame.Create(Panel); fr.Parent:=Panel; И ВСЁ! Весь функционал реализуется внутри модуля фрейма. НЕЗАВИСИМО от всего остального.
  5. Like
    kami получил реакцию от Brovin Yaroslav в Окно "Настройки"   
    Нет, конечно вы можете сделать свой компонент на основе панели, в нем реализовать нужный функционал, зарегистрировать его в IDE,.. но зачем переусложнять?
  6. Like
    kami получил реакцию от Brovin Yaroslav в Окно "Настройки"   
    хм... ну сравните:
     
    lbOptionCaption:=TLabel.Create(Panel); lbOptionCaption.Parent:=Panel; lbOptionCaption.Text:='some option'; cbOption1:=TCheckBox.Create(Panel); cbOption1.OnChecked:=.... cbOption1.Caption:='asdfasdf'; ...
    с этим:
     
    < накидали контролов на фрейм> fr:=TOptionsFrame.Create(Panel); fr.Parent:=Panel; И ВСЁ! Весь функционал реализуется внутри модуля фрейма. НЕЗАВИСИМО от всего остального.
  7. Like
    kami получил реакцию от AngryOwl в Окно "Настройки"   
    1. Фреймы просто создавать динамически, в рантайме. Панельки с содержимым обычно накидывают на саму форму. С учетом кучи пунктов опций - получается гигантская каша, в которой без 100 грамм не разберешься.
    2. Каждый фрейм - в отдельном модуле. Очень просто искать, редактировать, править функционал и при необходимости - удалять. В отличие опять-таки от этих панелек. Только не надо сами фреймы кидать на форму, как это делается с другими визуальными компонентами!
  8. Like
    kami получил реакцию от AngryOwl в Окно "Настройки"   
    Я бы сделал правую часть на фреймах.
    А левая часть заполнялась бы автоматом наименованиями фреймов, которые зарегистрировались в окне настроек.
  9. Like
    kami получил реакцию от Kitty в [ТBeacon] Реальная задача   
    То есть - куда он пойдет гулять никто не знает? На любую из точек?
    В таком случае, имхо, есть смысл сделать как это делается в оффлайн-навигаторах: приложение скачивается отдельно, а карты (аудиофайлы в нашем случае) - отдельно, по желанию пользователя.
  10. Like
    kami получил реакцию от krapotkin в [ТBeacon] Реальная задача   
    То есть - куда он пойдет гулять никто не знает? На любую из точек?
    В таком случае, имхо, есть смысл сделать как это делается в оффлайн-навигаторах: приложение скачивается отдельно, а карты (аудиофайлы в нашем случае) - отдельно, по желанию пользователя.
  11. Like
    kami получил реакцию от Kitty в [ТBeacon] Реальная задача   
    Нет, окончательное решение должно быть Ваше
    Зачем? ноутбук + Connectify, все мобилки подключаются к 192.168.0.1 (адрес бука), на буке - простейший http-сервер на том же Delphi крутится сервисом. На get-запрос от приложения отдает в теле ответа аудиофайл. До начала экскурсии, в месте сбора. Можно даже сделать как "мобилка спрашивает - а куда сегодня пойдем", а сервер отвечает "пойдем туда-то, вот тебе файлы на сегодня", чтобы не перегружать пользователя лишними действиями.
    Все довольны, все смеются.
  12. Like
    kami получил реакцию от Равиль Зарипов (ZuBy) в [ТBeacon] Реальная задача   
    Нет, окончательное решение должно быть Ваше
    Зачем? ноутбук + Connectify, все мобилки подключаются к 192.168.0.1 (адрес бука), на буке - простейший http-сервер на том же Delphi крутится сервисом. На get-запрос от приложения отдает в теле ответа аудиофайл. До начала экскурсии, в месте сбора. Можно даже сделать как "мобилка спрашивает - а куда сегодня пойдем", а сервер отвечает "пойдем туда-то, вот тебе файлы на сегодня", чтобы не перегружать пользователя лишними действиями.
    Все довольны, все смеются.
  13. Like
    kami отреагировална Brovin Yaroslav в ShowModal - почему нельзя использовать блокирующий режим?   
    Добрый день,
    На андроиде в принципе не поддерживаются синхронные диалоги. И причина прежде всего в архитектуре андроид приложения.
    Если говорить о нативном приложении, то оно состоит из двух потоков Java UI Thread  (Он же главный поток приложения) и Delphi Thread. FireMonkey работает в делфи треде. В то время, как все нативные вещи (диалоги, пикеры, браузеры, карты, медиа проигрыватели и тд) все они работают в Java UI Thread. Помимо этого, когда активити (работает в так же в java UI thread) меняет своё состояние (запущена, приостановлена, остановлена, возобновлена и тд), она должна синхронизировать это состояние в делфи треде. Или другими словами передать эту информацию в делфи тред. Для передачи используются пайпы с событиями. Поэтому пока делфи тред не прочитает новое состояние активити, Java UI thread будет находится в режиме ожидания. Чтение в делфи потока нового состояния происходит в цикле ProcessMessage.
    Теперь возвращаясь к диалогам. Диалоги нативные, поэтому они должны быть синхронизированы (с ожиданием) с java UI thread. С другой стороны, в момент отображения диалога происходит событие из java ui thread Window Gained Focus, возникающее, когда в приложении меняется фокус между окнами (диалоговое окно в данном случае перехватывает фокус). Но как мы выяснили, это приводит к обратной синхронизации с делфи тредом.
    Отсюда возникает классический deadlock. 
    P.S. Это верно до версии Берлин включительно.
  14. Like
    kami получил реакцию от Pax Beach в Сложности с трехвезнкой   
    Люди, помогите понять. Вот топикстартер - создает трехзвенку, работает с датаснап, mySQL, делает приложение под Андроид... то есть - довольно-таки сложные вещи. И не может прочитать сообщение об ошибке, путает компиляцию с исполнением ? о_О...
  15. Like
    kami получил реакцию от Равиль Зарипов (ZuBy) в Сложности с трехвезнкой   
    Люди, помогите понять. Вот топикстартер - создает трехзвенку, работает с датаснап, mySQL, делает приложение под Андроид... то есть - довольно-таки сложные вещи. И не может прочитать сообщение об ошибке, путает компиляцию с исполнением ? о_О...
  16. Like
    kami получил реакцию от Kitty в Cannot Deploy iOS App to iOS Simulator   
    Чтобы появилось на устройстве, Delphi должна увидеть это устройство. Если в Target для iOS32 пусто (не отображается нужное устройство) - нужно правой кнопкой на этом "Target" и нажать "Обновить". Если устройство таки не обнаружилось - переходим в XCode, Window - Devices, выбираем нужное устройство, нажимаем кнопочку "+", выбираем ipa файл (по умолчанию он емнип в "Устройство-пользователи - пользователь - PAServer-ScratchDir").
    Ээээ... а кроме компиляции деплой делался?
  17. Like
    kami получил реакцию от Alex7wrt в Cannot Deploy iOS App to iOS Simulator   
    Чтобы появилось на устройстве, Delphi должна увидеть это устройство. Если в Target для iOS32 пусто (не отображается нужное устройство) - нужно правой кнопкой на этом "Target" и нажать "Обновить". Если устройство таки не обнаружилось - переходим в XCode, Window - Devices, выбираем нужное устройство, нажимаем кнопочку "+", выбираем ipa файл (по умолчанию он емнип в "Устройство-пользователи - пользователь - PAServer-ScratchDir").
    Ээээ... а кроме компиляции деплой делался?
  18. Like
    kami получил реакцию от Alex7wrt в Cannot Deploy iOS App to iOS Simulator   
    Берлину нужен XCode 8. С 8.1 у вас просто не подтягивается список устройств симулятора. Любому берлину, начиная от просто и заканчивая Upd2.
    Можно поставить 8.0 рядом с 8.1, зайти в XCode - Preferences - Locations и в Command Line Tools выбрать XCode 8.0.
    После этого - перезапустить PAServer, в Delphi подтянуть новые SDK и обновить список устройств в TargetPlatforms для  симулятора
  19. Like
    kami получил реакцию от Kitty в Cannot Deploy iOS App to iOS Simulator   
    Берлину нужен XCode 8. С 8.1 у вас просто не подтягивается список устройств симулятора. Любому берлину, начиная от просто и заканчивая Upd2.
    Можно поставить 8.0 рядом с 8.1, зайти в XCode - Preferences - Locations и в Command Line Tools выбрать XCode 8.0.
    После этого - перезапустить PAServer, в Delphi подтянуть новые SDK и обновить список устройств в TargetPlatforms для  симулятора
  20. Like
    kami получил реакцию от Steepe_Hare в Перспективы RAD   
    Вот-вот. Не раз говорил именно это, Но диванные эксперты знают лучше.
  21. Like
    kami получил реакцию от Rusland в Нестандартная клавиатура для своего приложения   
    Господа, спасибо за участие в обсуждении!
     
    Принимая во внимание кучу параметров, я "заморочился" на написание собственной клавиатуры. Проанализировав и продебажив кучу кода FMX, удалось подменить стандартную клавиатуру собственной.
     
    На текущий момент концепт готов и работает, но обладает одним недостатком - из-за особенностей работы процедуры RegisterShowVKProc стандартный вызов клавиатуры теряется без возможности восстановления.
    Посему - я буду реализовывать нужные мне виды + повторять стандартные Ru и Eng, возможно - с некоторыми изменениями.
     
    Концепт предназначен для работы только под iOS.
     
    Использование: подключаете к проекту модуль из архива... и всё. Кастомная клавиатура теперь будет показываться вместо стандартной во всех контролах, в которых вообще показывается клавиатура.
     
    Известные недостатки:
    1. Нет анимации появления/скрытия.
    2. Не реализовано нажатие кнопки Return (пока не думал, как это делается)
    3. Не реагирует на флаги TVirtualKeyboardStates
    4. Не уверен в корректном удалении фрейма при завершении приложения.
    5. Нет тулбара (не уверен, правда, что он нужен в собственной клавиатуре)
     
    Если необходимо - готов дать пояснения по коду.
    Ввиду того, что я только начинаю работать с FMX, любая критика приветствуется!
    iOSCustomKeyboard.zip
  22. Like
    kami получил реакцию от krapotkin в Пример работы с TObjectList   
    Не буду разводить холивар, тем более что with или не with имеет кучу обсуждений, в которых высказывались и именитые разработчики. Скажем так - использование with делает код не явным  (например - в классе, где используется эта конструкция с with тоже есть метод SaveToFile или свойство Text) и плохо читается сторонним разработчиком. Но - каждый решает для себя.
  23. Like
    kami получил реакцию от krapotkin в Пример работы с TObjectList   
    И это будет гораздо более правильно. не используйте with!
  24. Like
    kami получил реакцию от Rusland в Пример работы с TObjectList   
    Не буду разводить холивар, тем более что with или не with имеет кучу обсуждений, в которых высказывались и именитые разработчики. Скажем так - использование with делает код не явным  (например - в классе, где используется эта конструкция с with тоже есть метод SaveToFile или свойство Text) и плохо читается сторонним разработчиком. Но - каждый решает для себя.
  25. Like
    kami получил реакцию от #WAMACO в Пример работы с TObjectList   
    Не буду разводить холивар, тем более что with или не with имеет кучу обсуждений, в которых высказывались и именитые разработчики. Скажем так - использование with делает код не явным  (например - в классе, где используется эта конструкция с with тоже есть метод SaveToFile или свойство Text) и плохо читается сторонним разработчиком. Но - каждый решает для себя.
×
×
  • Создать...