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

S_007

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

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

  • Посещение

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

  1. Like
    S_007 получил реакцию от Валерий Ильин в Предупреждение MessageDlg   
    Получилось так
    Добавить в uses FMX.DialogService
    TDialogService.MessageDialog('Уверены?', TMsgDlgType.mtConfirmation, mbYesNo, TMsgDlgBtn.mbNo, 0, procedure(const AResult: TModalResult) begin   if (AResult = mrYes) then begin // end; end); Max  еще раз Спасибо!
     
  2. Haha
    S_007 получил реакцию от Равиль Зарипов (ZuBy) в Служба - двухсторонняя связь   
    скачал пример при компиляции ошибка
    [Exec Error] The command "PATH C:\Program Files\Java\jdk1.8.0_161\bin;C:\Users\Public\Documents\Embarcadero\Studio\19.0\Bpl;C:\Users\Public\Documents\Embarcadero\InterBase\redist\InterBaseXE7\IDE_spoof;C:\ProgramData\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\ & "C:\Program Files\Embarcadero\Studio\19.0\PlatformSDKs\android-sdk-windows\build-tools\23.0.2\dx.bat" --dex --output="C:\Users\Admin\Documents\Embarcadero\Studio\LocalBroadCastReceiver\LocalBroadCastReceiver\Android\Release\LBCRService-dexed.jar" "C:\Users\Admin\Documents\Embarcadero\Studio\LocalBroadCastReceiver\LocalBroadCastReceiver\LBCRService\Android\Release\LBCRService.jar"" exited with code 1.
     
    терпения больше нет, надоели эти танцы с бубном с этой Емба- ркадеро
    поставил андроид студию куча примеров, жалею очень, что потратил столько времени на изучение глюков FMX
    всем новичкам таким как я, советую, не ведитесь хоть вы на замануху кросплатформености, не тратьте время, это развод за космические деньги
  3. Thanks
    S_007 отреагировална mazayhin в Служба - двухсторонняя связь   
    Дак пример посмотрите! Он рабочий больше чем полностью
    Там как раз приложение с сервисом общается через подписку. Если в процедурах RegisterReceiver и UnregisterReceiver не будете снимать комментарии, то как раз и будет использоваться глобальный ресивер ("эта строчка").
    Дополнительно можете передать данные если сделаете Intent.putExtra(что то тут) и прочитаете Intent.getExtra
  4. Like
    S_007 отреагировална mazayhin в Служба - двухсторонняя связь   
    А проект пробовали смотреть? Бояться не надо, там вирусов нет.
    Да, там подключается обертка для локального менеджера. Но можете использовать и глобальный, без этой доп. обертки, для того же Intent надо будет все равно подключать в проект Androidapi.JNI.GraphicsContentViewText.
    Ну и java там не особо "пахнет" - если бы смотрели, увидели бы, что
    FLocalBroadcastManager := TJLocalBroadcastManager.JavaClass.getInstance (TAndroidHelper.Context.getApplicationContext); FMyListener := TMyReceiverListener.Create; FBroadcastReceiver := TJFMXBroadcastReceiver.JavaClass.init(FMyListener); FIntentFilter := TJIntentFilter.Create; FIntentFilter.addAction(StringToJString(MY_SVC_ACTION)); FLocalBroadcastManager.RegisterReceiver(FBroadcastReceiver, FIntentFilter); к примеру, jav'у напоминает ооочень отдаленно.
    Нет готового рабочего и без "фантиков" как вы сказали - чем тогда TAndroidHelper.Context.sendBroadcast(TJIntent.JavaClass.init(StringToJString('action'))) не готовый и не рабочий?
    Не, можно конечно, в файл писать/читать, но зачем?
    Ну проблемы то они везде есть, и там может, но у нас по крайней мере проблем не возникал, ни с локальным (из поста) ни с глобальным.
    Приложение так с 2 своими службами общается, полет нормальный.
     
  5. Like
    S_007 отреагировална Andrey Efimov в Служба - двухсторонняя связь   
    Например вот так.
    в программе:
    var LIntent: JIntent; begin LIntent := TJIntent.Create; LIntent.setClassName(TAndroidHelper.Context.getPackageName(), StringToJString('com.embarcadero.services.nameservice')); LIntent.putExtra(StringToJString('NameForValue'), StringToJString('Value')); TAndroidHelper.Activity.StartService(LIntent); в сервисе:
    function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; var Value: string; begin Value := JStringToString(Intent.getStringExtra(StringToJString('NameForValue'))); // дальше что-то делаем end;  
  6. Thanks
    S_007 отреагировална sinuke в Обновление приложения   
    Ну можно примерно так (не делал проверку на исключения)
    procedure TForm1.FormShow(Sender: TObject); var LRes: TResourceStream; LFileName: string; begin LFileName := TPath.Combine(TPath.GetDocumentsPath, '1.txt'); if not TFile.Exists(LFileName) then begin LRes := TResourceStream.Create(HInstance, 'SOMEFILE', RT_RCDATA); try LRes.SaveToFile(LFileName); finally FreeAndNil(LRes); ShowMessage('Файл скопирован из ресурсов'); end; end else ShowMessage('Файл уже существует'); end; 1.txt - имя вашего файла
    TPath.GetDocumentsPath - возвращает путь как раз к папке \assets\internal
    SOMEFILE - имя ресурса, который добавлен в проект. При этом после добавления файла в ресурсы обязательно нужно зайти в Deployment и убрать галочку с добавленного файла (при добавлении в ресурсы файл автоматически добавляется в деплоймент)
    Вот тестовый проектик. Делал правда в Starter-версии, поэтому Android не доступен. Но принцип ничем не отличается
    ResFile.zip
  7. Like
    S_007 отреагировална sinuke в Обновление приложения   
    ну я бы сделал так:
    поместил нужный файл в ресурсы (при этом в деплойменте галочку рядом с этим файлом убрал). при первом запуске проверял бы - если файл отсутсвует, то копируем из ресурсов в нужное место. а если файл уже присутствует, то ничего не делаем
  8. Like
    S_007 отреагировална DMS в Обновление приложения   
    Как раз не обновляется то, что было в deployment-е. Для многих это головная боль)
  9. Like
    S_007 отреагировална FREEFAR в Сортировка FDTable   
    Наличие индекса не обязательно - работает и так. А вот пробел между именем поля и "направлением" сортировки действительно надо без проблема. Ссори - не указал это
  10. Like
    S_007 отреагировална #WAMACO в Сортировка FDTable   
    Индекс надо создать по этому полю видимо
  11. Like
    S_007 отреагировална #WAMACO в Сортировка FDTable   
    FDTable.IndexFieldNames := 'имя поля';  
  12. Thanks
    S_007 отреагировална FREEFAR в Сортировка FDTable   
    дополню немного
    FDTable.IndexFieldNames := 'имя поля :A'; ASC
    FDTable.IndexFieldNames := 'имя поля :D'; DESC
     
  13. Like
    S_007 отреагировална x11 в TeeGrid для всех платформ   
    Бесплатная сетка для некомерческого использования. Я так понял, что без исходников.
    For Embarcadero RAD Studio 2009 and up to Tokyo 10.2 update 2, Delphi and C++, VCL and Firemonkey frameworks (all platforms: Windows 32 and 64 bit, Mac OSX, Android and iOS), and Lazarus FreePascal (Windows, Linux, etc)
    https://github.com/Steema/TeeGrid

  14. Like
    S_007 отреагировална rareMax в Предупреждение MessageDlg   
    FMX.Dialogs procedure ShowMsgYesNo; begin { Show a multiple-button alert that triggers different code blocks according to your input } TDialogService.MessageDialog('Choose a button:', System.UITypes.TMsgDlgType.mtInformation, [System.UITypes.TMsgDlgBtn.mbYes, System.UITypes.TMsgDlgBtn.mbNo], System.UITypes.TMsgDlgBtn.mbYes, 0, // Use an anonymous method to make sure the acknowledgment appears as expected. procedure(const AResult: TModalResult) begin case AResult of { Detect which button was pushed and show a different message } mrYES: ShowMessage('You chose Yes'); mrNo: ShowMessage('You chose No'); end; end); end;  
  15. Like
    S_007 отреагировална rareMax в Предупреждение MessageDlg   
    Вот пример:
    procedure ShowMessage(const TheMessage:String); begin TDialogService.MessageDialog(TheMessage, TMsgDlgType.mtInformation, [TMsgDlgBtn.mbOk], TMsgDlgBtn.mbOk, 0, nil); end;  
  16. Like
    S_007 отреагировална Равиль Зарипов (ZuBy) в Memo и клавиатура   
    Использовать стандартное поведение, а не городить велики.
    стандартное поведение это нажатие кнопки Назад
  17. Like
    S_007 получил реакцию от Alex7wrt в Контур TRectangle   
    Alex безразмерное Спасибо! 
  18. Like
    S_007 отреагировална Alex7wrt в Контур TRectangle   
    Если нужно убрать контур полностью, то 
    Rec_1.Stroke.Kind:=TBrushKind.None; Если нужно отобразить не все стороны, то
    Rec_1.Sides := [TSide.Top, TSide.Left, TSide.Right];  
  19. Like
    S_007 отреагировална Akad в Лагает StrigGrid - Андроид   
    К сожалению, это один из бесчисленных глюков FMX, тянущихся с самого начала компиляций под мобильные платформы. Сторонний компонент обычно помогает.
  20. Like
    S_007 отреагировална Akad в Лагает StrigGrid - Андроид   
    Переопределите DrawColumnCell, и без проблемы выведите что как и где надо. TGrid - это конструктор. Все данные надо хранить у себя.
    Переопределить прежде всего GetValue/SetValue.
    Затем переопределить DrawColumnCell и рисовать в тех колонках, где нужен custom.
    Вот образец переопределения (то как рекомендует рисовать эмбо - загон ещё тот, лучше туда вообще не смотреть)
    procedure CScriptRunner.StringGrid1DrawColumnCell(Sender: TObject;
      const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
      const Row: Integer; const Value: TValue; const State: TGridDrawStates);
    const
      HorzTextMargin = 0;
      VertTextMargin = 0;
    var
      TextLayout : TTextLayout;
      TextRect: TRectF;
      center : TPoint;
      bmp:TBitmap;
      Val: TValue;
      color : DWORD;
      BlinkColumn : boolean;
      s, s2:string;
      p:integer;
      tm : TDateTime;
      Bou2: TRectF;
    begin
      // Например мы не хотим рисовать в колонках с чек боксами
      if Column is TCheckColumn then
      begin
         exit;
      end;
    // Например хотим менять цвет для визуального отделения строк
        TextRect := Bounds;
        case Row mod 4 of
           0:Canvas.Fill.Color := $FFFFFFFF;
           1:Canvas.Fill.Color := $FFF8F8F8;
           2:Canvas.Fill.Color := $FFFCFCFC;
           3:Canvas.Fill.Color := $FFF5F5F5;
        end;
        TextRect.Left := TextRect.Left-5;
        TextRect.Bottom := TextRect.Bottom;
        TextRect.Inflate(-HorzTextMargin+12, -VertTextMargin);
        Canvas.FillRect(TextRect, 0, 0, AllCorners, 1);
        TextRect := Bounds;
    //выводим текст
            canvas.Fill.Color := color
           canvas.Font.Family := 'Calibri';
           canvas.Font.Size := g_ProntFontSize;
           Canvas.FillText(TextRect,Value.ToString,false,100,[], TTextAlign.Leading,TTextAlign.Leading);
    end;
     
    Главное, что тут можно отрисовать картинку, обратиться например
     (Sender as TGrid).OnGetValue(Sender,-1,Row, val);
    color := val.AsUInt64;

     
    у меня на -1 выдаётся цвет строки. И так далее. В общем полнейшая кастомизация всего чего можно. Ещё бы глюки поправили...
     
  21. Like
    S_007 отреагировална Akad в Лагает StrigGrid - Андроид   
    TGrid прекрасно работает под мобильными платформами. Даёт куда больше возможностей кастомизации вывода чем TListView. Плюс не лагает в отличии от, так как лагать там нечему. Ещё бы на вью его бы посадили на мобильных платформах, и поправили проблемы с тачем, что бы пляски с бубном не устраивать каждый раз - вообще цены бы не было.
     
  22. Like
    S_007 отреагировална rareMax в Лагает StrigGrid - Андроид   
    Я бы на твоем месте для мобильных платформ не использовал сетку(ну максимум для отображения). Лучше использовать TListView + форму/фрейм для редактирования данных выбраного элемента.
     
    P.S. для FMX у меня и под винду идет редактирование в   форме/фрейме
  23. Like
    S_007 получил реакцию от #WAMACO в Программное управление подсветкой экрана   
    Akad спасибо за ответ
    получилось так, может кому пригодится... Delphi 10.2
    В опциях проекта - Uses permissions - включить  WRITE SETTINGS
     
    unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Helpers.Android, Androidapi.Helpers, Androidapi.JNI.Provider, Androidapi.JNI.App, Androidapi.JNI.GraphicsContentViewText, FMX.Controls.Presentation, FMX.StdCtrls; type TForm1 = class(TForm) Button_Plus: TButton; Button_Minus: TButton; Label1: TLabel; procedure Button_MinusClick(Sender: TObject); procedure BrightnesSet; procedure Button_PlusClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; brightness:integer; implementation {$R *.fmx} procedure TForm1.BrightnesSet; var Resolver: JContentResolver; AttainedBrightness: Single; LayoutParams: JWindowManager_LayoutParams; Window: JWindow; begin label1.Text := inttostr(brightness); Resolver := TAndroidHelper.ContentResolver; //Отключаем автоматический режим TJSettings_System.JavaClass.putInt(Resolver,TJSettings_System.JavaClass.SCREEN_BRIGHTNESS_MODE,TJSettings_System.JavaClass.SCREEN_BRIGHTNESS_MODE_MANUAL); //Устанавливаем нужную яркость TJSettings_System.JavaClass.putInt(Resolver,TJSettings_System.JavaClass.SCREEN_BRIGHTNESS,brightness); try AttainedBrightness := TJSettings_System.JavaClass.getInt(Resolver,TJSettings_System.JavaClass.SCREEN_BRIGHTNESS); CallInUIThread( procedure begin Window := TAndroidHelper.Activity.getWindow; LayoutParams := Window.getAttributes; LayoutParams.screenBrightness := AttainedBrightness / 255; Window.setAttributes(LayoutParams); end); except end; end; procedure TForm1.Button_MinusClick(Sender: TObject); begin if brightness > 20 then begin brightness := brightness - 5; BrightnesSet; end; end; procedure TForm1.Button_PlusClick(Sender: TObject); begin if brightness < 255 then begin brightness := brightness + 5; BrightnesSet; end; end; procedure TForm1.FormCreate(Sender: TObject); begin brightness := 20; end; end.  
  24. Like
    S_007 отреагировална Akad в Программное управление подсветкой экрана   
    http://www.fmxexpress.com/configure-android-system-settings-from-delphi-xe5-firemonkey/
    Там SCREEN_OFF_TIMEOUT, яркость по аналогии.
    P.S. Что бы перевести какой-то код с андоидовской явы на FireMonkey, я в гугле спрашиваю это словосочитание, плюс прибавляю FireMonkey. В данном случае что-то типа:
    Запрос
    Способ срабатывает в ~95%.



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