Лидеры
Популярный контент
Показан контент с высокой репутацией 03.06.2016 во всех областях
-
Прочитать DNS запрос в idUDPServer
Ingalime и ещё один отреагировал Евгений Корепов за вопрос
Все правильно получаете, кодировка тут не при чем. Согласно спецификации "DNS Packet Structure", вы получаете не строку, а пакет который нужно разобрать. К примеру если запрос будет "nslookup www.google.ru 127.0.0.1", то там где вы получаете имя хоста будет строка "''#3'www'#6'google'#2'ru'#0#0#1#0#1". Парсинг простейший: #3 - означает что далее идут 3 символа хоста 'www' - вот ожидаемые 3 символа #6 - далее идут еще 6 символов хоста 'google' - ага, вот они #2 - ну и еще 2 символа 'ru' - ура, они здесь #0 - конец имени хоста, складываем в кучу, перемежая точками и получаем www.google.ru #0 - дальше у нас служебная информация... #1 #0 #1 Вот как то так. P.S. А зачем вам на таком низком уровне работать? Может использовать IdDNSServer : TIdDNSServer ? P.P.S. Правильно Memo1.Lines.Add(BytesToString(AData,12)); //(12, а не 13)2 балла -
TNotification с переносом строк
Kitty и ещё один отреагировал Равиль Зарипов (ZuBy) за вопрос
из коробки мультилайн не поддерживается. на fmxexpress есть код для исправления локальных нотификаторов. Для тех которые генерирует Android, пока нельзя мультилайн сделать2 балла -
Мне видится, что твой log будет выводиться только в НЕ режиме отладки. Я использую функцию без условий компилятора, и она отлично работает и в приложении, и Android сервисе. procedure Log(const Fmt: string; const Params: array of const); var Msg: string; M: TMarshaller; begin Msg := Format(Fmt, Params); LOGI(M.AsUtf8(Msg).ToPointer); end;2 балла
-
Application does not support this device
Kitty и ещё один отреагировал Равиль Зарипов (ZuBy) за вопрос
не поддерживается на интелах (официально), но можно2 балла -
Сперва - Release, потом = nil http://fire-monkey.ru/topic/2817-динамическое-созданиеуничтожение/?do=findComment&comment=16461 Free на мобильных платформах не делает ничего. В вашем коде компонент, естественно, будет продолжать находиться - ведь ссылку на него как минимум хранит его Owner, переданный в конструкторе.2 балла
-
конечно http://docwiki.embarcadero.com/RADStudio/XE8/en/Using_an_HTTP_Client2 балла
-
Здравствуйте. Не могу понять, или я не правильно делаю или баг. Берем чистый проект. Выбираем Style: Android. Кидаем на форму TVertScroll, TImageList. В VertScroll накидываем TSpeedButton штук 10. У всех SpeedButton выбираем Images->ImageList1. В наш ImageList грузим любую картинку. И затем у всех SpeedButton'ов выбираем ImageIndex = 0; Cужаем VertScroll так чтобы несколько кнопок не было видно, т.е.так что бы для того что бы увидить кнопки приходилось бы прокручивать VertScroll. Теперь сохраняем весь проект. Закрываем всё. Открываем проект заново. И получаем ошибку "Error creating form: Index out of range (n). Must be >=0 and <n". Где n - это некоторо число зависящее от количества кнопок включая скрытых в VertScroll'е. Причем если выбирать стили SpeedButton (например с радиокнопками), то все нормально. Подскажите я что то не так делаю?1 балл
-
Игра светлячок (Вспомни советское детство)
Равиль Зарипов (ZuBy) отреагировал alxsev за тема
Автор: Северюхин Алексей Ссылка на Youtube: ссылка Youtube Ссылка на приложение: Android market Игра для развития внимания, ловкости, реакции и умения различать цвета В этой игре необходимо на скорость нажимать одну из четырех кнопок, определенного цвета, в зависимости от загоревшейся лампочки на игровом поле. При правильном нажатии вы зарабатываете очки. При наборе 8 или 16 или 32 очков, загорается лампочка с индикацией заработанных очков. С одной попытки вам нужно набрать 32 очка. При неверном нажатии игра заканчивается.1 балл -
[TEdit ]смещение текста
Kitty отреагировал Равиль Зарипов (ZuBy) за вопрос
нет, я про <TEdit>.ControlType1 балл -
Вам не KillFocusByReturn=true нужен? Еще есть свойство ReturnKeyType1 балл
-
Я нашел решение, к сожалению, пока только для работы с UniDAC: Обновил UniDAC компоненты для Berlin до последней версии (6.3.12). Компоненты TUniConnection и TUniQuery отлично работают с SQLite в Android Service. FireDAC в Android Service пока запустить не удалось, но у меня такой задачи нет. В Deployment host приложения добавляю файл базы данных, Remote Path задаю ".\assets\internal\". И спокойно из сервиса получаю к нему доступ. Мой сервис локальный в одном потоке с приложением. Если делать Intent Service или Remote — наверное, придется помещать файл в другой, доступный каталог, или общаться через намерения (Intents). Надеюсь мой код будет полезен для вас. procedure TDM.conSQLiteBeforeConnect(Sender: TObject); begin {$IF DEFINED(iOS) or DEFINED(ANDROID)} conSQLite.Database := TPath.Combine(TPath.GetDocumentsPath, 'mybase.sqlite'); {$ENDIF} end; procedure TDM.conSQLiteError(Sender: TObject; E: EDAError; var Fail: Boolean); begin Log('--- DB error: %s:', [E.Message]); Fail := False; end; function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin Log('+ START with Intent: ' + JStringToString(Intent.getAction.toString), []); if Intent.getAction.equalsIgnoreCase(StringToJString('StopIntent')) then begin try conSQLite.Disconnect; Log('- DB disconnected', []); except on E: Exception do Log('- can not to disconnect DB', [E.Message]); end; Log('... service to be stoped', []); JavaService.stopSelf; Result := TJService.JavaClass.START_NOT_STICKY; // don't reload service end else begin Log('... service started', []); try conSQLite.Connect; Log('+ DB connected', []); UniQuery.SQL.Text := 'select count(*) as ALLREC from orders'; UniQuery.Open; if UniQuery.RecordCount > 0 then begin UniQuery.First; Log('... record count: %s', [UniQuery.FieldByName('ALLREC').AsString]); end; UniQuery.Close; except on E: Exception do Log('- can not to connect DB: %s', [E.Message]); end; Result := TJService.JavaClass.START_STICKY; // rerun service if it stops end; end;1 балл
-
Не могу пока вспомнить, где находил примеры многострочных уведомлений (Android однозначно поддерживает это), но я бы переносил строку с символами $0D$0A, а у Вас только \n ($0A). Подробнее об этом здесь.1 балл
-
Это не хорошее решение, а костыль, но пока решает мою задачу: Когда нужное мне событие произошло, я просто убираю обработчик таймера AndroidTimerSetHandler(nil); А когда нужен таймер, снова назначаю обработчик: AndroidTimerSetHandler(WaitComplete); При этом таймер продолжает работать и занимать процесс, когда он фактически не нужен — это, конечно же, не хорошо.1 балл
-
[Android] Почему не работает лог в сервисе?
Pax Beach отреагировал Brovin Yaroslav за вопрос
Версия Log из FMX работать не будет, так как она построена на FMX сервисах (TPlatformServices), которые в андроид сервисах не работают. Поэтому пользуйтесь версией андроида LOGI, LOGW, LOGE.1 балл -
package com.TestReceiver; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class BootCompletedReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action != null) if ( action.equalsIgnoreCase(Intent.ACTION_BOOT_COMPLETED) || action.equalsIgnoreCase("com.TestReceiver.BootCompletedCustomIntent") ) { Intent TestLauncher = new Intent(); TestLauncher.setClassName(context, "com.TestReceiver.BootCompletedReceiver"); TestLauncher.setAction("com.TestReceiver.StartServiceIntent"); PendingIntent pintent = PendingIntent.getBroadcast(context, 0, TestLauncher, 0); AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); alarm.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 5000, pintent); } else if (action.equalsIgnoreCase("com.TestReceiver.StartServiceIntent")) { Intent TestLauncher = new Intent(); TestLauncher.setClassName(context, "com.embarcadero.services.myService"); context.startService(TestLauncher); } } } Вот пример 1 из моих сервисов. Сначала стартует аларм менеджер, который сюда же шлет интенты на старт сервиса "myService". В манифесте в ресиверах прописаны эти интенты <receiver android:name="com.TestReceiver.BootCompletedReceiver" android:enabled="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="com.TestReceiver.BootCompletedReceiver" /> <action android:name="com.TestReceiver.BootCompletedCustomIntent" /> <action android:name="com.TestReceiver.StartServiceIntent" /> </intent-filter> </receiver>1 балл