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

Brovin Yaroslav

Администраторы
  • Постов

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

  • Посещение

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

    390

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

  1. Like
    Brovin Yaroslav получил реакцию от Вадим Шавров в Где взять стандартный стиль в FireMonkey для iOS и Android, используемый по умолчанию?   
    Хороший вопрос.
     
    Не все знают, что в RAD Studio XE5 входит дизайнер растровых стилей для VCL (BitmapStyleDesigner), который также позволяет автоматически создавать стили для FireMonkey. Этот дизайнер находится в папке Bin/bitmapStyleDesigner.exe и содержит внутри себя автоматическую конвертацию любого VCL стиля в FireMonkey. 

    Этот дизайнер также предназначен для внесения правок в стандартные системные стили андроида и йос.
     
    Чтобы получить системный стиль Android Dark, Android Light, iOS, iOS 7 нужно:
     
    1. Выбрать дефолтный требуемый стиль: 

    2. Сохранить стиль как стиль FireMonkey:

     
    А дальше использовать файл стиля в своих приложениях.
  2. Like
    Brovin Yaroslav получил реакцию от petyaas в Как правильно запустить видео в плеере из своей программы?   
    Собственно говоря, Android - хоть и linux подобная система, но команда System не распространяется на проигрывание видео в стандартном видео плейeре.
     
    Поэтому как правильно заметил konung, проигрывание видео файла в стандартном проигрывателе на платформе Андроид осуществляется при помощи намерений (Intent).
    uses Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.Net, Androidapi.Helpers, FMX.Helpers.Android; {$R *.fmx} procedure PlayVideo(const AFileName: string); var Intent: JIntent; Data: JNet_Uri; begin Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW); Data := StrToJURI(AFileName); Intent.setDataAndType(Data, StringToJString('video/avi')); SharedActivity.startActivity(Intent); end;
  3. Like
    Brovin Yaroslav получил реакцию от petyaas в [TTabControl] Как сделать плавное переключение двух вкладок в TTabControl?   
    Самый простой вариант использования эффекта прокручивания основывается на использовании компонента TTabControl, который реализует переключение табов (вкладок) с анимацией. Для этого достаточно:
    Поместить TTabControl на форму и растянуть его на всю область TTabControl.Align = alClient. Создать вкладки. Одну вкладку на один логический экран (слайд, представление и тд). На каждую вкладку помещаете любой контент. В вашем случае TListBox. Вызвать в нужный момент метод переключения вкладок с анимацией: TTabControl.SetActiveTabWithTransition(const ATab: TTabItem; ATransition: TTabTransition; const ADirection: TTabTransitionDirection = TTabTransitionDirection.tdNormal) Где, 
    ATab: TTabItem - Вкладка, которую нужно отобразить ATransition: TTabTransition - Отобразить вкладку мгновенно или с эффектом сдвига (В вашем случае нужно второе TTabTransition.ttSlide) ADirection: TTabTransitionDirection - направление эффекта сдвига: Слева на право (TTabTransitionDirection.tdNormal) или с права налево (TTabTransitionDirection.tdReversed). Второй способ
    Аналогично создаем Таб контрол с вкладками, но для переключения вкладок используем стандартное действие TChangeTabAction, которое выполняет те же действия, что и SetActiveTabWithTransition. Действия доступны в редакторе TActionList "New Standart Action..."
     

  4. Like
    Brovin Yaroslav получил реакцию от sargon в Sphere Live - мультиплатформенная система c функциями видеоконференцсвязи, файлового обмена, облачного хранилища   
    Официальный сайт: http://sphere-live.com/
    Обзорные статьи: HabraHabr, delphi2010.ru
    Ссылки на приложения: Windows, OSX, Android
     



  5. Haha
    Brovin Yaroslav отреагировална Tumaso в Разочирование   
    Код также пишешь, как пишешь на русском языке?
  6. Like
    Brovin Yaroslav отреагировална brunnengi в -=ЗАКАЗ=- [Delphi Tokyo][Android] Приложение со SQlite и Сервис   
    Можно не устраивать флуд в теме?
    Если потом приспичит сделать через Push, дам задание. Пока надо так.
    А то вы сейчас начнете тут уточнять чем лучше, что улыбнуло и кого. Оно мне вот вообще не нужно тут.
    Я уже до этого задавал вопрос про разницу в Сервисе и Пуше. Меня ответы не устроили. 
    Есть такое задание и по нему давайте двигаться. Весь офф топ, можете создать в отдельной теме и обсудить там.
    Я же жду того кто возьмется, а вместо этого вижу каждый раз ваши коменты. Я же не  ветку сделал "как лучше мне сделать", а конкретно поставил что я хочу.
    Спасибо за понимание.
  7. Thanks
    Brovin Yaroslav отреагировална x11 в BroadcastReceiver.OnReceive срабазывает 2 раза   
    http://blog.mmarvick.com/blog/lollipop-multiple-broadcastreceiver-call-state/
    это проблема андроида

  8. Haha
    Brovin Yaroslav получил реакцию от Vitaldj в Linux платформа   
    Из коробки Linux работает только для консольных приложений без GUI. Если хочется, чтобы FMX приложение можно было запускать на Linux, то нужно купить дополнительно стороннюю либу: http://www.fmxlinux.com 
  9. Like
    Brovin Yaroslav отреагировална dnekrasov в Скорость рисования на канве   
    Я в данном случае использую TPathData и Canvas.DrawPath. График из 1024 точек 10 раз в секунду перерисовывается без проблем
    var i: Integer; Path: TPathData; begin Path := TPathData.Create; try Path.MoveTo(PointList[0]); for i := 1 to PointList.Count - 1 do Path.LineTo(PointList[i]); end; Canvas.DrawPath(Path, 1); finally FreeAndNil(Path) end;  
  10. Like
    Brovin Yaroslav отреагировална Vitaldj в Linux платформа   
    Так у тебя какая версия и  редакция? Это работает только с Токио и только с редации Enteprise. 
    И там нужно установить с их сайта дополнительный фреймворк для linux
  11. Like
    Brovin Yaroslav отреагировална WinterSun в Протектор FireMonkey приложений для Mac OS X   
    Здравствуйте. 
    VMProtect вроде бы умеет.
  12. Like
    Brovin Yaroslav отреагировална rareMax в Оповещение о новых темах в Telegram   
    Запущен канал в мессенджере Telegram, в котором оповещается о новых темах этого форума. На данный момент могут быть некоторые сбои, будьте терпеливы
    Предложения пишите тут, в комментариях. 
    Канал: https://t.me/FMonkeyX
     
     
  13. Like
    Brovin Yaroslav получил реакцию от Ingalime в Modernize Your Apps   
    Modernization continues to be one of the most important topics for many of our customers. Delphi has been around for some time and there are plenty of great “legacy” apps going back all the way to Delphi 7. While it is a testament to the quality of our development frameworks, at some points ten-year-old apps are, well simply too old… Our community of developers are moving to the latest versions so that they can deliver modern, compelling products to their customers. Internally, we have been taking this same journey with the RAD Studio product itself, and while it is not always easy, it is worth the effort. I think that we are finally making a lot of progress, which emboldens me to share some lessons learned that may help you plan your own journey.
     
    Update the UI
    I think that the most difficult part of any Modernization project is the compelling argument for a UI update. There is one school of thought that says that if it works, who cares that an icon looks old. It is also difficult for developers to be very passionate about it, as they also frequently do not care about look and feel. Yet, an updated look and feel is HUGE. We have made many gradual updates to RAD Studio over the last two years and have a few more in store. When we do surveys, rarely does the look and feel get prioritized. Enterprise software customers rarely admit to buying a software solution because “it looks pretty”.  But once UI improvements are made, the impact tends to be surprisingly high. Especially for Delphi apps that come with an inherent  “legacy” bias. It is a fight worth fighting and fortunately some of the updated VCL and FMX tooling make implementations easier. Take your time and do it right. It is totally worth getting professional designer help (again something that many developers do not do). Be sure not to overlook the impact of nice high quality icons. Here are some examples of the icons that we used for 10.2.2. There are so many choices out there that are very inexpensive. I love www.icons8.com for example.
     

     
    Do Mobile
    One of the great advantages of Delphi today is FMX. As smartphone adoption increases (~70% by 2018), FMX will grow in relevance.  If you know VCL, development with FMX is relatively natural. There are of course some styling and behavior specificities, and frankly we need to improve the RAD Studio workflow more, but the productivity is amazing. Most other approaches require a separate team and investment. Historically Mobile Apps were Outsourced as a package, but this is changing. FMX allows a Delphi team to build the Mobile App. You do not need to recreate the old app with FMX, but building meaningful mobile extensions is a must. You will gain immense respect and the Delphi tech will be perceived rightfully as Modern. And you get to build your team. There is a lot of training help to get you started. I personally like Delphi Styles that can deliver some very slick custom looks (below are a couple of great FMX style templates from www.delphistyles.com)
     

     
    Make It “Multi-Tier”
    Architecture is not simple. Unfortunately, even great developers may not have knowledge in other areas, simply because of the vast range of areas in software development. Sometimes this means making architectural changes such as moving from a desktop app to a multi-tier can be a learning experience for even the most experienced. It's always great to learn, or to get outside support to assist. We aim to make architectural transitions easy, such as how RAD Server comes with excellent Multi-Tier architecture support features. It is not a daunting task to rethink an old app into a Multi-Tier one, although there are no guarantees (depends how it was built). I have spoken with many developers that at first were very scared, but once they got deeper, found that the effort is far less than expected. For sure, it is hugely less expensive than re-platforming with a completing different language such as Java. Again, one simple approach is to start small and modularize as much as possible. Also, do not rush to lose the VCL client. The speed it can deliver, especially in sensitive environments where seconds matter, cannot be replicated. I am aware of at least several multi-million dollar Java rebuild efforts that aimed to replace a VCL app and users simply did not adopt it… incredible waste.
     
    “Webify”
    Not a word, but you get the meaning. There are many approaches to do this with Delphi today. Ideally, you can create a tiered app and build an independent Web Client. Of course, we recommend Ext JS, since it is part of the family now, but there are plenty other good client Web technologies. Another approach that may be faster is to use a tool like UniGui, which takes a VCL-like approach and leverages Ext JS to build a Web Client. That does not work for everything but is very fast and productive. You certainly can create a module of your app quickly and demonstrate that Delphi works well and fast with Web. Today many Web interfaces to Delphi apps are built with .NET because of the inherit Windows connection. That of course works, but based on our latest experience and the new JS technologies, the speed and flexibility you can get with JS are great.
     
    Integrate
    RAD Studio has some of the best Integration frameworks and components. One of the most challenging aspects of other technologies is typically integration, and we do it super well and fast. Our recent Product survey indicates that a huge percentage of our customers have adopted FireDAC, which is fantastic. Figure out new ways for your modern app to be more integrated. How about displaying inventory from an ERP or feeding into it? Our Enterprise Connectors are based on the FireDAC framework and work really well. We even use them internally to create an ExtJS portal to our SFDC instance (illustration below). It is a “wow!” development experience.
     

     
    Innovate
    Delphi, through RAD Studio, supports many new capabilities including Push Notifications, Beacons, and the Woll 2 Woll mobile editor (www.woll2woll.com/beam). It is surprising to me how little customers use new Windows 10 features, One of my favorite underutilized technology is Beacons. These are now included for FREE in RAD Studio Enterprise edition. The mobile editor can accelerate the mobile apps developed with this tech dramatically. Given how many internal Delphi apps deal with location data capture, this should be such an easy and nice feature to include. And the best thing about Delphi is that innovating does not need to cost hundreds of thousands of dollars…
     
    InterBase
     

     
    Overcome the Legacy Argument
    This one is not as relevant for our efforts with RAD Studio, but it is a hurdle that each client has to overcome. The perception that Delphi is legacy is still there, despite recent strides to overcome it. Lately, I’ve taken a slightly different approach, which I’ve found very successful. Instead of diving deep into defending Delphi’s many merits, I just state a few facts and brush it aside. It works! Delphi today is one of the larger commercial ecosystems - plenty of open source ones have lost momentum as economics have deteriorated and support dwindled. Not to mention the fact that Delphi is the fastest, easiest to use and most functional development tool (a little subjective, but true).  Our VCL framework for Windows development continues to provide the most native support for MS Windows, and nothing beats it. FMX provides better native cross-platform support than Xamarin and its popularity, especially for Android development is growing rapidly. I think that for any company that wants to manage technology risk, Delphi and VCL are far safer choices than even the trendiest of technologies and frameworks out there. Just ask someone who has gone through the several iterations of Angular or spent a boat-load on a Java migration. The combination of a highly productive language that is reusable and can work with flexible front and back-ends make Delphi a strong technology contender.

    Well, this got a bit longer than intended, but there is one point about Modernization that is perhaps the most difficult to overcome. It again has to do with perception rather than the technology.  Customers continue to make the argument about the lack of availability of trained Delphi resources. Unfortunately, it is still true that there are fewer skilled Delphi developers compared to other popular technologies. Outsourcers are especially negative to these tools, as the productivity tends to go directly against their business model. Why sell you 5 Delphi developers when I can sell you 50 Java ones. But that is also the winning argument, you do not need that many Delphi developers – it is THAT good. And if you need to brush up on your skills or train a new team, we continue to develop Embarcadero Academy with more content and course options. In our experience a senior developer can pick-up Delphi super fast. Lets blow away technology sceptics with amazingly modern-looking apps!
    Просмотр полной статьи
  14. Like
    Brovin Yaroslav получил реакцию от Равиль Зарипов (ZuBy) в Нужен нормальный JSON парсер   
    Если пытаться кормить json парсер кривым json и ожидать, что почему вдруг объект станет неожиданно массивом и не будет исключений, то таких парсеров вам не найти. Проще написать самому: быстро, дешево, без 100500 классов и исключений. И такой, который будет считать, что {} - это массив.
    А вообще, рекомендую начать с http://www.json.org/
    Возможно, после этого придет понимание того, почему нужно то или иное количество классов, ну или хотя бы вы сами разберетесь и поймете, почему так происходит.
  15. Like
    Brovin Yaroslav получил реакцию от kami в Нужен нормальный JSON парсер   
    Если пытаться кормить json парсер кривым json и ожидать, что почему вдруг объект станет неожиданно массивом и не будет исключений, то таких парсеров вам не найти. Проще написать самому: быстро, дешево, без 100500 классов и исключений. И такой, который будет считать, что {} - это массив.
    А вообще, рекомендую начать с http://www.json.org/
    Возможно, после этого придет понимание того, почему нужно то или иное количество классов, ну или хотя бы вы сами разберетесь и поймете, почему так происходит.
  16. Like
    Brovin Yaroslav получил реакцию от МихаилЪ чайковЪ в Нужен нормальный JSON парсер   
    Если пытаться кормить json парсер кривым json и ожидать, что почему вдруг объект станет неожиданно массивом и не будет исключений, то таких парсеров вам не найти. Проще написать самому: быстро, дешево, без 100500 классов и исключений. И такой, который будет считать, что {} - это массив.
    А вообще, рекомендую начать с http://www.json.org/
    Возможно, после этого придет понимание того, почему нужно то или иное количество классов, ну или хотя бы вы сами разберетесь и поймете, почему так происходит.
  17. Thanks
    Brovin Yaroslav получил реакцию от krapotkin в Нужен нормальный JSON парсер   
    Если пытаться кормить json парсер кривым json и ожидать, что почему вдруг объект станет неожиданно массивом и не будет исключений, то таких парсеров вам не найти. Проще написать самому: быстро, дешево, без 100500 классов и исключений. И такой, который будет считать, что {} - это массив.
    А вообще, рекомендую начать с http://www.json.org/
    Возможно, после этого придет понимание того, почему нужно то или иное количество классов, ну или хотя бы вы сами разберетесь и поймете, почему так происходит.
  18. Thanks
    Brovin Yaroslav получил реакцию от DMS в TComboBox под Андроидом   
    Если используется режим DropDownKind = Native, то такой проблемы не должно быть. Выбор итема происходит в диалоговом окне с прокруткой.
  19. Like
    Brovin Yaroslav отреагировална Равиль Зарипов (ZuBy) в Нужен нормальный JSON парсер   
    нуу, давайте так...
    массив - [], объект - {}
    или даже так 

  20. Like
    Brovin Yaroslav отреагировална Равиль Зарипов (ZuBy) в Нужен нормальный JSON парсер   
    правильно сработал, это не массив а объект. смотрите внимательно
  21. Like
    Brovin Yaroslav получил реакцию от PowerOwl в Правила публикации сообщений на этом форуме   
    За постоянное нарушение этих правил пользователь может быть забанен, в том числе по адресу IP.Если тема оформлена не правильно, то она будет закрыта.

    1. Общие правила
    Перед тем как создать тему по вашему вопросу, воспользуйтесь поиском по форуму. Форум рассчитан на консультирования применения FireMonkey, решения прикладных задач с использованием FireMonkey.  Запрещено публиковать найденные ошибки. Для публикации и решения вопросов ошибок FMX существует специальный ресурс Embarcadero Quality Central. Запрещается обсуждение вопросов не связанных с разработкой и FireMonkey Запрещается использовать нецензурные выражения в тексте и заголовке сообщений 2. Создание темы
    Одна тема — один вопрос. Два вопроса в одной теме задавать запрещено. Запрещено создавать несколько тем для одного вопроса. Тема должна быть размещена в наиболее подходящем для нее по смыслу разделе. Если такового не имеется, то размещать тему на свое усмотрение. 2.1 Каким должен быть заголовок темы?
    Вопрос должен быть сформулирован в заголовке темы. Заголовок темы должен содержать не менее 4 слов. Заголовок темы должен формулировать вопрос как можно подробнее. 2.2. Каким должен быть текст вопроса?
    Текст вопроса нужно начать с указания используемой версии RAD Studio, Версии ОС и модель устройства (если речь идет о мобильной разработке) Текст темы должен максимально подробно описывать суть вопроса. Текст темы должен по возможности содержать иллюстрации.  Иллюстрации должны быть не от балды, а иллюстрировать текущее состояние вопроса: то есть, наглядно показывать факт существования описанного поведения. Если ваш вопрос касается конкретного случая разработки, нужно прикрепить проект (только исходные коды в zip архиве) к сообщению. Вставляя код в текст темы, позаботьтесь о том, чтобы он соответствовал стандарту «Руководство по оформлению кода на Pascal» (это можно сделать, при помощи средств автоматического форматирования кода, которые есть в RAD Studio Edit -> Format Source или Ctrl + D), а также не забудьте использовать тег «Код» при оформлении кода в сообщении. 3. Ответы в темы
    Задавать свой вопрос в чужой теме можно только в случае если ваш вопрос совпадает с вопросом в теме. Отвечать можно на любые темы. При ответе старайтесь подробно описывать решение вопроса. Избегайте лишних сообщений не касающихся решения вопроса.
  22. Like
    Brovin Yaroslav получил реакцию от Andrey Efimov в Приведение типа - 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;  
  23. Like
    Brovin Yaroslav получил реакцию от Kitty в Компонент нестандартной формы   
    В одном из продуктов Embarcadero - Beacons. Они используют следующий подход:
    Загружают картинку с планом помещений В специальной программе помечают регионы помещений. По сути это данные на основании которых будет определяться помещение. Программно по указанной координате можно проверить вхождение точки в один из указанных регионов. Алгоритмов, как это сделать в принципе много. Типичный алгоритм:  это обход ближайшего контура с правой стороны. Если при обходе по кривой вы все время находитесь с права от нее и в конечном итоге пришли в исходную точку, то значит вы находитесь в это регионе. Гуглить можно по теме Выпуклые оболочки.
  24. Like
    Brovin Yaroslav получил реакцию от Равиль Зарипов (ZuBy) в Приведение типа - 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;  
  25. Like
    Brovin Yaroslav получил реакцию от dnekrasov в Приведение типа - 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;  
×
×
  • Создать...