S_007
-
Постов
33 -
Зарегистрирован
-
Посещение
Активность репутации
-
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 еще раз Спасибо!
-
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
всем новичкам таким как я, советую, не ведитесь хоть вы на замануху кросплатформености, не тратьте время, это развод за космические деньги
-
S_007 отреагировална mazayhin в Служба - двухсторонняя связь
Дак пример посмотрите! Он рабочий больше чем полностью
Там как раз приложение с сервисом общается через подписку. Если в процедурах RegisterReceiver и UnregisterReceiver не будете снимать комментарии, то как раз и будет использоваться глобальный ресивер ("эта строчка").
Дополнительно можете передать данные если сделаете Intent.putExtra(что то тут) и прочитаете Intent.getExtra
-
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 своими службами общается, полет нормальный.
-
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;
-
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
-
S_007 отреагировална sinuke в Обновление приложения
ну я бы сделал так:
поместил нужный файл в ресурсы (при этом в деплойменте галочку рядом с этим файлом убрал). при первом запуске проверял бы - если файл отсутсвует, то копируем из ресурсов в нужное место. а если файл уже присутствует, то ничего не делаем
-
S_007 отреагировална DMS в Обновление приложения
Как раз не обновляется то, что было в deployment-е. Для многих это головная боль)
-
S_007 отреагировална FREEFAR в Сортировка FDTable
Наличие индекса не обязательно - работает и так. А вот пробел между именем поля и "направлением" сортировки действительно надо без проблема. Ссори - не указал это
-
-
-
S_007 отреагировална FREEFAR в Сортировка FDTable
дополню немного
FDTable.IndexFieldNames := 'имя поля :A'; ASC
FDTable.IndexFieldNames := 'имя поля :D'; DESC
-
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
-
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;
-
S_007 отреагировална rareMax в Предупреждение MessageDlg
Вот пример:
procedure ShowMessage(const TheMessage:String); begin TDialogService.MessageDialog(TheMessage, TMsgDlgType.mtInformation, [TMsgDlgBtn.mbOk], TMsgDlgBtn.mbOk, 0, nil); end;
-
S_007 отреагировална Равиль Зарипов (ZuBy) в Memo и клавиатура
Использовать стандартное поведение, а не городить велики.
стандартное поведение это нажатие кнопки Назад
-
-
S_007 отреагировална Alex7wrt в Контур TRectangle
Если нужно убрать контур полностью, то
Rec_1.Stroke.Kind:=TBrushKind.None; Если нужно отобразить не все стороны, то
Rec_1.Sides := [TSide.Top, TSide.Left, TSide.Right];
-
S_007 отреагировална Akad в Лагает StrigGrid - Андроид
К сожалению, это один из бесчисленных глюков FMX, тянущихся с самого начала компиляций под мобильные платформы. Сторонний компонент обычно помогает.
-
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 выдаётся цвет строки. И так далее. В общем полнейшая кастомизация всего чего можно. Ещё бы глюки поправили...
-
S_007 отреагировална Akad в Лагает StrigGrid - Андроид
TGrid прекрасно работает под мобильными платформами. Даёт куда больше возможностей кастомизации вывода чем TListView. Плюс не лагает в отличии от, так как лагать там нечему. Ещё бы на вью его бы посадили на мобильных платформах, и поправили проблемы с тачем, что бы пляски с бубном не устраивать каждый раз - вообще цены бы не было.
-
S_007 отреагировална rareMax в Лагает StrigGrid - Андроид
Я бы на твоем месте для мобильных платформ не использовал сетку(ну максимум для отображения). Лучше использовать TListView + форму/фрейм для редактирования данных выбраного элемента.
P.S. для FMX у меня и под винду идет редактирование в форме/фрейме
-
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.
-
S_007 отреагировална Akad в Программное управление подсветкой экрана
http://www.fmxexpress.com/configure-android-system-settings-from-delphi-xe5-firemonkey/
Там SCREEN_OFF_TIMEOUT, яркость по аналогии.
P.S. Что бы перевести какой-то код с андоидовской явы на FireMonkey, я в гугле спрашиваю это словосочитание, плюс прибавляю FireMonkey. В данном случае что-то типа:
Запрос
Способ срабатывает в ~95%.