Лидеры
Популярный контент
Показан контент с высокой репутацией 29.09.2016 во всех областях
-
Обработка разрыва соединения в FireDAC
Евгений Корепов и 3 других отреагировал Камышев Александр за вопрос
Раньше тоже пользовался продуктами devart, хоть и недорогие, удобные, надежные, но все же они платные, плюс вообще не люблю подключать сторонние компоненты. На oldschool теплом ламповом CBuilder приходилось много всего подключать: скины, компоненты доступа к бд, инди последних версий, компоненты для отчетов, png и т.п. С тех пор стараюсь избегать всего не родного. FireDAC понравился, хорош CmdExecMode amAsync - The calling thread and GUI are not blocked. The called method will return immediately. Позволяет работать с базой из основного потока без завешивания, отправил запрос и занимайся другими задачами пока callback не придет.4 балла -
OpenDialog для мобильных платформ
Kitty и 2 других отреагировал Камышев Александр за вопрос
String fn; String path = System::Ioutils::TPath::GetSharedDownloadsPath(); #ifdef __ANDROID__ TSearchRec sr; if ( !FindFirst( path + "/*", faAnyFile, sr) ) { do { if ( sr.Name=="." || sr.Name==".." ) {} else if ( (sr.Attr & faDirectory) == faDirectory ) {} // dir else {} // file // отрисовать в список sr.Name sr.Name; } while ( !FindNext(sr) ); FindClose(sr); // по клику в списке получить fn = path + "/" + name; } #else OpenDialog->InitialDir = System::Ioutils::TPath::GetSharedDocumentsPath(); if ( !OpenDialog->Execute() ) return; fn = OpenDialog->FileName; #endif вот так сделал, кому понадобится, на паскале тоже работает, только синтаксис другой3 балла -
Помогите разобраться с потоком
Andrey Efimov и 2 других отреагировал Равиль Зарипов (ZuBy) за вопрос
void __fastcall domThread::UpdateAnimation() { frm->aIndic->Visible = false; frm->aIndic->Enabled = false; } незнаю как на си будет, но примерно так void __fastcall domThread::Execute() { Synchronize( UpdateAnimation ); Terminate(); }3 балла -
Может быть так? (правда код на Delphi)3 балла
-
Обработка разрыва соединения в FireDAC
Andrey Efimov и ещё один отреагировал Камышев Александр за вопрос
разрыв соединения - все корректно обрабатывается void __fastcall TMyDBClient::ConnectionError( TObject *ASender, TObject *AInitiator, Exception *&AException ) { status = dbcError; #ifdef AUX_MODE error_string = AException->Message; #endif if ( FOnError ) FOnError( (TObject*)this ); Abort(); } //--------------------------------------------------------------------------- void __fastcall TMyDBClient::QueryError(TObject *ASender, TObject *AInitiator, Exception *&AException) { status = dbcError; #ifdef AUX_MODE error_string = AException->Message; error_string += "\r\nsql: " + fquery->SQL->Text; #endif if ( FOnError ) FOnError( (TObject*)this ); Abort(); } //--------------------------------------------------------------------------- void __fastcall TMyDBClient::AfterDisconnect(TObject *Sender) { status = dbcNotConn; #ifdef AUX_MODE log_string = "db - disconnect"; if ( FOnLog ) FOnLog( (TObject*)this ); #endif } Abort() - чтобы не было исключения в Application так тишина и только логи шелестят переподключениями2 балла -
Подскажите, пожалуйста, почему вы выбрали не рекомендованную ембаркадеро dbExpress? Они рекомендуют FireDAC из палитры компонентов.2 балла
-
После "сна" программа с сервисом не стартует
Евгений Корепов отреагировал Rusland за вопрос
Всем кто в сервис передает параметры, типа: procedure TFrmMain.StartService(); var LIntent: JIntent; begin LIntent := TJIntent.Create; LIntent.setClassName(TAndroidHelper.Context.getPackageName(), TAndroidHelper.StringToJString('com.embarcadero.services.TestRemoteServ')); LIntent.setAction(StringToJString('StartService')); TAndroidHelper.Activity.startService(LIntent); end; function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin if Intent.getAction.equalsIgnoreCase(StringToJString('StopService')) then begin Log('START_NOT_STICKY'); Result := TJService.JavaClass.START_NOT_STICKY; end else // if Intent.getAction.equalsIgnoreCase(StringToJString('StartService')) then begin Log('START_STICKY'); Result := TJService.JavaClass.START_STICKY; end; end; обязательно проверяйте Intent на nil ! Когда система убивает ваше приложение из-за нехватки памяти и перезапускает сервис, то на Intent.getAction происходит Segmentation fault и сервис остается в подвешенном состоянии (на процессоре ARM в Приложения - Работающие у меня отображается как-будто сервис нормально перезапустился, а вот на процессоре Intel - видно как сервис находится в вечном перезапуске). И естественно хост-приложение не может нормально стартануть. Делаем примерно так: function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin if Intent<>nil then begin if Intent.getAction.equalsIgnoreCase(StringToJString('StopService')) then begin Log('START_NOT_STICKY'); Result := TJService.JavaClass.START_NOT_STICKY; end else // if Intent.getAction.equalsIgnoreCase(StringToJString('StartService')) then begin Log('START_STICKY'); Result := TJService.JavaClass.START_STICKY; end; end else begin Log('RESTART BY SYSTEM'); Result := TJService.JavaClass.START_STICKY; end; end;1 балл -
Неудачная компиляция или кривые руки?
Brovin Yaroslav отреагировал Andrey Efimov за тема
Так вам не предлагают сдаваться, вам предлагают обновить студию, т.к. в новых версиях исправлены серьёзные ошибки первых версий. Вы просто обновите средство позволяющее достичь ваших целей, при этом избежите возможного геморроя со старыми версиями. Так что тут одни плюсы только Смысла искать проблему в приложении написанном на XE5 не вижу вообще, т.к. проблема может быть скрыта в глубинах студии и вы больше времени потратите на поиски и исправление (если это будет возможно). Ставьте Berlin, пишите приложение Hello World :), давайте друзьям на тест, если не заведётся у них, то выложите сюда apk файл и попросите народ протестить. Я лично, всегда могу посмотреть на Android 4.4.2, иногда ещё на Android 6.1 балл -
Неудачная компиляция или кривые руки?
Brovin Yaroslav отреагировал Равиль Зарипов (ZuBy) за тема
это не тот случай когда стоит стоять до конца, обновите среду до актуальной и будет время заняться программированием, а не изобретением великов (которые так и не поедут)1 балл -
Failed to load libssl.so
Pax Beach отреагировал Равиль Зарипов (ZuBy) за вопрос
теперь кстати можно определить запущено приложение на интеле или нет1 балл -
Failed to load libssl.so
Kitty отреагировал Камышев Александр за вопрос
печалька ошибка та же? если сборке не указать APP_ABI := x86 собирается четыре папки: arm64-v8a, mips64, x86 и x86-64 arm и x86-64 вот libs.zip попробовать библиотеки 86-64 и для чистоты эксперимента arm из этой сборки, mips думаю не нужен1 балл -
SQLConnection - подключение к БД без Builder'а
Andrey Efimov отреагировал Евгений Корепов за вопрос
Создайте пустой файл с расширением .udl, к примеру DatabaseName.udl. Откройте его в проводнике, на первой вкладке сразу увидите доступные, на данном компьютере, провайдеры баз данных, на второй вкладке сможете проверить соединение. Если все в порядке и соединение устанавливается, то можно плясать дальше, искать следующую причину. Update - если нужного поставщика нет, то следуйте инструкции https://msdn.microsoft.com/ru-ru/library/dn538994(v=sql.120).aspx1 балл -
сами формы в андроиде не анимируются, можно только содержимое этой формы взять и с помощью AnimateFloat вывести на экран если разместить на форме TabControl и спрятать табы, то анимация - слайд выполняется с помощью TActionList - TChangeTabAction1 балл
-
Насколько я освидамлен (пишу только пока для десктопов), но для мобил много форменные приложения, не комильфо. И вся "многоформенность" должна помещаться на 1 форму с разлимными приемами "многоформенности". Типа listbox, listview, tabControl, ну или panel. Основные эти компоненты уже имеют анамацию. Другим можно добавить через animation. Усугубляет то, что если у вас много компонентов будет на форме и будите использовать анимацию через tanimation, то будет жутко тормозить, особенно, если андроид слабый.1 балл