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

UFO 007

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

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

  • Посещение

Весь контент UFO 007

  1. "... Не будет ли любезен многоуважаемый джин ..." перевести это на Паскаль, ну или учебно-тренировочный *.pas (без бизнес-логики) приаттачить. Спаибо.
  2. А вот отсюда поподробней... Нашёл только 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 файл (красный): и как результат - разницы нет абсолютно никакой откуда я прописываю в Тулс\Опшенс\Деплоймент\СДК Манагер... А вот про таблицу соответствия спросил я не зря: если компилить нативной для ХЕ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. Глубоко сУмЛеваюсь (на счёт скачать) - это в .7z(ip) архивах стандартной комплектации идёт... А на счёт "... записываю ..." - эт только в долгом и нудном ISO может отражается, а lSuper их не подписывает... Скачал и поставил AS, но там только СДК-30 (Адрюха-11)... Надо разбираться как через AS СДК-23 выкопать...
  4. А как на счёт c:\Users\Public\Documents\Embarcadero\Studio\20.0\PlatformSDKs\android-sdk-windows\SDK Manager.exe? Когда, где и как?... Переустановить - не вопрос: главное - отловить этот момент. Установить AS - тоже не вопрос: главное - понять что именно она "... хотела поставить ..." Спс.
  5. И вААщПе - пипец: настраивал СДК из расчёта что РэдМи = х32-й, а Хонор = х64 так последний (после компиле, ..., инсталл-рун) сказал: 64-bit OS and device required... а РэдМи оказался тоже х64-м jat-lx1- это и есть Honor, а как х32 он детектиться не хочет в отличии от РедМи: З.Ы. Где-то попадалось изречение: "... Дельфи - умирающий язык ..." - начинаю подозревать, что именно из-за этого (или аналогичного) геморроя народ "линяет" туда где попроще
  6. Как (на некоторых форумах) и водится: отвечаю сам (на 1-й вопрос) - едят SDK либо с Дэлфёй, либо с шарпеевским Ксамарином, либо же с Андрюхиной (нативной) студией (мож есть ещё какие ИДЕ - особо не вгрызался...). А вот со вторым вопросом засада: по ходу разборок дело доходило до "Формат Ц:\" и ресетап винды, но только потом я допетрил, что 25.2.5 - это не платформа SDK, а инструмент СДК и после некоторых манипуляций получил но при компиляции под 24.4.1 получаю 344 ошибки, а вот под 25.2.5 всё компилится, деплоится и инсталлится, но коннекта с железяками нет - эт потому что а если для 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. Помогает ещё как!!! Только такого пункта "Project\Clean" я не нашёл, а сделал "ручками": в папке проекта удалил все файлы кроме __history, .fmx, .pas, .dpr и .dproj и ошибка пропала!!!
  8. Доброго всем времени суток! Предисловие... Из ХЕ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), нажимаю "Финиш" и вижу: и выбирай-не выбирай 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" /> ?
  9. А если диалогов - десяток, то и потоков столько же запускать? - стремновато как-то... А вообще - одел я этот скелет в симпатичный "пиджак" и ничего: очень даже работает, но только на RedMi4Pro(Андрюха 6.0), а на Honor8А(Андрюха 9.0) - отказывается... Вот и воюю теперь с SDK, но это - ужас отдельной темы.
  10. Желаю всем здравия, други мои. Скультивировал тут намедни приблуду на базе ЕСП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
×
×
  • Создать...