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

Kitty

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

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

  • Посещение

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

    16

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

  1. Like
    Kitty получил реакцию от xenon54 в [Aндроид] Не вызывается LocationChanged у TLocationSensor   
    Помогла перепрошивка планшета. Правда дебаг не работает, такое же сообщение как здесь http://fire-monkey.ru/topic/968-pri-zapuske-otladki-na-planshete-poluchaiu-oshbku-unab/#entry4138
  2. Like
    Kitty отреагировална ruslan в [Android] Как узнать мой IP адрес?   
    http://lfgonzalez.visiblogs.com/2014/11/radstudio-xe6xe7-remote-push-notifications-gcm-y-apns/
  3. Like
    Kitty отреагировална xenon54 в [Android] Как узнать мой IP адрес?   
    Notification server это "прокладка" между вашим сервером и устройством. Этот сервер сам знает как послать сообщение на устройство, вам не нужно заботиться об IP и всем вытекающем отсюда. Вы наверняка видели как всякие Viber и Whatsup присылают сообщения когда приложение свернуто. Появляются всплывающие сообщения. Так вот эти сообщения приходят с Notification Server'a.
     
    Почитайте тут и тут. Ну и вообще просто погуглите "Remote Push Notification Android Delphi".
  4. Like
    Kitty отреагировална xenon54 в [Android] Как узнать мой IP адрес?   
    Это плохое взаимодействие.
    1. Если приложение выгружено, связи не будет.
    2. Оператор сотовой связи может вам 100 раз IP поменять пока вы будете слать что-то друг другу.
     
    В своем проекте под IOS я использую Apple push notification, для андроида тоже есть Notification. Суть в том, что ваше приложение на девайсе загружается и тутже отправляет запрос на notification сервер на регистрацию. Тот выдает обратно в ответ Device Token (некий уникальный идентификатор устройства). Вы этот  Device Token посылаете на сервер и запоминаете его, чтобы потом знать кому отправлять сообщение. Все. С этого момента ваше обращение к устройству происходит через Notification server. Вы посылаете запрос с сервера на Notification server с  Device Token устройства. А сервер доставляет это сообщение на устройство. Это сообщение может иметь текст, может не иметь, может быть со звуком и без, может быть вообще невидимым для пользователя, но при получении такого сообщение, устройство запускает в фоновом режиме приложение и выполняет то что вы там пропишете в обработчике. А если запущено приложение, то тут же выполняет то что вам нужно. Возможно под андроид есть свои нюансы, но принцип думаю такойже.
  5. Like
    Kitty отреагировална Brovin Yaroslav в [XE7] [Отклонение] Не удается запустить приложение на Android 5.0   
    Hot Fix исправляющий проблему запуска приложений на Android 5.0 (Lollipop)
  6. Like
    Kitty отреагировална Andrey Efimov в [Android] Как узнать мой IP адрес?   
    Посмотрите вот эту страничку http://stackoverflow.com/questions/6064510/how-to-get-ip-address-of-the-device
  7. Like
    Kitty отреагировална Brovin Yaroslav в [Андроид] Можно ли эмулировать координаты GPS на эмуляторе?   
    Добрый день,
     
    Стандартный эмулятор поддерживает указание гео координат. Но для этого нужно подключиться к симулятору через telnet и прописать ему ручками местоположение. 
     
    1. Включаем поддержку клиента Telnet для Windows 7-8
    Пуск - Панель управления - Программы и компоненты - Включение или отключение компонентов windows - Клиент Telnet (ставим галочку)

     
    2. Подключаем к эмулятору через telnet
    Запускаем командную строку cmd:

     
    3. Задаем координаты эмулятора
    задаем координаты и смотрим, как в сенсоре срабатывает событие смены геопозиции:

     
    Подробности тут:
    Using the Emulator Console Geo Location Provider Emulation
  8. Like
    Kitty отреагировална Brovin Yaroslav в Рисование средствами iOSapi.CoreGraphics   
    Рисовать средствами iOSapiVoreGraphics можно только на нативном UIView. Поэтому для начала нужно создать на форме нативный UIView. Рисование возможно только в перекрытом методу UIView.drawRect. Поэтому создаем отдельный класс UIView и перекрываем метод DrawRect. 
     
    Ниже приведен код, оболочки UIView, который выполняет отрисовку, через событие OnPaint.
    unit FMX.DrawableView; interface uses System.Types, System.TypInfo, iOSapi.CoreGraphics, iOSapi.UIKit, Macapi.ObjectiveC; type IMyView = interface(UIVIew) ['{A7145466-B0FA-42C1-A588-E73D03FFEBF1}'] procedure drawRect(rect: CGRect); cdecl; end; TOnPaint = procedure (Sender: UIView; Context: CGContextRef; const Rect: CGRect) of object; TDrawableView = class(TOCLocal) private FOnPaint: TOnPaint; function GetView: UIView; protected function GetObjectiveCClass: PTypeInfo; override; public constructor Create(const AFrame: TRectF); procedure drawRect(rect: CGRect); cdecl; public property View: UIView read GetView; property OnPaint: TOnPaint read FOnPaint write FOnPaint; end; implementation { TMyView } constructor TDrawableView.Create(const AFrame: TRectF); var V: Pointer; begin inherited Create; V := View.initWithFrame(CGRectMake(AFrame.Left, AFrame.Top, AFrame.Width, AFrame.Height)); if GetObjectID <> V then UpdateObjectID(V); end; procedure TDrawableView.drawRect(rect: CGRect); var context: CGContextRef; begin context := UIGraphicsGetCurrentContext(); try if Assigned(FOnPaint) then FOnPaint(View, context, rect); finally CGContextClearRect(context, rect); end; end; function TDrawableView.GetObjectiveCClass: PTypeInfo; begin Result := TypeInfo(IMyView); end; function TDrawableView.GetView: UIView; begin Result := UIView(Super); end; end. После того, как у нас есть нативное UIView, мы должны его создать и повесить на наше введенное событие OnPaint обработчик отрисовки:
    private FView: TDrawableView; protected // Декларация обработчика рисования procedure DoPaint(Sender: UIView; Context: CGContextRef; const Rect: CGRect); uses FMX.Platform.iOS; constructor TForm1.Create(AOwner: TComponent); var iOSHandle: TiOSWindowHandle; begin inherited; FView := TDrawableView.Create(TRectF.Create(0, 0, 200, 200)); FView.OnPaint := DoPaint; iOSHandle := WindowHandleToPlatform(Handle); iOSHandle.View.addSubview(FView.View); end; // Пример отрисовки красного прямоугольника procedure TForm1.DoPaint(Sender: UIView; Context: CGContextRef; const Rect: CGRect); begin CGContextSetRGBFillColor(context, 255, 0, 0, 1); CGContextFillRect(context, CGRectMake(20, 20, 100, 100)); end; В итоге получаем встроенное представление в форму, с отрисованным красным квадратом:

     
    Демо проект: iOS_Draw_Rect.zip
    Подробности отрисовки: Введение в Core Graphics на iOS
  9. Like
    Kitty отреагировална Brovin Yaroslav в [Отклонение] TMediaPlayerControl не скрывается, если он лежит на вкладке, которая скрывается   
    Завел багу на девелопера в трекере. 
     
    TBitmapListAnimation вам тут точно не помощник. 
  10. Like
    Kitty отреагировална xenon54 в [Android] Как узнать мой IP адрес?   
    Там же список возвращается? в нем только 127.0.0.1? Других значений нет?
    #include <linux/if.h> #include <linux/if_arp.h> #include <arpa/inet.h> #include <sys/socket.h> String strGetSocketAddressProperty(String strInterface, int iProperty) { int fd(0); int rv; struct ifreq ifr; char buffer[128]; String strProperty = "" , IPAddr ; try { fd = socket(AF_INET, SOCK_DGRAM, 0); } catch (...) { ShowMessage("Error here"); } ifr.ifr_addr.sa_family = AF_INET; memset(ifr.ifr_name,0,IFNAMSIZ); memcpy(ifr.ifr_name,AnsiString(strInterface).c_str(),AnsiString(strInterface).Length()); rv = ioctl(fd, iProperty, &ifr); if (rv == 0) { /* display result */ IPAddr = inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr) ; strProperty = IPAddr ;//buffer; strProperty = Trim(strProperty); } else { strProperty = (IntToStr(rv)); //DEBUG_MESSAGE(std::string("rv: ") + itoa(rv) ); } close(fd); return strProperty; } void __fastcall TForm1::btn1Click(TObject *Sender) { mmo1->Lines->Clear(); mmo1->Lines->Add( strGetSocketAddressProperty(L"wlan0",SIOCGIFADDR) );//ip address mmo1->Lines->Add( strGetSocketAddressProperty(L"wlan0",SIOCGIFNETMASK) );//net mask mmo1->Lines->Add( strGetSocketAddressProperty(L"wlan0",SIOCGIFBRDADDR) );//broadcast address } Так пробовали?
  11. Like
    Kitty отреагировална xenon54 в [Android] Как узнать мой IP адрес?   
    Вот кстати, нашел: https://forums.embarcadero.com/thread.jspa?threadID=109341
  12. Like
    Kitty отреагировална Streletz в [Андроид] Можно ли эмулировать координаты GPS на эмуляторе?   
    Код рабочий. Обычно, требуется некоторое время для получения координат и данных из GoogleMaps.
     
    Координаты на устройстве определяются?
  13. Like
    Kitty отреагировална ruslan в [Android] Как узнать мой IP адрес?   
    можно куда проще 
    ip:= IdHttp.get('http://icanhazip.com/');
  14. Like
    Kitty отреагировална xenon54 в [XE7] [iOS] Важно Владельцам XE7 не обновлять iOS до версии 8.1.3   
    Вот еще
    P.S.: Первый пост нужно поправить, там первая ссылка неправильная.
  15. Like
    Kitty отреагировална Andrey Efimov в [Android] Как узнать мой IP адрес?   
    Используйте Андроид АПИ, например для WiFi, можно вот так "Android API: package "android.net.wifi" или обёртка для работы с Wi-Fi", в комментах есть код для перевода ip адреса из числа. По такому же принципу можно и 3G ip определить. Возможно в АПИ (надо смотреть в справке) есть вообще готовый класс, который выводит общую информацию о соединении, т.е. не зависимо от типа подключения.
  16. Like
    Kitty отреагировална xenon54 в [Android] Как узнать мой IP адрес?   
    uses IdCustomTransparentProxy, IdSocks, IdIPWatch, IdStack, IdTCPConnection, IdTCPClient, IdHTTP; function TForm1.localip : string; var AAddresses: TStrings; begin AAddresses := TStringList.Create; try TIdStack.IncUsage; try GStack.AddLocalAddressesToList(AAddresses); finally TIdStack.DecUsage; end; if AAddresses.Count > 0 then begin if TOSVersion.Platform = pfiOS then Result := AAddresses.Strings[AAddresses.Count-1]; //AAddresses if TOSVersion.Platform = pfWindows then Result := AAddresses.Strings[0]; end; finally AAddresses.Free; end; end; ​В "AAddresses" вы получите все локальные IP. Это будет и IP от wifi и ip от LTE\GPRS и т.д.
  17. Like
    Kitty отреагировална Andrey Efimov в Delphi XE7: Программно проверить root права. [Android]   
    Где-то, я уже отвечал на подобный вопрос, но найти что-то не могу...
    Варианты, которые известны мне:
    В лоб: Попробовать создать или изменить файл в защищённой директории (уже предложил Alexey Lovchikov) Тут тоже есть свои "камни", я лично не проверял, что будет если права есть, насколько я понимаю, приложение ещё должно запросить эти права Работает на большинстве устройств с рут-правами: Проверить установлено ли приложение SuperSU, если да, то права есть Не точная информация: Была вроде как команда (лучше в гугле посмотреть) для работы с рут-правами, что-то типо этого Runtime.getRuntime().exec("su");
  18. Like
    Kitty отреагировална Alexey Lovchikov в Delphi XE7: Программно проверить root права. [Android]   
    А почему бы просто не пробовать изменять эти некоторые файлы в try except. В случае вылета ексепшена обрабатывать его и выдавать сообщение вроде "Отсутствуют права доступа на запись в файл так как нет Root прав"
  19. Like
    Kitty отреагировална Alexey Lovchikov в Как задать направление линейного градиента?   
    http://docwiki.embarcadero.com/CodeExamples/XE7/en/FMXGradient_(Delphi)
     
    Используй 
        fill.Gradient.StartPosition.Y     fill.Gradient.StartPosition.X     fill.Gradient.StopPosition.X Gradient.zip
  20. Like
    Kitty отреагировална Brovin Yaroslav в Лямбда выражения   
    Поддержка есть, но только для C-Lang основных компиляторов
    C++11 Features Supported by RAD Studio Clang-based C++ Compilers Clang-based C++ Compilers
  21. Like
    Kitty получил реакцию от Streletz в [Андроид] Можно ли эмулировать координаты GPS на эмуляторе?   
    Здравствуйте.
    Можно ли на эмуляторе увидеть координаты устройства с помощью LocationSensor или это возможно только на реальном устройстве?
    Код ниже ничего не показывает. Просто белый квадрат в браузере WebBrowser.
    void __fastcall TForm1::LocationSensor1LocationChanged(TObject *Sender, const TLocationCoord2D &OldLocation, const TLocationCoord2D &NewLocation) { String LGoogleMapsURL = "https://maps.google.com/maps?q=%s,%s"; Label1->Text = String().sprintf(L"%2.5f", NewLocation.Latitude); Label2->Text = String().sprintf(L"%2.5f", NewLocation.Longitude); TVarRec vr[] = {Label1->Text, Label2->Text}; WebBrowser1->Navigate(Format(LGoogleMapsURL, vr, 2)); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormShow(TObject *Sender) { LocationSensor1->Active = true; }
  22. Like
    Kitty отреагировална Alexey Lovchikov в [TEdit] [Android] Как сделать TEdit в Android полностью прозрачным?   
    Используй свой стиль TEdit, во вложении пример 
     
     
    Primer.zip
  23. Like
    Kitty отреагировална Brovin Yaroslav в [TEdit] [Android] Как сделать TEdit в Android полностью прозрачным?   
    Отредактировать стиль по умолчанию для эдита и из стиля удалить стилевой объект "Background"
     
    1. В контекстном меню эдита выбирает Edit Default Style или Edit Custom Style для создания отдельного стиля без замены стандартного:

    2. Удаляем в стиле editstyle объект background (Для удаления нужно нажать кнопку в тулбаре окна Structure):

    3. Получаем результат:

  24. Like
    Kitty отреагировална Brovin Yaroslav в ась ?   
    Вы, по-видимому, так и не поняли, что к чему. Ради вас, я потрачу свое время на написание ответов на все ваши претензии. Но только один раз.
     
    Перед тем, как я отвечу. Я хочу сделать небольшое введение фактов, чтобы вам было проще понять картинку в вашей голове:
     
    Цели форума:
    Создать полезный сообществу ресурс для решения вопросов/проблем разработки с использованием FireMonkey" Создать удобную структуру для быстрого поиска ответов и получения полезной информации, Избежать лишней болтовни и выяснения отношений вместо смотреть пункт 1, что очень часто свойственно другим форумам. По возможности помочь пользователям решить их задачи и предоставить актуальную информацию так сказать из первых уст. Поддерживать хорошие нормы поведения и профессиональной этики среди всех пользователей сайта для создания здорового взрослого сообщества. Привлечь разработчиков, которые будут обогащаться знаниями на форуме, делиться своими решениями и помогать другим. Форум - это не место обсуждения политики компании и продукта, а смотреть предыдущие пункты. Вам важно это знатьФорум - моя личная инициатива, о которой американскому руководству компании ничего не сказано. Я владелец этого форума и домена. И я устанавливаю правила приличия, нормы поведения и правила публикации информации на этом форуме. Компания Embarcadero не может повлиять правилами на мой ресурс. Именно по этому я создал отдельный русскоязычный форум, вместо http://forums.embarcadero.com/ Я занимаюсь форумом в свое личное свободное время. Я плачу из своего кармана за хостинг и веду техническую поддержку. Я бесплатно его сделал своими усилиями. Я бесплатно помогаю людям решить их задачи. Я отвечаю только тогда, когда:У меня есть время (смотреть пункт 4) Когда у меня есть полноценный, полный, уверенный (не догадки) ответ, полностью раскрывающий задачу и подробно описывающий пути решения. Я не отвечаю на те вещи, которые требуют от меня больших исследований при наличии других вопросов. Если я не знаю быстрого ответа, я спрашиваю у своих коллег, которые занимались разработкой того или иного компонента. Я удаляю с форума:Весь флуд - ответы не несущие смысловой нагрузки по заданному вопросу.  Ложные наводки на решение Потерявшие актуальность со временем комментарии и темы Пробы найти решения. Описание ошибок, если для них не существует workaround. (Иногда я делаю исключение из правил на публикацию ошибок и даю обходные решения багов) Темы, где человек сам допустил ошибку и сам нашел её ошибку и пользы от этого вопроса для других нету. На вопрос об уточнение деталей не было получено ответа в течении долгого времени от пользователя для того, чтобы можно было дать ответ. Вопросы, на который было дано обходное решение и оно уже не актуально в новой версии продукта. Я уважаю проявление правил приличия и уважения пользователями при ответах и задании вопросов и ценю это.  Я не распространяю дистрибутивы лицензионных продуктов, ключи и их части (это к вопросу личных сообщений выслать утилиты и ключи). P.S. Вам следует внимательно обратить свое внимание на 11 пункт. Если вы хотите, чтобы мы с вами продолжили общаться. А теперь по деталям: 

     Полагаю ответ уже дан.
     

     Я просто оставлю эти скриншоты тут, а каждый сам сделает свои выводы.
     
    1.1 Об удаляемых комментариев.





    Это те сообщения, которые были удалены за последние 8 месяцев. Про ценность ваших удаленных ответов я промолчу.
     
    1.2 Об удаляемых темах
    Ниже скриншот, удаленных за год тем с пояснением причины удаления и несколько скриншотов, удаленных тем:


     

     Я поясню, что я разработчик компании Embarcadero, а именно FireMonkey. Я отвечаю за разработку определенных компонентов, в основном это все работа с нативными вещами + разработку мобильных сервисов.  Мне платят за эту работу. Я не продавец, хотя я в курсе годовой статистики по продажам. Мне совершенно все равно, кто и сколько покупает лицензий. Я делаю свою любимую работу. Форум - одно из моих хобби. Меня приглашают в Москву на Launch и я принимаю решение, поеду я или нет. Обычно я соглашаюсь, так как это мне интересно.
     
    Но вы почему-то уверенно считаете, что я "втюхиваю" вам что-то. 
     

     Опять плохо понимаете. Воспроизводится, укажите детали.
     

     Иногда у меня складывается впечатление, что вы инсайдер в компании. И знаете больше, сидя дома, чем знают в компании во всем мире. Однако, продукт развивается, совершенствуется и продажи растут. Да и не понятно тогда, зачем вы при таком "очевидном" раскладе тут делаете.
     

    У каждого человека есть выбор, я вас не держу на форуме. Вы свободны в выборе и можете пользоваться другими ресурсами, если правила этого вас не устраивают. Если вы продолжите изливать свою желчь на форуме, я буду вынужден сделать вам предупреждение. Хотя я думаю, у всех бывает плохое настроение.  У меня тоже.

  25. Like
    Kitty отреагировална Brovin Yaroslav в [XE7] [iOS] Важно Владельцам XE7 не обновлять iOS до версии 8.1.3   
    Apple изменили формат файлов info.plist и entitlements с версии 8.1.3, что приводит к невозможности автоматически запустить приложение на iOS без внесения правок в эти файлы.
    Поэтому не обновляйте ваши устройства пока до последней версии iOS 8.1.3. Будет выпущен специальный фикс для XE7.
    Если вы уже обновили устройства до iOS 8.1.3, то для запуска требуется внести изменения в файлы info.plist и entitlements.
     
    Инструкция по запуску приложений на iOS 8.1.3. или другая на немецком
×
×
  • Создать...