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

Rusland

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

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

  • Посещение

  • Победитель дней

    26

Активность репутации

  1. Like
    Rusland получил реакцию от Равиль Зарипов (ZuBy) в Выход Update для RAD Studio 10 Berlin   
    Update2 вышел 
  2. Like
    Rusland отреагировална rareMax в MD5   
    Для получения МД5 есть стандартный класс: http://docwiki.embarcadero.com/Libraries/XE8/en/System.Hash.THashMD5
    uses System.Hash; ////////// ... md5param:='&q='+reqest+'&auto_complete=1&lyrics=0&performer_only=0&sort=0&search_own=0'; with fGeneral.RESTRequest1.Params.AddItem do begin name:='sig'; Value:=THashMD5.GetHashString('/method/'+fGeneral.RESTRequest1.Resource+'?v=5.28&https=1'+md5param+'&count=100&offset=1&access_token='+fGeneral.OAuth2Authenticator1.AccessToken+fGeneral.OAuth2Authenticator1.ClientSecret); end;  
  3. Like
    Rusland отреагировална Andrey Efimov в Тормозит IDE   
    Ну если это тот же баг, что словил я, то вам однозначно помогут такие действия (рекомендация от Ярослава, по конкретно моему багу):
    1) Закрываем студию, так чтобы в диспетчере задач не было процесса "bds.exe"
    2) Идём в папку C:\Program Files\Embarcadero\Studio\18.0\bin, находим там файл MultidevicePreview240.bpl
    3) Переименовываем его в !MultidevicePreview240.bpl
    4) Запускаем студию и проверяем (если не поможет, то переименуйте файл обратно)
     
    p.s. Вот мой багрепорт https://quality.embarcadero.com/browse/RSP-15992
  4. Like
    Rusland отреагировална #WAMACO в Использование LocationSensor в сервисе   
    точно 
    LocationSensor1
  5. Like
    Rusland отреагировална kami в Пример работы с TObjectList   
    Не буду разводить холивар, тем более что with или не with имеет кучу обсуждений, в которых высказывались и именитые разработчики. Скажем так - использование with делает код не явным  (например - в классе, где используется эта конструкция с with тоже есть метод SaveToFile или свойство Text) и плохо читается сторонним разработчиком. Но - каждый решает для себя.
  6. Like
    Rusland отреагировална Равиль Зарипов (ZuBy) в Пример работы с TObjectList   
    если вам не понятен этот код
    For i:=0 to List.Count-1 do with List.Items[i] do begin Position.Y:=Position.Y+0.5; end; то его можно переписать следующим образом
    for i:=0 to List.Count-1 do     List.Items[i].Position.Y := List.Items[i].Position.Y+0.5;  
    UPDATE: http://delphicode.org/delphi/with.htm
  7. Like
    Rusland отреагировална Andrey Efimov в [Android][XE10]Передача строки между смартфонами   
    Судя по интернету, есть такая проблема на некоторых девайсах.
    Что можно попробовать:
    1) Перезапуск устройств и последующая попытка подключения
    2) Провести сопряжение устройств и оставить их видимыми, попытаться подключиться
    Если не получится, тогда лучше сразу сюда https://quality.embarcadero.com/secure/Dashboard.jspa отписаться. (укажите всю информацию, логи, модели устройств, демо проекты)
  8. Like
    Rusland отреагировална Равиль Зарипов (ZuBy) в Как правильно передать полученные значения в потоке в главную форму приложения?   
    procedure Parsing(URLToPars: string; aListView: TListView); var TempText: string; HeadMatches, MsgMatches: TMatchCollection; CountPagesMatch: TMatch; i: Integer; HeadRegularExprString: string; MsgRegularExprString: string; begin // вот это место, которое хотелось бы видеть с в потоке и с индикатором: <form1>.AniIndicator1.Enabled := true; // вот это место, которое хотелось бы видеть с индикатором TTask.Run( procedure begin HTMLText := IdHTTP1.Get(URLToPars); // выполняем загрузку файла из интернета; CountPagesMatch := TRegEx.Match(HTMLText, 'max="(.*?)".*value="(.*?)"'); HeadRegularExprString := 'class="date">(.*?)<.*?class="id">(.*?)<'; MsgRegularExprString := 'class="text">(.*?)<\/div>'; HeadMatches := TRegEx.Matches(HTMLText, HeadRegularExprString, [roIgnoreCase, roMultiLine]); MsgMatches := TRegEx.Matches(HTMLText, MsgRegularExprString, [roIgnoreCase, roMultiLine]); TThread.Synchronize(TThread.CurrentThread, procedure begin aListView.Items.Clear; if HeadMatches.Count = MsgMatches.Count then begin for i := 0 to HeadMatches.Count - 1 do begin TempText := HTMLClear(MsgMatches.Item.Groups[1].Value); with aListView.Items.Add do begin Data['DateText'] := HeadMatches.Item.Groups[1].Value; Data['CitateText'] := HeadMatches.Item.Groups[2].Value; Data['MainText'] := TempText; Data['imgCopy'] := il1.Bitmap(TSizeF.Create(36, 36), 0); Data['imgSend'] := il1.Bitmap(TSizeF.Create(36, 36), 1); end; end; end else ShowMessage('Ошибка загрузки данных!'); <form1>.AniIndicator1.Enabled := false; end); end); end;  
  9. Like
    Rusland отреагировална Равиль Зарипов (ZuBy) в Как правильно передать полученные значения в потоке в главную форму приложения?   
    //uses System.Threading; var aData: string; begin TTask.Run( procedure begin aData := idHttp1.Get('url'); // выполняем загрузку файла из интернета; TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Text := aData; // выполняем действия связанные с визуальными компонентами end); end); end;  
  10. Like
    Rusland получил реакцию от Dinkin в Развертка на Mac   
    Ох уж этот почерк медиков))
  11. Like
    Rusland отреагировална Равиль Зарипов (ZuBy) в Узнать количество свободного места   
    procedure TForm6.Button1Click(Sender: TObject); // uses System.IOUtils, Androidapi.Helpers, Androidapi.Jni.JavaTypes; var jF: JFile; begin jF := TJFile.JavaClass.init(StringToJString(Tpath.GetDownloadsPath)); if jF.isDirectory then ShowMessage(IntToStr(jF.getFreeSpace)); end;  
  12. Like
    Rusland получил реакцию от Kitty в [iOS]Bluetooth   
    Посмотрите TBluetoothManager->CurrentAdapter->State
  13. Like
    Rusland отреагировална Andrey Efimov в Узнать количество свободного места   
    Попробуйте вот так Запрос доступного пространства
     
    p.s. Лучше поздно, чем никогда.
  14. Like
    Rusland получил реакцию от Kitty в Файловая система Android и Embarcadero   
    Надо заменить путь на .\assets\internal , тогда System.IOUtils.TPath.GetDocumentsPath
  15. Like
    Rusland получил реакцию от Steepe_Hare в Файловая система Android и Embarcadero   
    Надо заменить путь на .\assets\internal , тогда System.IOUtils.TPath.GetDocumentsPath
  16. Like
    Rusland получил реакцию от Равиль Зарипов (ZuBy) в Файловая система Android и Embarcadero   
    Надо заменить путь на .\assets\internal , тогда System.IOUtils.TPath.GetDocumentsPath
  17. Thanks
    Rusland получил реакцию от x11 в Перехват события звонка   
    Вот пример, из которого вы можете видеть как перехватывать звонки (добавьте на форму Memo)
     
    uses CSBroadcastReceiver, Androidapi.JNI.JavaTypes.Own, Androidapi.Jni, AndroidApi.JNI.GraphicsContentViewText, Androidapi.Jni.JavaTypes, Androidapi.JNI.Os, Androidapi.JNIBridge, Androidapi.JNI.Telephony, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo, FMX.StdCtrls; private { Private declarations } procedure CreateBroadcastReceiver; procedure BroadcastReceiverOnReceive(csContext: JContext; csIntent: JIntent); procedure CheckPhoneCallState(Context: JContext; Intent: JIntent); procedure CheckSmsInState(Context: JContext; Intent: JIntent); function KillCall(Context: JContext): Boolean; public { Public declarations } end; var Form1: TForm1; BroadcastReceiver: TCSBroadcastReceiver; implementation uses Androidapi.Jni.App, Androidapi.Helpers, Androidapi.Log; procedure TForm1.CreateBroadcastReceiver; begin if not Assigned(BroadcastReceiver) then begin BroadcastReceiver:= TCSBroadcastReceiver.Create(nil); BroadcastReceiver.OnReceive:= BroadcastReceiverOnReceive; BroadcastReceiver.RegisterReceive; BroadcastReceiver.Add('android.intent.action.PHONE_STATE'); BroadcastReceiver.Add('android.intent.action.NEW_OUTGOING_CALL'); end; end; procedure TForm1.CheckPhoneCallState(Context: JContext; Intent: JIntent); var telephonyService: JObject; telephonyManager: JTelephonyManager; state: JString; incomingCallNumber: string; outgoingCallNumber: string; outputResult: string; begin outputResult:= #13#10; telephonyService := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE); telephonyManager := TJTelephonyManager.Wrap((telephonyService as ILocalObject).GetObjectID); if JStringToString(Intent.getAction).Equals('android.intent.action.PHONE_STATE') then begin state:= Intent.getStringExtra(TJTelephonyManager.JavaClass.EXTRA_STATE); if state.equals(TJTelephonyManager.JavaClass.EXTRA_STATE_IDLE) then outputResult:= outputResult + 'Phone is IDLE ' + #13#10 else if state.equals(TJTelephonyManager.JavaClass.EXTRA_STATE_RINGING) then begin incomingCallNumber:= JStringToString(Intent.getStringExtra(TJTelephonyManager.JavaClass.EXTRA_INCOMING_NUMBER)); if incomingCallNumber.Equals('') then incomingCallNumber:= 'PRIVATE NUMBER'; outputResult:= outputResult + 'Phone is RINGING' + #13#10; outputResult:= outputResult + 'Incoming call from ' + incomingCallNumber + #13#10; if incomingCallNumber = '+79391234567' then /// телефон в черном списке // тут отбиваем звонок end else if state.equals(TJTelephonyManager.JavaClass.EXTRA_STATE_OFFHOOK) then outputResult:= outputResult + 'Phone is OFFHOOK' + #13#10; end else if JStringToString(Intent.getAction).Equals('android.intent.action.NEW_OUTGOING_CALL') then begin outgoingCallNumber:= JStringToString(Intent.getStringExtra(TJIntent.JavaClass.EXTRA_PHONE_NUMBER)); outputResult:= outputResult + 'Outgoing call to ' + outgoingCallNumber + #13#10; if outgoingCallNumber = '+79051234567' then /// телефон в черном списке begin BroadcastReceiver.SetResultData(nil); outputResult:= outputResult + 'Call is not allowed to ' + outgoingCallNumber + #13#10; end; end; Memo1.Lines.Append(outputResult); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin if Assigned(BroadcastReceiver) then BroadcastReceiver.Free; end; procedure TForm1.FormCreate(Sender: TObject); begin CreateBroadcastReceiver; end; Отправить на PHP сервер можно, например, через Indy компоненты.
  18. Like
    Rusland отреагировална Andrey Efimov в Название приложения в Андроиде   
    Полное решение вопроса: Автоматическая смена названия приложения в зависимости от языка системы
  19. Like
    Rusland отреагировална estra в Как добавить второй язык   
    Это кто же вам такую ерунду то сказал?
     

     
    Почитайте "Delphi. Программирование для Windows, OS X, iOS и Android":
     

     
    Глава 24. Мультиязычные проекты:
    Компонент языковой поддержки TLang Режим автоматического перевода Перевод меню Ссылка 1, Ссылка 2
  20. Like
    Rusland получил реакцию от aleksandrguru в Приостановить запущенный сервис   
    В общем решил я проблему следующим образом - останавливаю поток, а не сервис (все равно кроме потока в сервисе ничего нет). Пока мне этого хватит )
  21. Like
    Rusland получил реакцию от aleksandrguru в Как работать с Arduino по bluetooth?   
    aleksandrguru, fsdb уже нашел этот пример, с помощью него как раз получилось подключиться к Ардуино  
  22. Like
    Rusland отреагировална aleksandrguru в Как работать с Arduino по bluetooth?   
    Вот лови пример нормальный 
    BTACC_Source_XE8.7z
  23. Like
    Rusland получил реакцию от Kitty в Узнать свой Longitude и Latitude   
    Если речь про Android.
    Есть TLocationSensor. И еще посмотрите полезный TMapsEngine от ZuBy.
  24. Like
    Rusland получил реакцию от aleksandrguru в "Общение" сервиса и приложения через intent   
    Для ищущих ответа:
    Есть стандартное demo Object Pascal\Mobile Snippets\AndroidIntents\AndroidIntentsGroup.groupproj, в котором показано как из одного приложения передавать данные другому. С помощью этого примера удалось передавать данные из сервиса в основное приложение.
    В юните основного приложения пишем:
    uses FMX.Platform, FMX.Platform.Android, Androidapi.JNI.JavaTypes, Androidapi.JNI.Net, Androidapi.JNI.Os, Androidapi.Helpers, System.Messaging, Androidapi.JNI.GraphicsContentViewText; private { Private declarations } function HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean; procedure HandleActivityMessage(const Sender: TObject; const M: TMessage); function HandleIntentAction(const Data: JIntent): Boolean; procedure TForm1.FormCreate(Sender: TObject); var AppEventService: IFMXApplicationEventService; begin ... if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, AppEventService) then AppEventService.SetApplicationEventHandler(HandleAppEvent); // Register the type of intent action that we want to be able to receive. // Note: A corresponding <action> tag must also exist in the <intent-filter> section of AndroidManifest.template.xml. MainActivity.registerIntentAction(TJIntent.JavaClass.ACTION_VIEW); TMessageManager.DefaultManager.SubscribeToMessage(TMessageReceivedNotification, HandleActivityMessage); end; procedure TForm1.HandleActivityMessage(const Sender: TObject; const M: TMessage); begin if M is TMessageReceivedNotification then HandleIntentAction(TMessageReceivedNotification(M).Value); end; function TForm1.HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean; var StartupIntent: JIntent; begin Result := False; if AAppEvent = TApplicationEvent.BecameActive then begin StartupIntent := MainActivity.getIntent; if StartupIntent <> nil then HandleIntentAction(StartupIntent); end; end; function TForm1.HandleIntentAction(const Data: JIntent): Boolean; var Extras: JBundle; begin Result := False; if Data <> nil then begin Memo1.ClearContent; // записываем в Memo пришедшее сообщение Extras := Data.getExtras; if Extras <> nil then Memo1.Text := JStringToString(Extras.getString(TJIntent.JavaClass.EXTRA_TEXT)); Invalidate; end; end; в AndroidManifest.template.xml добавляем 
    <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:mimeType="text/pas" /> Отправка сообщения из сервиса делается так:
    SendTextViaIntent('Hello from service'); procedure TAndroidServiceDM.SendTextViaIntent(const AText: string); var   Intent: JIntent; begin   Intent := TJIntent.Create;   Intent.setType(StringToJString('text/pas'));   Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);   Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK); // добавил такой флаг, без  него сервис затыкался   Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(AText));   if  TJContextWrapper.Wrap(System.JavaContext).getPackageManager.queryIntentActivities(Intent, TJPackageManager.JavaClass.MATCH_DEFAULT_ONLY).size > 0 then      TJContextWrapper.Wrap(System.JavaContext).startActivity(Intent); // заменил MainActivity на TJContextWrapper.Wrap(System.JavaContext), т.к. это сервис end; Работает исправно, хоть 100%-ую правильность кода не гарантирую  Но как передать сообщение из основной программы обратно в сервис я пока не знаю. Также делать хендл внутри сервиса? 
    Попытался просто добавить FMX.Platform, в результате получаю ошибку в FMX.Platform.Android вываливается ошибка об использовании Activity внутри сервиса.
  25. Like
    Rusland отреагировална brunnengi в [Android][XE10]Передача строки между смартфонами   
    Кто нибудь попробуйте  AppTethering через Bluetooth между смартфонами. Если они не работают, то надо писать в QC.
×
×
  • Создать...