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

antarey

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

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

  • Посещение

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

    2

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

  1. Like
    antarey получил реакцию от Kitty в Как в Firemonkey на C++Builder использовать ява код?   
    Итак, вот результат моих потуг
    antareyToast.java
    package com.antarey; import android.content.Context; import android.os.Handler; import android.os.Looper; import android.widget.Toast; public class antareyToast {     private Context context;     private Handler mHandler = new Handler(Looper.getMainLooper());     private String mMsg;     public antareyToast(Context context) {         this.context = context;     }     public void ShowToast(String msg)     {         mMsg = msg;         mHandler.post(new Runnable() {             public void run() {                 Toast.makeText(context, mMsg, Toast.LENGTH_SHORT).show();             }         });     } } обертка 
    unit com.antarey.antareyToast; interface uses   FMX.Helpers.Android,   Androidapi.Helpers,   AndroidAPI.JNIBridge,   Androidapi.JNI.JavaTypes,   Androidapi.JNI.GraphicsContentViewText,   Androidapi.JNI.os; type   JantareyToast = interface;   JantareyToastClass = interface(JObjectClass)     ['{C4BED43A-7A25-43F2-A9BE-B2E1602FB2D8}']     function init(JContextparam0 : JContext) : JantareyToast; cdecl;   end;   [JavaSignature('com/antarey/antareyToast')]   JantareyToast = interface(JObject)     ['{5AFABA34-5223-424D-A381-5F61E4B67B53}']     procedure ShowToast(JStringparam0 : JString) ; cdecl;   end;   TJantareyToast = class(TJavaGenericImport<JantareyToastClass, JantareyToast>)   end; procedure ShowToast(ToastMsg: String); implementation procedure ShowToast(ToastMsg: String); var  Activity:JantareyToast; begin   Activity:=  TJantareyToast.JavaClass.init(SharedActivityContext);   Activity.ShowToast(StringToJString(ToastMsg)); end; procedure RegisterTypes; begin   TRegTypes.RegisterType('com.antarey.antareyToast',TypeInfo(com.antarey.antareyToast.JantareyToast)); end; initialization RegisterTypes; end. вызов
     
    //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { ShowToast( UnicodeString(_D("Ура!!!! - Получилось")) ); } //--------------------------------------------------------------------------- Все работает.
    Более подробно читаем тут
    Но ето только один из методов, использовать стандартные библиотеки немного проще, проще в том что не надо писать ява код самому, а обертки есть уже готовые
  2. Like
    antarey получил реакцию от Brovin Yaroslav в Как в Firemonkey на C++Builder использовать ява код?   
    Итак, вот результат моих потуг
    antareyToast.java
    package com.antarey; import android.content.Context; import android.os.Handler; import android.os.Looper; import android.widget.Toast; public class antareyToast {     private Context context;     private Handler mHandler = new Handler(Looper.getMainLooper());     private String mMsg;     public antareyToast(Context context) {         this.context = context;     }     public void ShowToast(String msg)     {         mMsg = msg;         mHandler.post(new Runnable() {             public void run() {                 Toast.makeText(context, mMsg, Toast.LENGTH_SHORT).show();             }         });     } } обертка 
    unit com.antarey.antareyToast; interface uses   FMX.Helpers.Android,   Androidapi.Helpers,   AndroidAPI.JNIBridge,   Androidapi.JNI.JavaTypes,   Androidapi.JNI.GraphicsContentViewText,   Androidapi.JNI.os; type   JantareyToast = interface;   JantareyToastClass = interface(JObjectClass)     ['{C4BED43A-7A25-43F2-A9BE-B2E1602FB2D8}']     function init(JContextparam0 : JContext) : JantareyToast; cdecl;   end;   [JavaSignature('com/antarey/antareyToast')]   JantareyToast = interface(JObject)     ['{5AFABA34-5223-424D-A381-5F61E4B67B53}']     procedure ShowToast(JStringparam0 : JString) ; cdecl;   end;   TJantareyToast = class(TJavaGenericImport<JantareyToastClass, JantareyToast>)   end; procedure ShowToast(ToastMsg: String); implementation procedure ShowToast(ToastMsg: String); var  Activity:JantareyToast; begin   Activity:=  TJantareyToast.JavaClass.init(SharedActivityContext);   Activity.ShowToast(StringToJString(ToastMsg)); end; procedure RegisterTypes; begin   TRegTypes.RegisterType('com.antarey.antareyToast',TypeInfo(com.antarey.antareyToast.JantareyToast)); end; initialization RegisterTypes; end. вызов
     
    //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { ShowToast( UnicodeString(_D("Ура!!!! - Получилось")) ); } //--------------------------------------------------------------------------- Все работает.
    Более подробно читаем тут
    Но ето только один из методов, использовать стандартные библиотеки немного проще, проще в том что не надо писать ява код самому, а обертки есть уже готовые
  3. Like
    antarey отреагировална Brovin Yaroslav в У меня не получается собрать приложение с потоками на C++ Builder под Андроид   
    Дело в том, что класс TThread является частью библиотеки RTL и не зависит от VCL никаким способом. Поэтому, это сообщение может появится из-за ошибочного подключения файлов VCL. Так же RTL полностью кроссплатформенна. Поэтому работа с классом TThread одинакова для всех платформ. Резюме
    Нужно проверить все файлы проекта и убедиться, что они не используют файлы VCL.
     
    А именно Unit2.cpp, поскольку речь в сообщение об ошибке идет именно об этом модуле.
     
    Проверил на чистом проекте, описанное вами поведение в RAD Studio XE6 Beta, не обнаружил.
  4. Like
    antarey отреагировална Andrey Efimov в Как убрать отладочную информацию из пакета приложения для Андроид?   
    В блоке "Project Maneger" открываем "Build Configurations" и выбираем "Release". (правда, не знаю как там в XE6)

  5. Like
    antarey отреагировална Brovin Yaroslav в Как массово задать размер шрифта у всех контролов?   
    Добрый день,
     
    В RAD Studio XE5 для поддержки возможности массово менять настройки текста для любых контролов был введен специальный интерфейс ITextSettings. Каждый контрол, который поддерживает настройку параметров текста, реализует этот интерфейс. Поэтому, чтобы массово поменять настройки текста можно использовать, например, следующий код (Delphi, он легко переводится на C++). Этот код Для всех наследников, которые не используют размер шрифта из стиля, задает размер шрифта:
    var Settings: ITextSettings; Instance: TComponent; I: Integer; begin for I := 0 to ChildrenCount - 1 do begin Instance := Children[I]; if IInterface(Instance).QueryInterface(ITextSettings, Settings) = S_OK then begin // using ITextSettings methods and properties: // TextSettings: TTextSettings, // DefaultTextSettings, // StyledSettings // to change properties of text objects Settings.TextSettings.BeginUpdate; try Settings.TextSettings.Font.Size := 18; if TStyledSetting.ssSize in Settings.StyledSettings then Settings.StyledSettings := Settings.StyledSettings - [TStyledSetting.ssSize] // show Font.Size := 18 else Settings.StyledSettings := Settings.StyledSettings + [TStyledSetting.ssSize]; // restore showing Font.Size loaded from a style finally Settings.TextSettings.EndUpdate; end; end; end; end;
  6. Like
    antarey отреагировална Brovin Yaroslav в Как определить положение картинки в TListBoxItem?   
    Добрый день,
    В событии MouseDown у TListBoxItem ищем в стиле итема объект изображения. Для итема картинка имеет название 'icon'. Определяем координаты мыши в координатах формы (Абсолютные координаты). На случай отступов и произвольного размещения изображения. Конвертируем абсолютные координаты в локальные координаты изображения. Если картинка содержит координаты мыши, значит нажали на картинку. Delphi:
    procedure TForm6.ListBoxItem1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); var Item: TListBoxItem; StyleObject: TFmxObject; StyleIcon: TControl; LocalMousePos: TPointF; AbsoluteMousePos: TPointF; begin if Sender is TListBoxItem then begin Item := TListBoxItem(Sender); LocalMousePos := TPointF.Create(X, Y); AbsoluteMousePos := Item.LocalToAbsolute(LocalMousePos); // Ищем объект стиля - картинка. Лучше закешировать один раз, избежав постоянный поиск картинки StyleObject := Item.FindStyleResource('icon'); if (StyleObject <> nil) and (StyleObject is TControl) then begin StyleIcon := TControl(StyleObject); // Координаты в локальной системе координат картинки LocalMousePos := StyleIcon.AbsoluteToLocal(AbsoluteMousePos); if StyleIcon.LocalRect.Contains(LocalMousePos) then ShowMessage('Click on Image'); end; end; end; Builder C++:
    void __fastcall TForm4::ListBoxItem1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, float X, float Y) { TListBoxItem *item = dynamic_cast<TListBoxItem*>(Sender); if (item != 0){ TPointF localMousePos(X, Y); TPointF absoluteMousePos = item->LocalToAbsolute(localMousePos); // Ищем объект стиля - картинка. Лучше закешировать один раз, избежав постоянный поиск картинки TFmxObject *styleObject; styleObject = item->FindStyleResource("icon"); if (styleObject != NULL) { TControl *styleIcon = dynamic_cast<TControl*>(styleObject); // Координаты в локальной системе координат картинки localMousePos = styleIcon->AbsoluteToLocal(absoluteMousePos); if (styleIcon->LocalRect.Contains(localMousePos)) ShowMessage("Click on Image"); } } }
×
×
  • Создать...