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

Ghk

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

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

  • Посещение

Сообщения, опубликованные Ghk

  1. Цитата

    Кстати, а можно в одном Android приложении главную форму сделать с портретной ориентацией, а вторую форму - альбомной?

    я бы кинул на форму лэйаут  и на него уже накидывал бы все компоненты. Затем при старте формы - крутим этот лэйаут на 90 градусов и смещаем  на ширину экрана.
    При реальном повороте устройства - крутим и смещаем обратно.
    Получилось бы всегда одна и та же ориентация - альбомная, не зависимо от реального положения устройства.

  2. Да почти  для любого "графического" компонента   есть эти методы
     Откройте справку на Paintbox раздел методов - там есть описание обоих .
     Работаем на билдере так
     myPainbox->BeginUpdate();
    //... тут код  чо мы там рисуем  - кривые . косые . графики окружности и прочие мегауравнения
    myPainbox->EndUpdate();
    myPainbox->Repaint();// выводим на экран все что накалякали в буфере

    Оно и будет идти неравномерно ибо  вашему приложению система не обязана давать 100% процессорного времени :)

  3.  Вопрос вот в чем.
     В портретной ориентации  напихано дофига контролов и все красиво.
     Поворачиваю смартфон , и конечно же  теперь большая часть контролов  спряталась.
     воткнул  вертикальный скролл под них , но не удобно .
    Мысля пришла   перекомпоновать контролы  под андройд - оказалось нифига! Иерархия  должна остаться той же .
    Тогда появилась другая идея - налепить копий  контролов как удобно именно  в  альбомной ориентации.
     налепил  - они видны  и в портретной. Если отключаю видимость отключаются в обоих ориентациях
     Отсюда вопросы:
    1) Верно ли я понимаю, что в редакторе форм    под андроид  -  ориентация , просто  сделана чтоб посмотреть , как оно будет выглядеть.
      И нельзя сделать  портретную-один вид , а  альбомную -другой, именно используя визуальный редактор?
    2) Разумно ли налепить  копий контролов  для удобства , которые видно в одной ориентации и не видно в другой , и включать/отключать их видимость  по  событию   формы OnResize( вроде как можно определить смену ориентации) ?

     если мои предположения не верны , просветите плиз , как вообще это правильно и разумно сделать ?

     

  4. Цитата

    А вопрошающий разрабатывает под Android.

    Вообще-то тестирует    как оно работает .... на XE8 тоже куча глюков было обнаружено , но костылями вылечено , но  такое выпускать в свет явно нельзя , поэтому терь попытка 10.2.2
     Если Здесь такая же ерунда , то я  под  андрюшу  в андроидстудии лучше  ваять буду  - модель  на плюсах , представление на джаве
     

    Цитата


    Пруф можно, кто Вам такое сказал... "год-два ждать пока допилят"

    Ну я сужу по скачанным релизам и дате их создания    - все очень и очень глюкавое.
     Под винду -хорошо , но под андроид - тихий ужас.

  5. Итак отписываюсь о результатах:
    Все глюки связаны со средой RAD xe10.2 Tokyo
    Код и прочее абсолютно не причем.
     Все снес, выкачал  другую версию 10.2.2  с хотфиксом
     Под андроид все скомпилилось и установилось без ошибок , отладка работает.

     Хорошо - допустим купил я лицензию на 10.2 и получил бы кучу вот таких вот глюков и  узнал бы потом что билдер выпускают официально сырой и недопиленный, а пилят в процессе ( хорошо хоть на стековерфлоу написали об этом )  -эт получается заплати я   почти 6k$ и потом еще год-два жди пока они все глюки допилят и наконец-то можно будет работать ? Я логики не пойму ...
     

     п.с.  запустилось sdk 25.2.5 ndk r9c
     сейчас проверю на более свежих NDK
     

  6. Вопросом покупки задавался .... ток встает ответный вопрос - за что платить столько денег ? - за кучу глюков ?  Хорошо , куплю лицензию, есть гарантия , что это на 100% позволит вести разработку без  детских проблем?  - если нет , тогда ап чем собственно речь - абракадабра радоваться должны , что им багрепорты пишут  ... ми тут по сути бетатестеры LOL

  7. Под XE8 все прекрасно компилится и встает на устройство , работает стабильно.

    Я на  плюсах ваяю и кажись на дельфи такой проблемы нет.  
     Нашел аналогичные проблемы  на стековерфлоу, только там у чувака вылет идет именно при закрытии приложения (  тоже на С++ проблема  ). Абракадабра  написала , что  -то там было недореализовано и они исправят в обновлении.
    Сейчас качаю  хотфикс с рутрекера, поглядим что  получится.
     Причем забавно вот что - если ставлю одну версию NDK , то приложение даже не стартует -  по отладчику не доходит даже до создания форм  сразу вываливает эту ошибку.
    При использовании другой версии NDK свистопляски начинаются при  присваивании указателей и т.п.
     

  8. Отладка заработала , после создания нового проекта и  добавления туда файлов и форм из старого проекта.
    Теперь другая беда - под вин 32 компилируется без ошибок , а вот под андроид(в зависимости от NDK) лезет   Class  segmentation fault error(11)   на разных этапах запуска приложения.

  9. До этого стояла  XE8 и все прекрасно собиралось и дебажилось.
    На днях качнул xe10 tokyo с рутрекера.
    Приложение (из начально делалось в XE8) скомпилилсоь собралось, установилось , но отладка не работает ( конфигурация debug)

    Попробовал  новое приложение - форма и кнопка, то же самое - отладка не работает.
     Т.е.  XE10 устанавливает и запускает приложение на телефоне и на этом все - студия отключается от телефона.

    Устройство redmi2  adnroid 5.1.1

    Чего делать и куда копать ?

    п.с. отладка под винду работает


    РЕШЕНО:
    Чтоб сэкономить ваше время и чтобы вы не читали всю тему, вот краткое руководство.
    Для перехода  с XE8
    Создаем новые проект- приложение в XE10 затем  добавляем туда  все формы и файлы из старого проекта ( я имею ввиду макеты форм, cpp , h, ico и более ничего не добавлять!).
    Из деплоймент менеджера удаляем задеполеные файлы и ставим все по умолчанию.
    Компилим -билдим.
     Затем в деплоймент менеджер добавляем чего там раньше было. И удаляем  из проекта лишнюю новую форму ( она у нас создается при  создании проекта)
    Все - можно пользоваться .

    Кроме того  версия  Токио должна быть 10.2.2. с хотфиксом от 2018 года, версии ниже с рутрекера глючат

  10. Решено!!!!
     Чтобы файлы стали видны  в проводнике телефона и далее ими можно было делиться и перекидывать на комп, а также чтобы они стали видны другим приложениям необходимо всего-то при создании файла  указывать права доступа линукс.

     На билдере для мультиплатформы я сделал так

     

    fileHandle=FileCreate(FileName
    #ifndef WIN32
    ,S_IRWXU|S_IRWXG|S_IRWXO
    #endif
    );

     

  11. В билдере порядком инклюдов( аналог uses в дельфях) нифига не решается. В _published явное указание типа не работает- ошибки выдает.

    Зато пока задал вопрос - догадался как написать костыль :)

    в public класса формы  пишем  определение  самопальной функции-обработчика   с полным указанием типов , как в  прототипе
    void __fastcall VKbShown(TObject *Sender, bool KeyboardVisible,  const System::Types::TRect &Bounds); Имя можно от балды - в данном случае
    VKbShown.
    Далее в основном файле формы   в этой функции пишем чего нада делать при появлении вирутальной клавиатуры

    void __fastcall TSomeForm::VKbShown(TObject *Sender, bool KeyboardVisible, const System::Types::TRect &Bounds)
    { //
     ShowMessage("Опаньки! Клавушка появилась !"');
    };

    ну и чтобы все это свистело и пердело как нада при появлении клавы
     В событии OnCreate   нашей формы навешиваем  эту функцию на обработчик
    TSomeForm->OnVirtualKeyboardShown=TSomeForm->VKbShown;
     

    Теперь все прекрасно работает и компилится  под андроидом:)

    Всем спасибо вопрос можно закрывать,
     буду дальше  покумекать свою программу.


     

  12. Создаем форму, кидаем на нее TChart.
    Далее вешаем  пустой обработчик //  OnVirtualKeyboardShown
    И все -  под андроид не компилится  - пишет TRect Ambiguity.
    Засада В Bilder XE8

    Глюк ловится даже в пустом проекте.

    В ошибке пишет Типа TRect  определен в дух местах,

    Первое место SystemTypes.h  System::Types::TRect -  там структура.
    второе место FMXTee.Canvas.hpp  FmxTeee::Canvas::TRect - там  написано typedef System::Types::TRectF TRect;

    Прототип обработчика

    typedef void __fastcall (__closure *TVirtualKeyboardEvent)(System::TObject* Sender, bool KeyboardVisible, const System::Types::TRect &Bounds);


    Понятно что TRect по разному определен в модулях и эт типа два разных типа.
    Но какого черта оно компилится под винду, что делать и какого черта ему нада чтоб оно скомпилилось под андроид ?

    Весь день интерент рою не мог найти. на одном форуме было упоминание , но человек не помнит что делать.
     

  13. 1.Запомните одну простую вещь : Метод Synchronize   - это ни что иное  как "остановить текущий поток и выполнить кусок действий   из указанной процедуры в главном потоке"

    2. С визуальными компонентами формы напрямую из потока работать нельзя!

    Теперь понятно почему мерцает ?  :)


    У автора  сам алгоритм несколько коряв - поток постоянно тормозится и передает управление главному , потом  назад опять обработка . опять тормоз  и т.д. все это в цикле.
    +  если я не ошибаюсь, к тому же идет обращения к  визуальным компонентам главной формы, что  без синхронизации  делать нельзя.
    Т.е. как таковой смысл в этом потоке отсутствует :)
     Создайте временное хранилище, в который пихнете выборку из базы .  И по окончании обработк-выборки  всех данных, через synchronize  уже вышвырните на Form1 со всеми вашими модификациями в одной единственной процедуре. .

     


     

  14. Значит что-то неверно используете. Synchronize нужен по сути  только для того, чтобы какая-то часть кода выполнилась в главном потоке. В основном  используется для вывода диалоговых окон, или обновления контролов. 

  15. Всем привет.
    Прошу помощи.
    имеем вот такой кусок кода  для запления комбобокса возможными сервисами , которые предоставляет выбранное блютуз устройство
     

    Цитата

     

    void __fastcall TTabbedForm::PrListItem_MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
              float X, float Y) // событие по клику в листе блютуз устройств
    { TargetPaireNo =  PrListBox->ItemIndex; //номер индекса устройства от которого будем получать  список сервисов
      Services_cb->Clear(); // очистили комбобокс с сервисов
     ToastMessage_On(((TListBoxItem*)Sender)->Text +  L"Service Searching..." ); //вывели тост
     if (TargetPaireNo>-1)// если выбрано какое-то устройство в листе устройств
        {

    //объявляем класс потока чтобы сделать поиск сервисов в фоновом режиме , для исключения тормозов приложения

    class TAnThread: public TThread
          { public:
            

           __fastcall TAnThread():TThread(false) //конструктор
            {FreeOnTerminate=true;
             };


             void _fastcall TreadToast()// периносим названия сервисов в комбобокс и схлопываем тост
                   {for(int i=0; i<BT->ServiceList->Count;i++)
                     TabbedForm->Services_cb->Items->Add( BT->ServiceList->Items.Name);
                        TabbedForm->ToastMessage_Off(L"Searching Completed.");
                    };

    // Ниже поток- запрос сервисов у выбранного блютуз устроства

            void _fastcall TAnThread::Execute(void)
            {BT->ServiceList = BT->DeviceList->Items[TabbedForm->TargetPaireNo]->GetServices();    
             Synchronize(&TreadToast);
            };
              
         };
        //запускаем поток  на исполнение
        TAnThread* D= new TAnThread ; // TAnThread

        }

    }

     

     

     

    Все это прекрасно работает при компиляции под win32  никаких проблем нет .
    При попытке компиляции под Android . компилятор матерится на     Synchronize(&TreadToast);

    Цитата

    [bccaarm Error] TabbedTemplate.cpp(126): no matching member function for call to 'Synchronize'

    Ну и в развороте вот что там имеется:

    System.Classes.hpp(2136): candidate function not viable: no known conversion from 'void (__closure *)()' to 'PSynchronizeRecord' (aka          'System::Classes::TThread::TSynchronizeRecord *') for 1st argument;
      System.Classes.hpp(2154): candidate function not viable: no known conversion from 'void (__closure *)()' to 'TThreadMethod' (aka 'void (__closure *)() __attribute__((pcs("aapcs-vfp")))') for 1st argument;
      System.Classes.hpp(2156): candidate function not viable: no known conversion from 'void (__closure *)()' to '_di_TThreadProcedure' (aka 'DelphiInterface<System::Classes::TThreadProcedure>') for 1st argument;
      System.Classes.hpp(2177): candidate function not viable: requires 2 arguments, but 1 was provided
      System.Classes.hpp(2180): candidate function not viable: requires 2 arguments, but 1 was provided

     Чего ему надо-то ?   Сижу сутки бьюсь  ...хз чо делать.

×
×
  • Создать...