slav_z
Пользователи-
Постов
233 -
Зарегистрирован
-
Посещение
-
Победитель дней
33
Весь контент slav_z
-
Теперь после сборки ваш класс java будет добавлен в файл classes.dex (да! файл classes.dex ниоткуда не копируется, он собирается из файлов которые указаны в этом списке (см.картинку) поэтому его можно легко дополнить собственными классами java или убрать ненужные системные). Остается вопрос компиляции файла исходников java в jar-файл, но тут уж каждый сам за себя...
-
...потом новую платформу надо удалить и снова добавить уже через IDE обычным способом... тогда все будет корректно...
-
хотел бы я сказать, что это можно сделать через 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>
-
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; это потребуется
-
вот кусок кода "вырванный" из проекта (написано благодаря ссылке ярослава выше- спасибо): 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;
-
function IsEndScroll(ScrollBox: TCustomScrollBox): Boolean; begin Result:=ScrollBox.ViewportPosition.Y>=ScrollBox.ContentBounds.Height-ScrollBox.ClientHeight; end;
-
посмотрите реализацию TCustomListBox.Clear;
-
ну здесь же Button29 не разрушается... тыкая по кнопке будут проблемы если убивается сам элемент по которому тыкать...
-
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() при разрушении формы.
-
уберите первые две строки... попробуйте... должно заработать.
-
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.
-
Да нормально работает на XE8 и 10.3 procedure TForm6.Button1Click(Sender: TObject); var A: TJSONObject; begin A := TJSONObject(TJSONObject.ParseJSONValue('здесь неправильный json')); if Assigned(A) then A.ToString; end;
-
Показать/скрыть сенсорную клавиатуру 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 простой запуск уже не работает. Кто как делал? Очень интересны примеры кода.
-
Ищите установленное свойство Scale у родителей. Создайте новый пустой проект и проверьте поведение координат мыши там. image-mouse.zip
-
могу посмотреть, но не бесплатно (999 р.)... я картинки в pdf не делал... так бы сказал как и так... да посмотрите сами формат изображения в pdf-фе...
-
pdf - текстовый формат данных... в простом виде, без сжатия, можно самому все сделать... при желании...
-
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...
-
вылет с ошибкой? какой? или вылет по return ? ActivePrinter не nil (null) ?
-
очистить дату можно только на экране: DateEdit1.IsEmpty:=True; DateEdit1.Data := nil; - Data это свойство TFmxObject к дате TDateEdit оно не имеет отношения. ShowMessage(DateToStr(DateEdit1.Date)); - всегда покажет дату: тип TDate всегда имеет какое-нибудь значение (не может быть nil). Просто проверяйте свойство DateEdit1.IsEmpty перед обработкой.