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

UFO 007

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

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

  • Посещение

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

  1. В 26.02.2021 в 05:30, Slym сказал:

    все кишки с евентами и синхронизами спрятаны

    "... Не будет ли любезен многоуважаемый джин ..." перевести это на Паскаль, ну или учебно-тренировочный *.pas (без бизнес-логики) приаттачить. 

     

    Спаибо.

  2. 14 часов назад, krapotkin сказал:

    /NDK тех версий, которые нужны нам

    А вот отсюда поподробней... Нашёл только NDK (Side by side) версия 22.0.7026061 (revision: 22.0.7026061) - щас качается... А вообще-то чуть ранее наяндексил android-ndk-r22-windows-x86_64.zip (с сайта разработчика, а r23 - пока beta) - разница какая-нить есть? = нету: AS качает тот же zip... И где бы посмотреть табличку соответствия СДКтакой-то = НДКтакой-то? Потому что разница между android-23 скачанным Delphi и AS СДК-манагерами составляет всего-то 1 файл (красный):wcmd.png.0de29ece72c928e1b98892bcc8d31c3a.png

    и как результат - разницы нет абсолютно никакой откуда я прописываю в Тулс\Опшенс\Деплоймент\СДК Манагер... А вот про таблицу соответствия спросил я не зря: если компилить нативной для ХЕ8 НДК-r9c (СДК - соответственно: 23, а не дефолтным 21), то (тут уже прогресс) всё пучком и РедМи даже "видит" железяки - правда подключиться не может. А если прописать НДК-22, то получаю Errors 1053(шт) с сообщением:

    [DCC Error] E2597 C:\Program Files (x86)\Embarcadero\Studio\16.0\PlatformSDKs\android-ndk-r9c\toolchains\arm-linux-androideabi-4.8\prebuilt\windows\bin\arm-linux-androideabi-ld.exe: error: cannot find -lgnustl_static
      E:\0_ESP_12\PAKUOS_xe8\Android\Debug\Grijjy.ErrorReporting.o:Grijjy.ErrorReporting:function Grijjy::Errorreporting::cxa_demangle(char const*, char*, NativeInt, int&): error: undefined reference to '__cxa_demangle'
    [DCC Fatal Error] F2588 Linker error code: 1 ($00000001)

    Как со всем этим разобраться? Заранее благодарен

    и

    З.Ы. Уму не растяжимо: (из Предисловия) с месяц назад поставил ХЕ5 попробовал - получил (щас уже не помню какую) "палку в колёса", снёс, поставил ХЕ8, набросал (благодаря Вашим исходникам с ГитХаба) скелет, одел его в симпатичный пиджак и, не подозревая о существовании СДК/НДК, "компильнул" его в РедМи и всё работало ОК: и обнаруживал железяки, и подключался к ним, и рулил ими как задумывалось, но Хонор это же самое делать отказался... И давай копать в сторону СДК/НДК... Ну, а в порьбе за светлое будущее - чем дальше в лес: тем толще партизаны...

  3. 13 часов назад, krapotkin сказал:

    скачать и поставить

    Глубоко сУмЛеваюсь (на счёт скачать) - это в .7z(ip) архивах стандартной комплектации идёт... А на счёт "... записываю ..." - эт только в долгом и нудном ISO может отражается, а lSuper их не подписывает... Скачал и поставил AS, но там только СДК-30 (Адрюха-11)... Надо разбираться как через AS СДК-23 выкопать...

  4. В 28.02.2021 в 14:46, krapotkin сказал:

    Просто без AS нет SDK manager

    А как на счёт c:\Users\Public\Documents\Embarcadero\Studio\20.0\PlatformSDKs\android-sdk-windows\SDK Manager.exe?

     

    В 28.02.2021 в 14:46, krapotkin сказал:

    предлагает установить кое-что, с чем точно умеет работать

    Когда, где и как?... Переустановить - не вопрос: главное - отловить этот момент.

     

    В 28.02.2021 в 14:46, krapotkin сказал:

    (запоминаем, что там Delphi хотела поставить)

    Установить AS - тоже не вопрос: главное - понять что именно она "... хотела поставить ..."

    Спс.

  5. И вААщПе - пипец: настраивал СДК из расчёта что РэдМи = х32-й, а Хонор = х64 так последний (после компиле, ..., инсталл-рун) сказал: 64-bit OS and device required... а РэдМи оказался тоже х64-м

    honor.png.548a523b773763f31685212f9e03260c.png

    jat-lx1- это и есть Honor, а как х32 он детектиться не хочет в отличии от РедМи:

    redmi.png.dcf7ce1093a13590bb51a96ddfe65ef6.png

    З.Ы. Где-то попадалось изречение: "... Дельфи - умирающий язык ..." - начинаю подозревать, что именно из-за этого (или аналогичного) геморроя народ "линяет" туда где попроще

  6. Как (на некоторых форумах) и водится: отвечаю сам (на 1-й вопрос) - едят SDK либо с Дэлфёй, либо с шарпеевским Ксамарином, либо же с Андрюхиной (нативной) студией (мож есть ещё какие ИДЕ - особо не вгрызался...). А вот со вторым вопросом засада: по ходу разборок дело доходило до "Формат Ц:\" и ресетап винды, но только потом я допетрил, что 25.2.5 - это не платформа SDK, а

    sdk.png.faf49b73c4aefd86264c554ce17e0f1c.png

    инструмент СДК и после некоторых манипуляций получил

    2021-02-27_17-17-28.png.fd4db281db9a82dc4d5de671a2be5d75.png

    но при компиляции под 24.4.1 получаю 344 ошибки, а вот под 25.2.5 всё компилится, деплоится и инсталлится, но коннекта с железяками нет - эт потому что 

    2021-02-27_17-37-11.png.65cdcd49e689f33b8c7165a5318d0f50.png

    а если для RedMi4Pro(Андрюха 6.0 = API/SDK 23) выбрать здесь android-23, то получаю:

    [PAClient Error] Error: E2312 Unable to execute '"C:\Users\Public\Documents\Embarcadero\Studio\20.0\PlatformSDKs\android-sdk-windows\build-tools\23.0.3\aapt.exe" package -f -M "E:\0_ESP_12\PAKUOS_xe10_x32\PAKUOS_10\AndroidManifest.xml" -F "E:\0_ESP_12\PAKUOS_xe10_x32\PAKUOS_10\bin\PAKUOS_10-unsigned.apk" -I "C:\Users\Public\Documents\Embarcadero\Studio\20.0\PlatformSDKs\android-sdk-windows\platforms\android-28\android.jar" -S "E:\0_ESP_12\PAKUOS_xe10_x32\PAKUOS_10\res" -A "E:\0_ESP_12\PAKUOS_xe10_x32\PAKUOS_10\assets" "E:\0_ESP_12\PAKUOS_xe10_x32\PAKUOS_10\library" "E:\0_ESP_12\PAKUOS_xe10_x32\PAKUOS_10\classes"' (Error 1)

    Копая глЫбже, обнаружил что если файл c:\Users\Public\Documents\Embarcadero\Studio\20.0\PlatformSDKs\android-sdk-windows\platforms\android-23\android.jar переобматюкать в android23.jar и копирнуть его из папки  android-28, то ошибка пропадает, но железяки так же не обнаруживаются (Connection Error)... Как это изврачевать?

  7. Доброго всем времени суток!

    Предисловие... Из ХЕ8 нажимаю Run(F9) - всё компилится, деплоится и инсталлится а в RedMi4Pro(Андрюха 6.0 - SDK-23) даже работает как по нотам. Но если провести те же манипуляции с Honor 8A(Андрюха 9.0 - SDK-28), то ни одной "моей" точки доступа не видит. Поставил 10.3.3 Рио - RedMi4Pro перестал видеть... Оказывается в ХЕ8 Tools\Option\Deployment\SDK Manager показывает версию SDK = 24.с копейками(почему-то на единичку завышает) а в Рио = 25.2.5  Запустил Studio\20.0\PlatformSDKs\android-sdk-windows\SDK Manager.exe, загрузил/установил все пакеты для вышеупомянутых версий (23 и 28) и началась война с Tools\Option\Deployment\SDK Manager - выбираю SDK API-Level = android-23 (для RedMi4Pro), 

    andr_23.jpg.ca3e598addb5625c6c2f1743479d418f.jpg

    нажимаю "Финиш" и вижу:

    andr_25.jpg.992fba14587914625c086ef904a44d04.jpg

    и выбирай-не выбирай SDK API-Level хоть 23, хоть 28 (хоть Android 32-bit, хоть Android 64-bit) - картина одна и та же (что чуть выше)... Правда - изначально скачивал в E:\Android\PlatformSDKs и поначалу подумал, что эта победень из-за "кривого" местоположения, но после копирования на С:\ (зазря только 50 с гаком гигов твердотельника изнасилил) картина "маслом" осталась. Была ещё одна гипотеза: мож lSuper чё-нить нужное ампутировал? - скачал ISO с таблЭткой, переустановил и всёрно: Х в Жо. Чё делать и как быть? (К-А-Р-А-У-Л!!!)

    З.Ы. А как интерпретировать следующую строчку:

        <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="28" />

    ?

  8. В 22.01.2021 в 07:01, Slym сказал:

    сунуть в поток

    А если диалогов - десяток, то и потоков столько же запускать? - стремновато как-то... А вообще - одел я этот скелет в симпатичный "пиджак" и ничего: очень даже работает, но только на RedMi4Pro(Андрюха 6.0), а на Honor8А(Андрюха 9.0) - отказывается... Вот и воюю теперь с SDK, но это - ужас отдельной темы.

  9. Желаю всем здравия, други мои.
    Скультивировал тут намедни приблуду на базе ЕСП8266 и прикол в том, что на написание VCL-проги поддержки (с параллельной дошлифовкой прошивки) ушло пару-тройку дней (хоть в той же ХЕ2), а вот с Андрюхиной поддержкой - вторую неделю бьюсь (как рыба об лёд). Во-первых: возможность компилить под Андрюху появилась (по-моему) только в ХЕ5, но она с поставленной задачей если и справилась, то весьма и весьма дерьмовенько и, не испытывая судьбу с ХЕ6 и ХЕ7, скачал сразу аж ХЕ8 и о-ля-ля, но есть одна бЯда: на точки останова - ноль эмоций (т.е. отладка на RedMi4Pro - невозможна и как следствие - вместо Exception-мессагов типа нет ВаВай-пермишенсов или "память не может быть реад": выпадение через чёрный экран на рабочий стол - может lSuper чё-то нужное вырезал?) и как следствие - следующий шаг: 10.4.1 Сидней(от того же lSuper'a)... Но тут другая бЯда: функции ВаВайСкан и ВаВайКоннект не работают никак: отлаживай-не отлаживай, трассируй - не трассируй(тут Exception-мессаги изобилуют)... Но это - предыстория (с параллельным подвопросом: нет ли между ХЕ8 и Сиднеем (ведь как обычно - пока он не дойдёт до ипостаси где-то 10.4.5 - так и будет не одно, так другое дерьмецо подсовывать) какой-нить ХЕ9 или может где-то есть инструкции по настройке той же ХЕ8?), а суть вопроса темы - это: во-вторых... Так вот Во-вторых: (что под ХЕ8, что под Сиднеем) если процедура хочет что-то сообщить пользователю при чём не однократно, а раз эдак 5-6, то пользователь видит только 1-е из сообщений (при чём если кто-то из последующих более ресурсоёмок по тексту, то видно только его затенённые края) и приходится 5-6 раз жать "ОК" (и тут принцип стека LIFO - никто не отменял: сообщение, появившееся последним, пропадает (так и оставшись непрочитанным) первым) и ЧЁ там процедура натворила? - Х его З: ведь там "внизу" могли быть не только сообщения, но и диалоги, а касание мимо окна диалога расценивается как No, Cancel, Abort и т.д. но прочитать что за вопрос был - уже не судьба... При курении справки на этот предмет (в разделе где-то/что-то/как-то так TDialogService) на поверхность выплыло, что метод .Sync (синхронно т.е. когда ShowMessage ждёт нажатия "ОК") работает только для Win/Lin/Mac/Огрызка, а для Андрюхи - только .АSync (поэтому и все 6 "форточек" появляются "синхронно", а процедура давно першагнула "end;"). Пришлось, слегка поЯndexив, изобретать собственный лИсАпед который я и хочу вынести на всеобщий(ее) суд(обозрение):

    var
      Form2: TForm2;
      DlgMR: TModalResult;
      Step: byte = 0;
      tsWS, tsESP: TStringList;
      GlobIterator: integer = 0;
    
    implementation
    
    {$R *.fmx}
    
    uses
      UMyMsgDlg;
    
    procedure TForm2.MyShwMsg(Msg: string);
    var
      mY: TMyMsgDlg;
    Begin
      mY := TMyMsgDlg.Create(Msg, mbОК, self, nil, nil);
      mY.ShowMe;
    End;
    
    procedure TForm2.MyMsgDlg(Msg: string; AButtons: TMyMsgDlgBtn);
    var
      mY: TMyMsgDlg;
    Begin
      mY := TMyMsgDlg.Create(Msg, AButtons, self,
        procedure // btOkClick
        begin
          case AButtons of
            mbДаНет: DlgMR:= mrYes;
            mbОКейОтмена: DlgMR:= mrOk;
            mbПовторПрервать: DlgMR:= mrRetry;
          end;
          Inc(Step);
        end,
        procedure // btCancelClick
        begin
          case AButtons of
            mbДаНет: DlgMR:= mrNo;
            mbОКейОтмена: DlgMR:= mrCancel;
            mbПовторПрервать: DlgMR:= mrAbort;
          end;
          Inc(Step);
        end);
      mY.ShowMe;
    End;
    
    procedure TForm2.btTimerDlgClick(Sender: TObject);
    begin
      DlgTimer.Enabled:= True;
      If Not WifiManager.isWifiEnabled then
      MyMsgDlg('При инициализации ВаФайМанагера оказалось, что РадиоМодуль обесточен.'+
               ' ТипО "Включить ВайВай?"', mbДаНет)
    {  Else
      Begin // WiFi включен
        inc(Step); // вместо MyMsgDlg : без тимера
        FirstStep(mrNone);
      End;
    }end;
    
    Procedure TForm2.FirstStep(MesRes: TModalResult);
    begin
        if MesRes = mrYes then
        Begin
          if WifiManager.setWifiEnabled(true) then
          MyMsgDlg('WiFi включен. Провести сканирование в пределах видимости '+
                   'на предмет обнаружения наших железяк?', mbПовторПрервать);
        End Else // MesRes = mrNo
        Begin
        If WiFiScan('ESP-007', tsESP) = 0 Then // Step = 1
          MyMsgDlg('В эфире не обнаружено ни '+ #10 + #13 +
                    'одной железяки. Продолжаем?', mbОКейОтмена); // Step =>> 2;       mbДаНет
        Else // если железяки морзируют тоннами
        if FileExists(TPath.Combine(TPath.GetSharedDocumentsPath, 'AP_Name.txt')) then ~ tstmp.ЛоадФромФиле
          if WiFiConnect(tstmp.Strings[0]) then
          Begin
            MyShwMsg('Сетевое Имя агрегата найдено в файле, соединение - установлено');
            DlgTimer.Enabled:= false;
          End; 
    	Else //File_Not_Exists 'AP_Name.txt'
          MyMsgDlg('Файл AP_Name.txt не обнаружен - вычисляем сетевое Имя агрегата по алгоритму?', mbДаНет);
        End;
    
    end;
    
    Procedure TForm2.SecondStep(MesRes: TModalResult);
    begin
      case MesRes of
        mrYes: Begin // вычисляем сетевое Имя агрегата по алгоритму
          if tsESP.Count < 2 then
          Begin
            MyMsgDlg('Необходимо подтвердить что найденная в эфире железяка - твоя', mbОКейОтмена);
          End
          else // tsESP.Count = 2 or > 2
          Begin
            WiFiConnect(tsESP.Strings[GlobIterator]);{GlobIterator = 0}   
    		BuzTimer.Enabled := True;
            MyMsgDlg('Слышите звуковые сигналы с интервалом пол-секунды?111', mbДаНет);
          End;
        End;
        mrNo: Begin
          MyShwMsg('???');   DlgTimer.Enabled:= false;
        End;
        mrOk: Begin  // В эфире не обнаружено ни одной железяки. Продолжаем?
          if WiFiScan('ESP-007', tsESP) = 0 then // т.е. все=Выкл и ESP-007.1, и ESP-007.2, и ... ESP-007.999999
          Begin
            MyShwMsg('Включите агрегат в сеть 220в, нажмите на нём кнопку "WiFi" и повторите процедуру');
            DlgTimer.Enabled:= false;
          End
    	else {"tsESP.Count <> 0"} Begin tsESP.Free; Dec(Step); FirstStep(mrNo); // MesRes = mrNo : WiFi включен
        End;
        mrCancel: Begin
          MyShwMsg('Перезапустите агрегат: 220в= Выкл/Вкл, нажмите на нём кнопку "WiFi" и повторите процедуру');
          DlgTimer.Enabled:= false;
        End;
        mrRetry:Begin // Провести сканирование в пределах видимости
          Dec(Step);// "синхронизация" тимера
          FirstStep(mrNo);
        End;
        mrAbort: Begin
          MyShwMsg('Ну-у-у... Так мы никогда не узнаем что в окрУге творится');
          DlgTimer.Enabled:= false;
        End;
      end;
    end;
    
    Procedure TForm2.ThirdStep(MesRes: TModalResult);
    begin
      case MesRes of
        mrOk: Begin  {Необходимо подтвердить} WiFiConnect(tsESP.Strings[0]);  Sleep(50); BuzTimer.Enabled := True;
          MyMsgDlg('Слышите звуковые сигналы' + #10 + #13 +
                   'с интервалом пол-секунды?222', mbДаНет);
        End;
        mrCancel: Begin
          MyShwMsg('А зря отказался : вдруг железяка, что в эфире - твоя?');
          DlgTimer.Enabled:= false;
        End;
        mrYes: SaveFile;//Слышите звуковые сигналы
        mrNo: Begin // He Слышите звуковые сигналы
          if GlobIterator < tsESP.Count - 1 then
          Begin Inc(GlobIterator);  Dec(Step);  if WiFiConnect(tsESP.Strings[GlobIterator]) then BuzTimer.Enabled := True;
            MyMsgDlg('Слышите звуковые сигналы с интервалом пол-секунды?333', mbДаНет);
          End
          Else
          Begin // список кончился
            MyShwMsg('Проверьте: агрегат запитан от 220в? Кнопка "WiFi" нажата? И повторите процедуру - '+
            'похоже, что звуковые сигналы звучали на соседской кухне...');
            DlgTimer.Enabled:= false;
            Step:= 255;
          End;
        End;
        mrRetry: Begin
          // Из SecondStep не вызывалось
        End;
        mrAbort: Begin
          // Из SecondStep не вызывалось
        End;
      end;
    
    end;
    
    Procedure TForm2.FourtStep(MesRes: TModalResult);
    begin
      if MesRes = mrYes then // Слышите звуковые сигналы
      SaveFile;
    end;
    
    Procedure TForm2.SaveFile;
    Var
      s: string;
    Begin 
      BuzTimer.Enabled := False;
      s:= tsESP.Strings[GlobIterator];
      tsESP.Clear;
      tsESP.Add(s);
      tsESP.SaveToFile(TPath.Combine(TPath.GetSharedDocumentsPath, 'AP_Name.txt'));
      MyShwMsg('Спасибо. Агрегат детектирован, сетевое Имя сохранено.');
      DlgTimer.Enabled:= false;
    End;
    
    procedure TForm2.DlgTimerTimer(Sender: TObject);
    begin
      if DlgMR <> mrNone then
      Begin
        Case Step of
          0: ;// ждём ответа юзверя    = mrYes
          1: FirstStep(DlgMR);
          2: SecondStep(DlgMR);
          3: ThirdStep(DlgMR);
          4: FourtStep(DlgMR);
        End;
        DlgMR:= mrNone;
      End;
    end;
    
    end.

    Прошу учесть что это - лишь урезанный до нельзя (но чтобы можно было понять принцип синхронизации) скелет реально работающей проги. И да - за саму идею огромное спасибо krapotkin'у и ZuBy (исходники прикрепляю). И при чём можно было бы ещё чётче синхронизировать (но у меня почему-то не получилось: на 3-ем шаге - висюк):

    Procedure TForm2.DlgTimerTimer(Sender: TObject);
    Begin
      if DlgMR <> mrNone then
      Begin
        case Step of
    	....
        End;
        DlgMR:= mrNone;
        if Step <> 2 then // 3-ка норм. не запускается
        DlgTimer.Enabled:= false;
      End;
    End;

    но тогда при каждом вызове MyMsgDlg надо запускать DlgTimer тогда будет работать так: например FirstStep вывесила окно диалога и завершила свою работу,  а таймер ежесекундно опрашивает результат диалога и как только результат стал вменяемым (а не mrNone) таймер запускает следующую (в соответствии с переменной Step) процедуру с полученным результатом и останавливается до следующего вызова MyMsgDlg.

    З.Ы. И на закуску - второй подподвопрос: существует ли эмулятор Андрюхи который может  реально общаться с внешним миром через ВаВай-свисток например D-Link DWA125?

    Заранее благодарен. 

     

    0_для форума.zip

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