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

Brovin Yaroslav

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

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

  • Посещение

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

    390

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

  1. Like
    Brovin Yaroslav отреагировална brunnengi в Как добавить в свой компонент TImage и дать возможность менять картинку?   
    Да, так и есть. Это моя первая практика. В принципе FMX и так позволял делать то что мне нужно не создавая компонентов, а просто накидывая элементы друг в друга, как я это сделал на принтскрине.
    Но просто захотелось поднять свой уровень и все таки освоить технологию создания компонентов.
    Постараюсь заполнить свои пробелы. И спасибо что уделили мне время. Вы очень помогли.
  2. Like
    Brovin Yaroslav получил реакцию от rareMax в Правда ли, что на мобильных платформах Delphi работает с 0-основными строками?   
    Прикол в том, что на мобильных платформах строки 0-основные. А вы работает с 1-основной.
     
    0-основная - индексация строки начинается с 0, а не с 1.
     
    Документация
    Страница: UnicodeString
     
    P.S. На будущее, потрудитесь оформить код согласно стандартам. Читать не возможно. 
  3. Like
    Brovin Yaroslav получил реакцию от brunnengi в Какое назначение у свойства TFmxObject.Stored?   
    Назначение свойства Stored
    Stored - нужно, чтобы указать нужно ли сохранять созданный объект в ресурсы формы или нет. Например, стилевые объекты не должны сериализоваться и сохраняться в ресурсы формы поскольку стиль загружается динамически в рантайме. И если он сериализуется в дизайн тайме, то в рантайме будет двойная загрузка стиля. Первый раз из ресурсов, второй раз уже динамически механизмом стилизации. Что как вы понимаете не верно. Поэтому у таких объектов, создаваемых в рантайме Stored устанавливается в False.
     
    Это свойство никак не влияет на работу обработки событий мыши. Без stored все должно работать корректно. 
     
    В чем ошибка?
    Однако у вас есть ошибка, которая к этому поведению и привела и связана с неиспользованием свойства Stored.
    Первый раз, когда вы бросаете компонент на форму, он создает в дизайн тайме прямоугольник и привязывает его к вашему контролу. Все бы ничего, но когда вы сохраняете форму, ваш прямоугольник сериализуется в ресурсы формы. Затем идет запуск программы. Вначале отрабатывает конструктор вашего компонента и он, естественно, создает прямоугольник в рантайме. Но затем идет чтение еще одного прямоугольника, который читается и располагается поверх созданного контролом прямоугольника. Но в отличии от первого он уже не имеет заданного обработчика. В итоге в рантайме, созданный прямоугольник располагается внизу. А затем он перекрывается аналогичными прямоугольниками, созданными из ресурсов формы. Вот и весь секрет
  4. Like
    Brovin Yaroslav получил реакцию от antarey в У меня не получается собрать приложение с потоками на C++ Builder под Андроид   
    Дело в том, что класс TThread является частью библиотеки RTL и не зависит от VCL никаким способом. Поэтому, это сообщение может появится из-за ошибочного подключения файлов VCL. Так же RTL полностью кроссплатформенна. Поэтому работа с классом TThread одинакова для всех платформ. Резюме
    Нужно проверить все файлы проекта и убедиться, что они не используют файлы VCL.
     
    А именно Unit2.cpp, поскольку речь в сообщение об ошибке идет именно об этом модуле.
     
    Проверил на чистом проекте, описанное вами поведение в RAD Studio XE6 Beta, не обнаружил.
  5. Like
    Brovin Yaroslav отреагировална rareMax в У меня не получается собрать приложение с потоками на C++ Builder под Андроид   
    Лучше вам показать свой код. Но если легче станет - то вот:
    unit uReger; interface { //////////////////////////////////////////////////////////////////////////// } { ..............Компонент.для.регистрации.персонажей.TgReger.................. } { ...........................Версия 2.0....................................... } { ................Автор:.Сысоев.Максим........................................ } { .............................Орловка,.2.0.1.3.г............................. } { ToDo * Не получается запросить код восстановления } { //ver 2.0.2 - 16.01.2014 = Возможность рандомного выбора пола // ver 2.0.1 - 28.12.2013 = Полная(Нужно еще тестировать) работоспособность в Android // ver 2.0 - 25.12.2013 = Рефракторинг кода = Профиксил много ошибок = Наконец-то запустился регер на Anroid = Увеличил живучесть персов } { ver < 2.0 * Основа кода } uses {****************************************} idHTTP, GHash73, uMiniUtils, {****************************************} System.SysUtils, System.Classes; type TgReger = class; { ************************************************************************** } TUser = record Nick, Id, PassWord, Recover, Status: string; end; TProgressType = (ptStart, ptGetInfo, ptSendReg, ptGetKapcha, ptGetRecover); { ************************************************************************** } TOnNeedKapcha = procedure(Sender: TObject; Const Kapha: TStream) of object; TOnError = procedure(Sender: TObject; const ErrorType, Msg: string) of object; TOnGoodReg = procedure(Sender: TObject; const AUser: TUser) of object; TOnProgress = procedure(Sender: TObject; const Range: TProgressType) of object; { ************************************************************************** } gSex = (gsMan, gsGirl, gsRandom); gCharMap = (cmRU, cmEN, cmDigit, cmRuDigit, cmEnDigit); { ************************************************************************** } TRegerThread = class(TThread) private gReger: TgReger; protected procedure Execute; override; public constructor Create(AgReger: TgReger); end; { ************************************************************************** } TgReger = class(TComponent) private fOnError: TOnError; fOnKapcha: TOnNeedKapcha; fOnGoodReg: TOnGoodReg; fOnProgress: TOnProgress; { Private declarations } fHTTP: TIdHTTP;
  6. Like
    Brovin Yaroslav отреагировална Alexey в Какие разрешение нужно включить для TIdTCPClient?   
    Причина
    При  финальной сборке приложения для Application store в файле AndroidManifest.xml отсутствует разрешение для интернета (не смотря на то, что в разделе Uses Permissions разрешение для интернета стоит true), а при сборке Debug в файле AndroidManifest.xml это разрешение присутствует.
     
    Решение
    Проблема решилась следующим способом:  в разделе Uses Permissions разрешение для интернета ставим false, затем в файл AndroidManifest.template.xml.  вставляем строку:
    <uses-permission android:name="android.permission.INTERNET" />
  7. Like
    Brovin Yaroslav получил реакцию от Andrey Efimov в Как установить свойство WordWrap в ListBoxItem, когда итемы грузятся из базы через Live Binding?   
    Отредактировать стиль можно следующим способом:
    Читаем тему Где взять стандартный стиль в FireMonkey для iOS и Android, используемый по умолчанию? и получаем файл стиля. Открываем полученный файл стиля. Находим строку: "StyleName = 'listboxitemstyle'" Внутри него находим блок со стилев объектом "StyleName = 'text'". И меняем значение свойства WordWrap с False на True. А далее:
    Либо грузим стиль бук на форме, либо читаем тему: Как использовать один экземпляр TStyleBook для нескольких форм? и создаем один стиль для всех форм. Либо делаем подмену системного стиля согласно моей статье тут P.S. Решение с событием посмотрю позже. Пока предлагаю решение через стиль.
  8. Like
    Brovin Yaroslav получил реакцию от Andrey Efimov в Как создать заставку для андроид приложения?   
    Читаем пост Андрея Ефимова (Infocean): Добавляем Splash Screen в приложение для Android
     
    Видео, демонстрирующее результат:

  9. Thanks
    Brovin Yaroslav получил реакцию от Олег Киреев в Как открыть PDF в стандартном приложении просмотра PDF файлов?   
    Открытие любого файла в подходящем приложении в операционной системе Андроид выполняются одинаковым способом.
    Путем посылки намерения (Интент) с указанием файла и типа данных. Далее система ищет по указанному типу файла, какие приложения зарегистрированы на обработку файлов этого типа, Если приложение, которое может обработать этот файл, одно, то запускает активити приложения и передает туда ваш файл/данные. Если приложений несколько - запускает диалоговое окно выбора приложения, которое будет выполнять обработку вашего файла. Резюмируя это, смотрим на код:
    uses System.IOUtils, FMX.Helpers.Android, Androidapi.JNI.Net, Androidapi.JNI.GraphicsContentViewText; procedure TForm7.btnOpenPDFClick(Sender: TObject); const SAMPLE_PDF_FILENAME = 'example.pdf'; var Uri: Jnet_Uri; OpenLinkIntent: JIntent; PDFFileName: string; begin PDFFileName := TPath.Combine(TPath.GetDocumentsPath, SAMPLE_PDF_FILENAME); { Внутренний доступ} Uri := StrToJURI(PDFFileName); // Формируем намерение об открытии файла в стандартном приложении OpenLinkIntent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, Uri); // Устанавливаем тип данных OpenLinkIntent.setType(StringToJString('application/pdf')); OpenLinkIntent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_CLEAR_TOP); // Запускаем приложение и передаем ему наше намерение try SharedActivity.startActivity(OpenLinkIntent); except on E: Exception do ShowMessage('Не удалось открыть PDF. В системе нет доступных приложения для просмотра pdf'); end; end; В этом код pdf файл берется из самого пакета приложения (я включил pdf файл в пакет приложения).
    Если вам нужно вытащить файл в любом другом месте, просто укажите в PDFFileName полный путь к файлу в файловой системе вашего устройства.
     
    Проект доступен тут: OpenPDF.zip
  10. Like
    Brovin Yaroslav получил реакцию от Pax Beach в Почему у меня при создании TListBoxItem в рантайме и включенной опции переноса слов WordWrap, слова не переносятся, а в дизайн тайме - переносятся?   
    Чтобы в рантайме (runtime) работал перенос, нужно просто сбросить настройку:
    ListBoxItem.StyledSettings := ListBoxItem.StyledSettings - [TStyledSetting.ssOther]; В дизайн тайме, при установке свойства WordWrap y TListBoxItem, автоматически сбрасывается опция TStyledSettings.ssOther у StyledSettings, которая означает, что настройки переноса нужно брать из контрола, а не из стиля. В рантайме - нет.    Свойство TListBoxItem.StyledSettings отвечает за то, какие настройки брать из стиля, а какие из самого контрола. Так отсутствие значения ssOther говорит о том, что значение варианта переноса будет браться из контрола, а не из стиля.    Обратите внимание еще на тему: Почему не изменяется Font.Style и Font.Size?
  11. Like
    Brovin Yaroslav получил реакцию от Pax Beach в Почему не изменяется Font.Style и Font.Size?   
    Label1.StyledSettings := Label1.StyledSettings - [TStyledSetting.Size]; В FireMonkey все, что отвечает за визуальную часть (отображение контрола) обычно выносится в стиль. Однако, не всегда удобно создавать новый стиль, только, когда нужно, например, поменять размер шрифта в TLabel. Поэтому, чтобы позволить пользователям удобно менять такие настройки, как шрифт. Шрифт выделен в отдельное свойство TLabel.Font. При выделении шрифта отдельным свойством, нужно понимать, что при таком подходе контрол "не знает", откуда ему брать шрифт: то ли из свойства, то ли из стиля.
     
    Поэтому, чтобы контрол знал, откуда ему брать шрифт для отображения: из стиля или из свойства Font, введено свойство TLabel.StyledSetting. Которое говорит контролу, какие характеристики шрифта нужно брать из стиля, а какие можно взять из свойства TLabel.Font. По умолчанию, StyledSettings настроены так, что все берется из стиля. В вашем случае, нужно сбросить галку напротив значения ssSize и ssFont.
     
    Подробная информация есть на Embarcadero Doc Wiki: http://docwiki.embarcadero.com/RADStudio/XE5/en/Setting_Text_Parameters_in_FireMonkey
  12. Like
    Brovin Yaroslav получил реакцию от rareMax в Как установить свойство WordWrap в ListBoxItem, когда итемы грузятся из базы через Live Binding?   
    В случае с LiveBinding, можно просто в стиле итема указать, что текст внутри стилевого "text:TActiveStyleTextObject" объекта должен переносится (WordWrap = True).
     
    Для этого:
    1. Создаем новый стиль на базе стиля по умолчанию или правил стиль по умолчанию:

    2. Находим в структуре элемент стиля Текст и выбираем его. 

    3. Меняем у него свойство WordWrap
  13. Like
    Brovin Yaroslav отреагировална Alexey в Какой Provision Profile нужно использовать для публикации приложения в App Store?   
    Проблема с подписями. Выложи скиншот вкладки "Version Info"  (Project>Options>Version Info)
  14. Like
    Brovin Yaroslav отреагировална Alexey в Какой Provision Profile нужно использовать для публикации приложения в App Store?   
    В "Version Info" нужно заполнить CFBundleIdentifier и CFBundleSignature

  15. Like
    Brovin Yaroslav получил реакцию от Alexey в Как создать заставку для андроид приложения?   
    Читаем пост Андрея Ефимова (Infocean): Добавляем Splash Screen в приложение для Android
     
    Видео, демонстрирующее результат:

  16. Like
    Brovin Yaroslav отреагировална Alexey в Какой Provision Profile нужно использовать для публикации приложения в App Store?   
    Проблема в следующем: Файл .ipa подписан не тем сертификатом. В разделе provision у тебя указан сертификат для разработки, а нужно указать сертификат для публикации. 
     

  17. Like
    Brovin Yaroslav отреагировална Alexey в Какие данные необходимо указать для загрузки приложения в App Store?   
    В первое поле вводится полное название сертификата

  18. Like
    Brovin Yaroslav отреагировална gonzales в Доступны ли операции Drag and Drop на мобильных платформах?   
    спасибо за оперативность и разъяснение. придется ждать апдейтов, потому как реализовать сервис для меня - это как до китая на велосипеде
  19. Like
    Brovin Yaroslav получил реакцию от Andrey Efimov в RSS reader   
    Для осуществления вызова какого-то кода по расписанию, даже, если приложение выгружено из памяти в Андроиде есть специальный механизм. Он называется AlarmManager. Суть его проста. Вы задаете в какое время или как часто нужно послать отложенное намерение (PendingIntent) получателю. Система приняв ваш запрос, складывает его в системную очередь. Когда наступает время отправки вашего намерения с данными, система:
    Если приложения нет в памяти, запускает его и передает ему интент. Если приложение в памяти, передает ему интент. Этот менеджер работает совместно с механизмом широковещательной рассылки BroadcastReceiver. Так же он не требует создания отдельного сервиса. И на мой взгляд является хорошей альтернативой.
     
    P.S. Этот механизм успешно работает и в FireMonkey для реализации отложенных уведомлений. Которых как известно в андроиде нету.
  20. Like
    Brovin Yaroslav получил реакцию от Alex7wrt в Как поделиться текстом и изображением в Твиттере и Фейсбуке?   
    Исходный код примера для RAD Studio XE5: ShareSheet
    Описание: Taking and Sharing a Picture (iOS and Android)
     
    В FireMonkey реализованы стандартные действия для выполнения автоматической отправки данных другим приложениям телефона.
    Например, такие как:
    Отправка поста в Twitter или FaceBook Отправка письма Отправка SMS и другие Чтобы воспользоваться этой функцией в FireMonkey создано специальное стандартное действие TShowShareSheetAction, которое открывает стандартное системное окно выбора действия (постинг в Twitter или Facebook и тд). 
     
    1. Кидаем на форму TActionList.
    2. Двойным кликом на компонент TActionList, открываем дизайнер действий.
    3. В левом верхнем углу выбираем создание стандартного действия

    4. Среди стандартных действий выбираем в группе "Media Library" действие TShowShareSheetAction.

    5. Для созданного действия указываем текст сообщения или изображение (можно указывать как по отдельности эти данные, так и по частям). В зависимости от указанных данных (текст и изображение) действие откроет системное окно выбора действий приложений, которые могут обработать ваши данные. На картинке ниже, я указал текст сообщения и картинку через свойства TextMessage и Bitmap:

    6. Подвязываем созданное действие к любой кнопке.

    7. На ios и андроид нажатие на кнопку с действием приведет к отображению окна выбора действия:

     
    Подробный о том, как пользоваться этой функцией продемонстрирован в этом видео:

  21. Like
    Brovin Yaroslav получил реакцию от rareMax в Как сделать эффект обновления TListBox, как в UIListView под iOS?   
    Продукт менеджер Сарина Дю Понт опубликовала в своем блоге реализацию такого эффекта: http://blogs.embarcadero.com/sarinadupont/2014/02/10/pull-to-refresh-on-ios/
  22. Like
    Brovin Yaroslav получил реакцию от rareMax в Как использовать нестандартный шрифт?   
    Решение опубликовано здесь для Android.
  23. Like
    Brovin Yaroslav отреагировална Andrey Efimov в Как программно реализовать подгонку картинки в TImage в RunTime, так же как это делает MultiResBitmap Editor?   
    Баг замечен на Android.   Предположим у нас есть приложение, в котором по нажатию на кнопку подгружается картинка в «TImage» (Width: 310; Height: 150). Картинки могут быть как меньшего размера (например, Width: 215; Height: 150), так и большего (Width: 440; Height: 150). Высота указана одинаковой для примера, чтобы было проще понять, как выглядит баг. Я сделал три картинки и поместил их в ресурсы приложения. Для обозначения границ «TImage», поместил «TImage» в «TRectangle».   Подгружаю из ресурсов: var   InStream: TResourceStream;   i: integer; procedure TForm1.Button1Click(Sender: TObject); begin   if i=3 then i := 1   else i := i+1;   // Load image   InStream := TResourceStream.Create(HInstance, 'Test_' + IntToStr(i), RT_RCDATA);   try     Image1.Bitmap.LoadFromStream(InStream);   finally     InStream.Free;   end; end; Если мы ни чего не добавляли вручную в «MultiResBitmap», то все подгружаемые в «TImage» картинки не подстраиваются под размеры «TImage», т.е. остаются в оригинальных размерах.     А теперь мы добавим любую картинку в «MultiResBitmap» с настройкам по умолчанию: Например, картинку Width: 380; Height: 120.   И в таком виде компилируем приложение, вот что мы получим:     Как видите, теперь все картинки растягиваются по бОльшему размеру одной из сторон самой картинки, т.е. подгоняются автоматически под размеры TImage(Width: 310; Height: 150) сохраняя при этом пропорции сторон.     Вопрос: Как исправить ситуацию своими силами, т.е. сделать как при добавлении любой картинки в «MultiResBitmap», но без ручного добавления картинки? Чтобы все подгружаемые картинки сохраняли пропорции и при этом растягивались также по размерам «TImage».   p.s. По поводу прозрачности тема на форуме тоже есть.   Тестовое приложение прикладываю.TImageBitmap.zip
  24. Like
    Brovin Yaroslav получил реакцию от rareMax в Как увеличить быстродействие эмулятора андроид?   
    Попробуйте воспользоваться рекомендациями из этой статьи: Как ускорить эмулятор Android на 400% (Habrahabr)
  25. Like
    Brovin Yaroslav отреагировална Andrey Efimov в Как задать название приложению?   
    «$(ModuleName)» - это название приложения, которое можно поменять в Project Manager’е.   Android: За имя ярлыка приложения отвечает строчка «Label», удалите из неё «$(ModuleName)» и впишите своё название.   iOS: У меня нет девайсов от компании Apple, поэтому следующая информация на уровне догадок. Я предполагаю, что за отображаемое имя приложения отвечает строчка «CFBundleDisplayName», попробуйте изменить её. Если не поможет, то проверьте остальные строчки, где упоминается «$(ModuleName)».
×
×
  • Создать...