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

slav_z

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

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

  • Посещение

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

    33

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

  1. Теперь после сборки ваш класс java будет добавлен в файл classes.dex (да! файл classes.dex ниоткуда не копируется, он собирается из файлов которые указаны в этом списке (см.картинку) поэтому его можно легко дополнить собственными классами java или убрать ненужные системные).

    Остается вопрос компиляции файла исходников java в jar-файл, но тут уж каждый сам за себя...

    addJAR.png

  2. хотел бы я сказать, что это можно сделать через IDE, но...

    откройте файл <project_name>.dproj, идите в самый конец. найдите секцию <Platforms> и добавьте туда что надо. например это может выглядеть так:

                <Platforms>
                    <Platform value="Android">True</Platform>
                    <Platform value="Android64">True</Platform>
                    <Platform value="iOSDevice32">True</Platform>
                    <Platform value="iOSDevice64">True</Platform>
                    <Platform value="iOSSimulator">True</Platform>
                    <Platform value="OSX32">True</Platform>
                    <Platform value="OSX64">True</Platform>
                    <Platform value="Win32">True</Platform>
                    <Platform value="Win64">True</Platform>
                </Platforms>

     

     

     

  3. uses
      System.SysUtils,
      System.IOUtils,
      System.Permissions,
      System.Messaging,
      FMX.Dialogs;
    
    uses
      Androidapi.Helpers, Androidapi.JNI.Os, Androidapi.JNI.GraphicsContentViewText,
      Androidapi.JNI.JavaTypes, Androidapi.JNI.Webkit, Androidapi.JNI.Net,
      Androidapi.JNI.App, Androidapi.JNI.Support, FMX.Platform.Android;

    это потребуется

  4. вот кусок кода "вырванный" из проекта (написано благодаря ссылке ярослава выше- спасибо):

    MimeType = image/* - для картинок. если что не так, комментируйте.

    type
      TDialog = class
      private
        FProc: TProc<string>;
        procedure ResultCallback(const Sender: TObject; const M: TMessage);
      public
        constructor Create;
        destructor Destroy; override;
        procedure Show(const MimeType: string; Proc: TProc<string>);
      end;
    
    constructor TDialog.Create;
    begin
      TMessageManager.DefaultManager.SubscribeToMessage(TMessageResultNotification, ResultCallback);
    end;
    
    destructor TDialog.Destroy;
    begin
      TMessageManager.DefaultManager.Unsubscribe(TMessageResultNotification, ResultCallback);
    end;
    
    procedure TDialog.ResultCallback(const Sender: TObject; const M: TMessage);
    var FilePath: string;
    begin
      if TMessageResultNotification(M).RequestCode = 5 then
      if TMessageResultNotification(M).ResultCode = TJActivity.JavaClass.RESULT_OK then
      begin
        FilePath:=JStringToString(TMessageResultNotification(M).Value.getData.getPath);
        FProc(FilePath);
      end;
      Free;
    end;
    
    procedure TDialog.Show(const MimeType: string; Proc: TProc<string>);
    var
      Intent: JIntent;
    begin
    
      FProc:=Proc;
    
      Intent:=TJIntent.Create;
      Intent.setAction(TJIntent.JavaClass.ACTION_PICK);
      Intent.setType(StringToJString(MimeType));
    
      MainActivity.startActivityForResult(Intent,5);
    
    end;
    
    procedure OpenFileDialog(const MimeType: string; Proc: TProc<string>);
    begin
      RequestPermissionsExternalStorage(
      procedure(Granted: Boolean)
      begin
        if Granted then TDialog.Create.Show(MimeType,Proc);
      end);
    end;
    

     

  5. 14 минут назад, Aleks133 сказал:

    А почему тогда здесь все работает нормально?

    ну здесь же Button29 не разрушается... тыкая по кнопке будут проблемы если убивается сам элемент по которому тыкать...

  6. procedure ClearTextAttribute(Text: TText);
    begin
      for var I:=0 to TTextAccess(Text).Layout.AttributesCount-1 do
      TTextAccess(Text).Layout.Attributes[I].Attribute.Font.Free;
      TTextAccess(Text).Layout.ClearAttributes;
    end;

    поправка... иначе созданные объекты TFont не разрушаются... так же необходимо вызвать ClearTextAttribute() при разрушении формы.

  7. В 16.09.2019 в 20:34, Aleks133 сказал:

      (Form1.FindComponent('showrect') as TRectangle).DestroyComponents;\\удаляю сначала компоненты на showrect
      (Form1.FindComponent('showrect') as TRectangle).Parent := NIL; \\потом удаляю сам showrect
      (Form1.FindComponent('showrect') as TRectangle).Release;

    уберите первые две строки... попробуйте... должно заработать.

  8. unit Unit9;
    
    interface
    
    uses
      System.JSON;
    
    procedure ReadData(const Data: string);
    
    implementation
    
    procedure ReadStatus(jsObject: TJSONObject);
    var
      ActivityId: Integer;
      ActivityName: string;
    begin
      ActivityId:=jsObject.GetValue<Integer>('statusactivity_id');
      ActivityName:=jsObject.GetValue<string>('statusactivity_name');
    end;
    
    procedure ReadStatusArray(jsArray: TJSONArray);
    var jsValue: TJSONValue;
    begin
      for jsValue in jsArray do ReadStatus(jsValue as TJSONObject);
    end;
    
    procedure ReadAnyArray(jsArray: TJSONArray);
    begin
    end;
    
    procedure ReadData(const Data: string);
    var jsArray: TJSONArray;
    begin
      jsArray:=TJSONObject.ParseJSONValue(Data) as TJSONArray;
      try
        ReadStatusArray(jsArray.Items[0] as TJSONArray);
        ReadAnyArray(jsArray.Items[1] as TJSONArray);
        ReadAnyArray(jsArray.Items[2] as TJSONArray);
        ReadAnyArray(jsArray.Items[3] as TJSONArray);
      finally
        jsArray.Free;
      end;
    end;
    
    end.

     

  9. Показать/скрыть сенсорную клавиатуру Windows.

    unit Lib.Keyboard;
    
    interface
    
    uses
      Winapi.Windows,
      Winapi.ActiveX,
      System.Win.ComObj,
      FMX.Forms,
      FMX.Platform.Win;
    
    procedure ToggleSensorKeyboard(Form: TCommonCustomForm);
    
    implementation
    
    const
      CLSID_UIHostNoLaunch: TGUID = '{4CE576FA-83DC-4F88-951C-9D0782B4E376}';
    
    type
      ITipInvocation = interface
      ['{37C994E7-432B-4834-A2F7-DCE1F13B834B}']
        procedure Toggle(WND: HWND); safecall;
      end;
    
    procedure ToggleSensorKeyboard(Form: TCommonCustomForm);
    var TipInvocation: ITipInvocation;
    begin
    
      OleCheck(CoCreateInstance(
        CLSID_UIHostNoLaunch,nil,CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER,
        ITipInvocation,TipInvocation));
    
      TipInvocation.Toggle(FormToHWND(Form));
    
    end;
    
    end.

    C:\Program Files\Common Files\microsoft shared\ink\TabTip.exe - Сенсорная клавиатура Windows. В Windows 10 простой запуск уже не работает.

    Кто как делал? Очень интересны примеры кода.

     

  10. 40 минут назад, giveaway сказал:

    Мне в пдфку чисто картинки надо скидывать, но с определенной версткой (две на одну страницу). Это возможно сделать без сторонних средств?

    могу посмотреть, но не бесплатно (999 р.)... я картинки в pdf не делал...  так бы сказал как и так...  да посмотрите сами формат изображения в pdf-фе...

  11. 1 час назад, Бука сказал:

    Подскажите что делаю не так.

    procedure TForm1.SwitchSwitch(Sender: TObject);
    begin
      Selection.HideSelection := not Switch.IsChecked;
      Selection.HitTest := Switch.IsChecked;
      Rectangle.HitTest := not Switch.IsChecked;
    end;

    Sender в данном случае это TSwitch... нельзя его к чему попало приводить (к TRectangle или TSelection) если очень хочется, то можно к TControl... но всеравно вы обратитесь к объекту Switch но никак не к Rectangle или Selection...

  12. 1 час назад, Котэ сказал:

    Как правильно очистить дату ?

    очистить дату можно только на экране:

    DateEdit1.IsEmpty:=True;

    DateEdit1.Data := nil; - Data это свойство TFmxObject к дате TDateEdit оно не имеет отношения.

    ShowMessage(DateToStr(DateEdit1.Date)); - всегда покажет дату: тип TDate всегда имеет какое-нибудь значение (не может быть nil). Просто проверяйте свойство DateEdit1.IsEmpty перед обработкой.

  13. 6 часов назад, striker сказал:

    успел проверить правда на XP и XE6

    попробуйте запустить exe-шник на Win 7 или 10...  если там будет работать, то дело в XP... скорее всего так и будет... я чета сомневаюсь что XE6 сильно отличается от XE8....

  14. 1 час назад, striker сказал:

    Даже в Вашем примере при первом срабатывании таймера если нажать на кнопку в маленьком окне, разворачивается второе главное окно.

    странно... у меня windows 10   нормально работает и в XE8 и в 10.2.3...

    когда программа запускается, главное окно приложения сразу показывается на экране..  вы успеваете его свернуть до первого срабатывания таймера?

    программа при запуске должна быть сразу свернута?

  15. 1 час назад, striker сказал:

    спасибо, но не получилось.

    ну блиииииин...  создайте событие OnCloseQuery у всплывающего окна и вставьте туда код. у всплывающего окна сделайте "поверх всех окон" и "по центру экрана". пример во вложении.

    Project.zip

  16. 2 часа назад, #WAMACO сказал:

    Хотя бы один пример, где такое видели приведите.... просто интересно...

    Система оповещений Telegram... там можно использовать систему оповещения Windows или собственные окна оповещений...

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