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

Satellite

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

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

  • Посещение

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

    2

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

  1. Разобрался, в общем только так передаётся нормально:

    procedure TfmSettings.CreateEmail(Const Recipient, Subject: string);
    var
      Intent: JIntent;
      JRecipient: TJavaObjectArray<JString>;
    begin
      JRecipient := TJavaObjectArray<JString>.Create(1);
      JRecipient.Items[0] := StringToJString(Recipient);
    
      Intent := TJIntent.Create;
      Intent.setAction(TJIntent.JavaClass.ACTION_SEND);
      Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
      Intent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, JRecipient);
      Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(Subject));
      Intent.setType(StringToJString('vnd.android.cursor.dir/email'));
      SharedActivity.startActivity(Intent);
    end;
    
  2. Имеется данный код, тема сообщения "EXTRA_SUBJECT" передаётся нормально, а вот "EXTRA_EMAIL" не передаётся.

    var
      Intent: JIntent;
      Uri: Jnet_Uri;
    begin
      Intent := TJIntent.Create;
      Intent.setAction(TJIntent.JavaClass.ACTION_SEND);
      Intent.setType(StringToJString('vnd.android.cursor.dir/email'));
      Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
      Intent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, StringToJString('dev@user.com'));
      Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString('Feedback'));
      SharedActivity.startActivity(Intent);
    end;
    
  3. На Windows функция генерации работает отлично, а вот на Android она подкашивается и появляются какие-то пробелы, точнее даже не пробелы, а пустота. Сама функция такая:

     function getRandChar(exc:string):string;
      var
        i:integer;
        cl:string;
      begin
        cl:='АБВГДЕЖЗИКЛМНОПРСТУЧЫЭЮЯ';
        Result:=#0;
        for i:=1 to length(exc) do
        begin
          delete(cl,Pos(exc[i],cl),1);
        end;
        Result:=cl[1+random(Length(cl))];
      end;

    Далее результат присваивается к двумерному кнопочному массиву:

      For j:=0 to High(btn) do
      begin
        for i:=0 to High(btn[j]) do
        begin
          btn[j,i].text:=getRandChar(temp_s);
        end;
      end;
    

    temp_s - это заданное слово. не понимаю почему на android'e попадаются этакие пробелы. чяднт?

  4.  

     

    ..., естественно идёт речь про Android.

    А при чем тогда здесь ХЕ7?

    И почему вопрос задан в разделе "прочее", когда есть разделы по разным платформам?

     

    А при том, что в описании раздела написано "Если нету соответствующего раздела форума, то сюда публикуем свой вопрос, затем тема перейдет в нужный раздел форума." Раз я указал Delphi XE7, то должно наверное было намекнуть на то, что средствами Firemonkey.

     

    Немного перефразирую свой вопрос: Меня интересует вопрос: как можно программно узнать в своем приложении, стоят-ли Root права у пользователя. Delphi XE7.

     

     

    а какова цель проверки?

     

    Цель проверки?  :huh: Узнать о доступности root-прав на устройстве, дабы изменять некоторые системные файлы. Если на устройстве отсутствуют Root права, то уведомляем пользователя, и в связи с этим, функционал ограничиваем. 

  5. Проблема такая: На Windows - массив кнопок освобождается. На AndroidНЕ освобождается.
     
    Пример:

      TMyButton = class(TButton)
      end;
    var
      Form1: TForm1;
      btn: array [0..1,0..6] of TMyButton;
    

    Создание кнопок:

    procedure TForm1.btn1Click(Sender: TObject);
    var i,j:integer;
    begin
      For j:=0 to High(btn) do
      begin
        for i:=0 to High(btn[j]) do
        begin
          btn[j,i]:=TMyButton.Create(form1);
          btn[j,i].Parent:=form1;
          btn[j,i].Position.X:=((round(form1.Width)) div 2) - (((high(btn[0])*((round(form1.Width)) div 9) + ((round(form1.Width)) div 8)*2)) div 2) +i* ((round(form1.Width)) div 8) +i*3;
          btn[j,i].Position.Y:=form1.Height - 105+ (j*50+j*2);
          btn[j,i].Width:=((Round(form1.Width)) div 8);
          btn[j,i].Height:=Round(form1.Height) div 3+5;
        end;
      end;
    end;

    Освобождение:

    procedure TForm1.btn2Click(Sender: TObject);
    var i,j:Integer;
    begin
         for j:=0 to High(btn) do
      begin
        for i:=0 to high(btn[j]) do
        begin
        btn[j,i].free;
        end;
      end;
    end;

    ЧЯДНТ?  :huh:

  6. На Windows тип AnsiString присутствует, на Android отсутствует.

    Имеется код (функция):
     

    function TForm1.GetConvertedText(s: string): string;
    var
      m:TMemoryStream;
      {$IFDEF MSWINDOWS}ss:AnsiString;{$ENDIF MSWINDOWS}
      {$IFDEF ANDROID} ss:String;{$ENDIF ANDROID}
      b:byte;
    begin
      m:=TMemoryStream.Create;
      m.LoadFromFile(s);
      m.Seek(0,soFromBeginning);
      SetLength(ss,5);
      m.Read(ss[1],5);
    
      if ss=SIGN then
      begin
        ss:='';
        m.Read(b,1);
        SetLength(ss,;
        m.Read(ss[1],;
      end;
    
      Result:=ss;
    
      m.free;
    end;
    

    На Windows результат отображается нормально, потому что ss:=AnsiString;

    А вот на Android'e нету значения AnsiString, поэтому для теста я просто присвоил String; Отсюда пошли кракозябры, как можно получить результат в нормальной читаемой кодировке?

     

    Почитав немного, наткнулся на TEncoding, но не разобрался.

  7. Я придумал такой проект: шахматы на троих. Посмотрите, что сейчас есть и скажите: Будет ли нормальным такой проект если сделать возможность игры через интернет или/и сеть?

    attachicon.gifChessForThree.zip

    Личное моё мнение, нужно не что-то старое изобретенное, а что-то новое и современное - интересное и завлекательное. Шахматы, нынче не пользуются успехом.
  8. С Satуllite я частично не соглашусь. И вот по какой причине. Рискуя остаться в меньшинстве и быть не понятым, скажу следующее.

    Delphi - "сыровата", но это единственный инструмент для простой и удобной разработки, который имеет ряд неоспоримых преимуществ разработки кроссплатформенных приложений.

     

    Про удобность кроссоплатфоременных приложений не спорю. Но оптимизация отнюдь не самая приятная: Android приложение весит - 8 мб. Windows - 20 мб. (300 строк кода). К тому же, нету той плавности, где всё работает прекрасно. Однозначно, Embarcadero стремится улучшить свой продукт, но нету того функционала, которого хочешь ожидать от них. Всему своё время. 

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