Kitty
-
Постов
792 -
Зарегистрирован
-
Посещение
-
Победитель дней
16
Активность репутации
-
Kitty отреагировална Andrey Efimov в Прозрачность TlistViewItem
Через стиль можно сделать, "itembackground.color" ставим Null. Ну и прозрачность у самого компонента включаем.
-
Kitty отреагировална Akad в Мусор при развёртывании приложений
Ничего в этом плане с 7 версии не изменилось. Единственный надёжный что-то вычистить в студии способ - это far, alt+7, *.*, и искать все упоминания в данном случае файлов от DevExpress/FireDAC...
Эта проблема из той же серии, что когда проект копируешь в другую папку, и начинаешь там без предварительной подготовки что-то править, то правишь старые файлы а не скопированные. Подобных ммм... "фишек" у студии куча. Надо или мириться, или переходить на что-то другое. В последней версии (10.2-10.2.2) они даже ctrl+пробел сломали, а Вы про автоматическую прочистку лишних bpl.
-
Kitty отреагировална Равиль Зарипов (ZuBy) в DX 10.1[Android] TMediaPlayer не работает в потоке
нужно использовать нативный плеер, а не компонент TMediaPlayer
В интернете были примеры
-
-
Kitty отреагировална Brovin Yaroslav в Компонент нестандартной формы
В одном из продуктов Embarcadero - Beacons. Они используют следующий подход:
Загружают картинку с планом помещений В специальной программе помечают регионы помещений. По сути это данные на основании которых будет определяться помещение. Программно по указанной координате можно проверить вхождение точки в один из указанных регионов. Алгоритмов, как это сделать в принципе много. Типичный алгоритм: это обход ближайшего контура с правой стороны. Если при обходе по кривой вы все время находитесь с права от нее и в конечном итоге пришли в исходную точку, то значит вы находитесь в это регионе. Гуглить можно по теме Выпуклые оболочки. -
Kitty отреагировална x11 в Удаленное подключение к базе данных с помощью мобильного приложения
Для подключения к Firebird нужна клиентская библиотека.
Взять можно здесь https://firebirdsql.org/en/firebird-3-0/
в папке \lib
-
Kitty отреагировална Brovin Yaroslav в Приведение типа - as
Если посмотреть, что вызывается под капотом для случая с интерфейсами, то можно увидеть:
1. Для вызова Interface1(Instance), вызывает системный метод _IntfCopy, который по сути не проверяет типы, а просто увеличивает счетчик типов. Такое приведение типов не проверяет типы, а просто копирует указатель а реализацию.
procedure _IntfCopy(var Dest: IInterface; const Source: IInterface); {$IFDEF PUREPASCAL} var P: Pointer; begin P := Pointer(Dest); if Source <> nil then Source._AddRef; Pointer(Dest) := Pointer(Source); if P <> nil then IInterface(P)._Release; end; {$ELSE} 2. При использовании оператора as будет вызван _IntfCast, который выполняет честное приведение типов через QueryInterface. Поэтому в этом случае вы получите на выходе честный указатель на таблицу интерфейса, если интерфейс поддерживается объектом.
procedure _IntfCast(var Dest: IInterface; const Source: IInterface; const IID: TGUID); {$IF defined(PUREPASCAL) or defined(PIC)} // PIC: EBX must be correct before calling QueryInterface var Temp: Pointer; begin if Source = nil then Dest := nil else begin Temp := nil; if Source.QueryInterface(IID, IInterface(Temp)) <> 0 then ErrorAt(byte(reIntfCastError), ReturnAddress) else begin if Assigned(Dest) then Dest._Release; Pointer(Dest) := Temp; end; end; end;
-
Kitty отреагировална Alex7wrt в Новые требования на Google Play
Здесь речь идёт о значении targetSDK в файле манифеста. Этот параметр влияет на то, использует ли приложение новые функции последних версий SDK. То есть какие SDK приложение гарантированно поддерживает. Но если сейчас этому параметру разработчик может в принципе придавать любые значения, то со второй половины этого года Google вводит правило, что он должен быть не ниже предпоследней версии. То есть если сейчас последняя версия равна 27, значит этот параметр должен быть с августа не ниже 26 для новых приложений, а с ноября для обновлений. В дальнейшем раз в год по мере выхода новых версий Android нужно повышать это значение на 1. Так Google побуждает разработчиков использовать функции новых версий SDK.
Чтобы соответствовать этим требованиям, нужно обновлять значение параметра TargetSDK в файле манифеста, и все будет норм.
-
Kitty отреагировална x11 в Перехват события звонка
1. Там нужно заменить Activity на Context везде. И тогда можно использовать в сервисах.
2. В NextGen нельзя использовать Destoy напрямую, поэтому код destructor TCSBroadcastReceiver.Destroy; нужно убрать, а вместо этого сделать отдельную процедуру для UnregisterReceiver.
-
Kitty отреагировална Pax Beach в Использование нативных LocalBroadcastManager и BroadcastReceiver
StartCommand вызывается каждый раз, когда мы вызываем из приложения StartService.
А как обрабатывать намерение (Intent) переданный в этот метод — это наше дело.
У меня в этой команде обрабатывался и старт и стоп.
Убивать приложение через KillBackgroundProcess не обязательно, это осталось от моего другого приложения, где выгрузить процесс из памяти было критичным.
-
Kitty отреагировална ENERGY в [Статья]Как создать простой Android Broadcast Receiver. How to implement simplest Android Broadcast Receiver in Delphi
Как создать простейший Android Broadcast Receiver.
Создайте класс, для приема Intent уведомлений:
uses Androidapi.JNIBridge, Androidapi.JNI.Embarcadero, Androidapi.JNI.GraphicsContentViewText; type TMyReceiver = class(TJavaLocal, JFMXBroadcastReceiverListener) public constructor Create; procedure onReceive(context: JContext; intent: JIntent); cdecl; end; uses Androidapi.Helpers, Androidapi.JNI.JavaTypes; { TMyReceiver } constructor TMyReceiver.Create; begin inherited; end; procedure TMyReceiver.onReceive(context: JContext; intent: JIntent); begin Log.d('Broadcast Received = ' + JStringToString(intent.getAction)); end;
Регистрируем тип уведомлений и приемник в событиях формы:
type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { private } FMyListener: TMyReceiver; FBroadcastReceiver: JFMXBroadcastReceiver; public { public } end; procedure TForm1.FormCreate(Sender: TObject); var Filter: JIntentFilter; begin FMyListener := TMyReceiver.Create; FBroadcastReceiver := TJFMXBroadcastReceiver.JavaClass.init(FMyListener); Filter := TJIntentFilter.JavaClass.init; Filter.addAction(TJIntent.JavaClass.ACTION_SCREEN_OFF); Filter.addAction(TJIntent.JavaClass.ACTION_SCREEN_ON); TAndroidHelper.context.getApplicationContext.registerReceiver (FBroadcastReceiver, Filter); end; procedure TForm1.FormDestroy(Sender: TObject); begin TAndroidHelper.context.getApplicationContext.unregisterReceiver (FBroadcastReceiver); end; Все.
Теперь когда вы запустите программу и выключите\включите экран, лог покажет :
FMX: BroadcastSample: Broadcast Received = android.intent.action.SCREEN_OFF FMX: BroadcastSample: Broadcast Received = android.intent.action.SCREEN_ON Takashi Yamamoto
-
Kitty отреагировална x11 в [Статья]Как создать простой Android Broadcast Receiver. How to implement simplest Android Broadcast Receiver in Delphi
Вот, что у меня получилось http://fire-monkey.ru/topic/4723-служба-перехват-номера/
Покритикуйте, пожалуйста.
-
-
Kitty отреагировална krapotkin в [Android]как бороться с ShowMessage?
реально, столкнувшись с проблемами, я перешел к использованию собственных окон. просто пустая форма, в которой ректангл и все остальное. тогда не надо ждать когда пофиксят (никогда)
-
Kitty отреагировална Евгений Корепов в Нет анимации в ChangeTabAction
Вот моя процедура переключения, все легко и просто:
procedure TFormMain.SetActiveTab(ATabControl : TTabControl; ATabItem : TTabItem; ATransition : Boolean); Var ATabTransitionDirection : TTabTransitionDirection; ATabTransition : TTabTransition; begin if ATabControl.TabIndex = ATabItem.Index Then Exit; if ATransition then ATabTransition:=TTabTransition.Slide Else ATabTransition:=TTabTransition.None; if ATabControl.TabIndex < ATabItem.Index Then ATabTransitionDirection:=TTabTransitionDirection.Normal Else ATabTransitionDirection:=TTabTransitionDirection.Reversed; ATabControl.SetActiveTabWithTransition(ATabItem,ATabTransition,ATabTransitionDirection); end;
-
Kitty отреагировална ENERGY в Application for Windows CE
Зачем оно надо если сейчас ни одного нового телефона не выпускается с ОС Windows Phone (бывшая Win Mobile) и даже MS недавно перестала поддерживать Windows Phone.
https://itc.ua/news/microsoft-prekratila-podderzhku-windows-phone/
Microsoft уходит с рынка мобильных ОС,
-
Kitty отреагировална gonzales в Пуши в IOS
Еще доп. накину на вентилятор, вдруг кому пригодится. Чтобы в iOS появилась наклейка с цифрой на иконке программы нужно добавить в JSON запроса пуша в объект notification пару badge=цифра
-
Kitty отреагировална Brovin Yaroslav в Изменение стиля TfgActivityDialog №2
Судя по официальной доке по кастомизации диалога: https://developer.android.com/guide/topics/ui/dialogs.html?hl=ru#CustomLayout нужно именно создать тему, а не стиль.
В приведенной тобой ссылке стиль применяется не к диалогу, а к контенту, что не гибко с точки зрения кастомизации, так как прозрачность диалога задается на уровне кода, а не стиля.
Надо посмотреть тут: http://developer.alexanderklimov.ru/android/theme.php про темы в андроиде. И попробовать сделать именно тему со стилем диалога. И потом ее уже применить. Это должно сработать.
-
Kitty отреагировална Andrey Efimov в Два вопроса касательно работы MultiView
Пользуемся сначала поиском (или заходим в нужный раздел и просматриваем темы)...
[TMultiView] Как избежать задержки при первом появлении TMultiView?
-
Kitty отреагировална Brovin Yaroslav в List of new features and customer reported issues fixed in RAD Studio 10.2 Tokyo Release 2
Прочитать всю новость целиком на сайте Embarcadero
-
Kitty получил реакцию от Roman V в Программа не запускается под Android
#include <System.IniFiles.hpp> #include <System.IOUtils.hpp> #include <memory> //**** #ifdef __ANDROID__ String path = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetSharedDownloadsPath(), L"options.ini"); #elif _Windows String path = System::Ioutils::TPath::Combine(ExtractFilePath(ParamStr(0)), L"options.ini"); #endif if(FileExists(path)) { std::unique_ptr<TIniFile> FileINI(new TIniFile(path)); String ip = FileINI->ReadString(L"HOST", L"ip", L"127.0.0.1"); //**** 1. std::unique_ptr используется чтобы избавиться от delete. std::unique_ptr все делает сам.
2. Файл ini для Андроида надо сохранить в UTF-8.
-
Kitty получил реакцию от WebPuper в Открыть ссылку
Дополнительно найдено:
#if defined(__ANDROID__) #include <Androidapi.JNI.JavaTypes.hpp> #include <Androidapi.JNI.GraphicsContentViewText.hpp> #include <Androidapi.JNI.Net.hpp> #include <Androidapi.Helpers.hpp> #include <FMX.Helpers.Android.hpp> #elif defined(__APPLE__) #include <iOSapi.Foundation.hpp> #include <Macapi.Helpers.hpp> #include <FMX.Helpers.iOS.hpp> #elif defined(MSWINDOWS) #include <shellapi.h> endif bool __fastcall OpenURL(const String &AURL) { #if defined(__ANDROID__) _di_JIntent Intent = TJIntent::JavaClass->init(TJIntent::JavaClass->ACTION_VIEW, TJnet_Uri::JavaClass->parse(StringToJString(AURL))); try { SharedActivity()->startActivity(Intent); return true; } catch (const Exception &) { return false; } #elif defined(__APPLE__) _di_NSURL NSU = StrToNSUrl(AURL); if (SharedApplication()->canOpenURL(NSU)) return SharedApplication()->openURL(NSU); else return false; #elif defined(MSWINDOWS) SHELLEXECUTEINFOW sei = {0}; sei.cbSize = sizeof(sei); sei.lpFile = AURL.c_str(); sei.nShow = SH_SHOWNORMAL; return ShellExecuteEx(&sei); #else return false; #endif } void __fastcall TForm1::Text1Click(TObject *Sender) { OpenURL(L"http://fire-monkey.tu"); }
-
Kitty отреагировална enatechno в TEdit с автозавершением
Пользуйтесь поиском на сайте.
У TMS есть еще такой вариант TTMSFMXEdit. Но он платный
-
Kitty отреагировална enatechno в Программа не запускается под Android
Думаю, для Windows предпочтительнее использовать GetDocumentsPath(), т.к.:
1). как правило, exe-файл лежит в папке находящейся в Program Files и для записи ini-файла рядом с exe понадобятся права администратора;
2). если работа ведется с разных рабочих столов, то каждый пользователь сможет иметь индивидуальные настройки, хранящиеся в ini-файле
-
Kitty получил реакцию от enatechno в Программа не запускается под Android
#include <System.IniFiles.hpp> #include <System.IOUtils.hpp> #include <memory> //**** #ifdef __ANDROID__ String path = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetSharedDownloadsPath(), L"options.ini"); #elif _Windows String path = System::Ioutils::TPath::Combine(ExtractFilePath(ParamStr(0)), L"options.ini"); #endif if(FileExists(path)) { std::unique_ptr<TIniFile> FileINI(new TIniFile(path)); String ip = FileINI->ReadString(L"HOST", L"ip", L"127.0.0.1"); //**** 1. std::unique_ptr используется чтобы избавиться от delete. std::unique_ptr все делает сам.
2. Файл ini для Андроида надо сохранить в UTF-8.