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

AngryOwl

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

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

  • Посещение

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

    45

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

  1. Like
    AngryOwl получил реакцию от Satellite в Распараллеливание процессов   
    Всем доброго дня!
    Конечно речь стоит о многопоточности (как весьма правильно описал estra). И тут много факторов.
    Если Вы используете для работы с сетью Indy - это одно, если какие-то другие библиотеки - то возможно там уже есть решение многопоточности.
    Но для того, чтобы не тормозило GUI (интерфейс программы) - однозначно нужно многопоточность, не забывая при этом о синхронизации (если требуется отображать процессы работы с сетью, пока идет загрузка Ваших "статей"/"новостей" или что-либо другое).
     
    С Satуllite я частично не соглашусь. И вот по какой причине. Рискуя остаться в меньшинстве и быть не понятым, скажу следующее.
    Delphi - "сыровата", но это единственный инструмент для простой и удобной разработки, который имеет ряд неоспоримых преимуществ разработки кроссплатформенных приложений.
    Его "сырость" заключается в недоработках и ошибках библиотек самой FMX. Однако, имея опыт работы с Firemonkey со дня их появления, и будучи не имеющим отношения к Embarcadero и FMX, могу сказать что они движутся в верном направлении. И по сравнению с другими у них есть большая фора.
    Я уже неоднократно писал о том, что меня самого часто возмущают их ошибки и лаги, переходящие в новые версии. О том, что не совсем нравится их политика. Но это единственный, на сегодняшний день, продукт, который позволяет так просто (местами относительно конечно))) разрабатывать приложения.
    И не стоит спорить на тему "самого удобного и простого" IDE и мощнейшего языка программирования. Будь иначе - Вас бы тут не было...
     
    P.S. А FMX будет развиваться (я надеюсь не только самой Embarcadero))) всем сообществом. Будут появляться решения, библиотеки и т.д.
    Все новое всегда кажется абсурдом и ненужным. По прошествии времени начинаешь сожалеть, что не занялся этим раньше...
  2. Like
    AngryOwl получил реакцию от Dozent в Xe6 глюки TLang   
    Не хочется "никого" обижать)), но TLang - самый глючный компонент из всех с чем мне приходилось иметь дело. Тут, на счет "эмоций", я с Вами полностью согласен.
    Поэтому - рекомендую либо самому писать, либо искать адекватное стороннее решение.
    На публикацию своего решения у меня пока, к сожалению, нет времени. Как только появится время для того чтобы его оформить в виде компонента и библиотеки - обязательно сделаю и выложу в свободный доступ.
     
    P.S. Свое решение основано на простых текстовых INI-файлах. Работает везде, в т.ч. и на мобильниках, и очень быстро. Над удобством стоит конечно поработать, но в текущий момент меня собственное решение более чем устраивает.
  3. Like
    AngryOwl отреагировална brunnengi в Как лучше организовать мультиязычность в базе данных?   
    Вопрос из раздела Консультации, хотя лично мне не особо то и важно.
    Твой вопрос сродни философскому и однозначно ответить нельзя, особенно если звучит он как "что лучше", ибо доподлинно известно что борьба "хорошего с лучшим" это лишь дело личностных предпочтений.
     
    По существу - на размер и скорость итоговой базы вряд ли повлияет выбранный из двух методик что либо. И если с размером базы и скоростью  мы разобрались, то остается решить вопрос, а что удобнее? Удобней в таблицах. Но при условии что поля в разноязычных таблицах одинаковы.
    В этом случае тебе придется лишь указывать таблицы согласно выбранному языку, что можно в принципе повесить на отдельную функцию и спокойно разрабатывать себе приложение. 
    Ибо если ты будет хранить в столбцах то и обращаться придется каждый раз по разному выискивая то или иное слово, т.е. муторно это, а смысла нет.
     
    Так что организовывай на уровне таблиц.
  4. Like
    AngryOwl отреагировална Brovin Yaroslav в Нативные элементы управления   
    На счет планов вам не могу ничего рассказать.
     
    На счет того, что значит "нативный" элемент управления. Практически все контролы FireMonkey - это самодельные контролы, которые сделаны с нуля. За исключением пары: TWebBrowser, TMediaPlayerControl и TBannerAd. "Нативные" - это значит использование родного элемента управления, предоставляемого операционной системой. Каждая ОС имеет свой набор элементов управления, которые можно использовать в своих программах. Поэтому, в XE6 появился механизм поддержки нескольких реализаций контрола в рамках одной системы. Или другими словами появился некий аналог MVP (Model, View, Presenter), который позволяет в режиме выполнения менять на лету способы отображения контрола и его работу.
     
    XE7 имеет несколько контролов, которые поддерживают такой механизм: TEdit, TCalendar, TEditBox, TSpinBox, TNumberBox, TCalendarEdit, TClearingEdit, TComboEdit и TComboTrackBar. Это значит, что для этих контролов пользователь может использовать новый подход для создания своих независимых представлений. Из этих контролов, пока только 2 имеют нативное представление (то есть используют контролы ОС) - это TCalendar и TEdit.
     
    Выбор представления осуществляет через свойство ControlType. Platform - означает, что будет пытаться взяться нативное представление, Styled - самостоятельная реализация FM с использованием стилей. Если текущая платформа не имеет нативного представления, то контрол автоматически будет использовать Styled представление.
     
    Нативное представление обычно не может покрыть всю функциональность FMX. Так как у нас она расширенная. Но список ограничений для нативных представлений есть на сайте DocWiki.
  5. Like
    AngryOwl получил реакцию от Brovin Yaroslav в Как воспроизвести avi файл?   
    Добрый день!
    Во-первых - стоит посмотреть примеры (папка ..Embarcadero\Studio\15.0\Samples\Object Pascal\FireMonkey Desktop\MediaPlayerHD).
    Во-вторых - указывайте поточнее: среда (XE6? XE7?), и, конечно, формат файла. AVI, в наше время, весьма абстрактное понятие. Опишите контейнер видео (формат видео). Переименнованное в *.avi это может быть и mp4, и mkv  и что угодно. Нужно понимать более точно - что это за файл?
    Если у Вас вообще все видео-файлы не открываются... Ну, вполне возможно, что у Вас просто кодеков нет.
    И еще проще - взглянуть на сам проект, если он не приватный. Либо попробуйте запустить пример MediaPlayerHD и посмотреть - он открывает файлы или нет.
  6. Like
    AngryOwl отреагировална Brovin Yaroslav в Как добиться эффекта отражения?   
    Если речь идет о работе с камерой, то использование TBitmapSurface будет быстрее. И он уже имеет специальные методы трансформации изображения, в том числе отражения относительно вертикальной оси:
    TBitmapSurface.Mirror TBitmapSurface.Flip TBitmapSurface.Rotate90
  7. Like
    AngryOwl отреагировална estra в Распараллеливание процессов   
    Распараллеливание - это распределение вычислений между несколькими процессорами (или несколькими ядрами одного процессора). Есть подозрение, что вы неверно выбрали термин. Про распараллеливание можете почитать тут (Новый модуль System.Threading) или посмотреть тут. Вы же (исходя из сути вопроса) скорее всего имеете ввиду многопоточность. Если так, почитайте в интернете про класс TThread, статей и примеров великое множество.
  8. Like
    AngryOwl получил реакцию от Brovin Yaroslav в [Windows] Как сделать PrintScreen другого приложения?   
    Ну как простой вариант - посмотрите http://stackoverflow.com/questions/10303256/how-to-take-a-screenshot-with-firemonkey-multi-platforms
     
    Там, конечно, староватое решение (для более ранней версии XE), но в принципе - должно все работать.
    Вам только нужно получать не хэндлы рабочего стола, а нужных Вам приложений.
     
    Может кто-то подскажет более правильное решение.
  9. Like
    AngryOwl отреагировална Brovin Yaroslav в Утилита генерации pas файлов для AndroidAPI из jar файлов   
    В RAD Studio XE7 добавлена утилита командной строки для генерации "pas" файлов интерфейсов моста "Delphi - AndroidAPI" по "jar" файлам. Теперь, для своих или сторонних файлов, написанных на java, вы можете используя эту утилиту "Java2OP.exe", получить делфи код для использования ваших java классов на стороне Delphi.
    Описание утилиты: DocWiki Ссылка на скачивание: Java2OP.exe
  10. Like
    AngryOwl отреагировална Andrey Efimov в [Android] [XE7] Пойдут ли приложения на Samsung Note 8.0?   
    Не обязательно запускать специальные приложения.
    Достаточно выяснить, какой процессор установлен в устройстве. После того как узнали это, выясняем ядро (Cortex-A5, Cortex-A7, Cortex-A9, Cortex-A15, Cortex-A17), а далее выясняем какой набор инструкций использует ваше ядро.
    В вашем случае:
    Процессор: Samsung Exynos 4412 1.6GHz (Ищем тут Вики)
    Ядро: Cortex-A9 (Читаем подробности Вики)
    Использует набор инструкций: ARM v7
    Поддерживает: NEON
     
    Итог: приложения должны запускаться без проблем.
     
    p.s. Ещё можно смотреть эту инфу на офф сайте(на английском языке): http://www.arm.com/products/processors/cortex-a/index.php
  11. Like
    AngryOwl отреагировална Brovin Yaroslav в [Windows] Как получить HWND Application?   
    Для RAD Studio XE7
    Начиная с RAD Studio XE7 Доступ к хендлу приложения можно получить так FMX.Platform.Win.ApplicationHWND
     
    Для версий < XE7
    Для всех, у кого среда <= XE6 делаем следующее:
    Открываем исходный файл FMX.Platform.Win.pas (Предполагаемое место расположения файла "/Program Files(x86)/Embarcadero/Studio/14.0/Source/fmx/") В секцию interface модуля объявляем функцию:
    function ApplicationHWND: HWND; В секцию implementation модуля добавляем ее реализацию (лучше в конец модуля либо после объявления глобальной переменной PlatformWin):
    function ApplicationHWND: HWND; begin   if PlatformWin <> nil then     Result := PlatformWin.GetApplicationHWND   else     Result := 0; end; Добавляем модифицированный файл FMX.Platform.Win.pas в ваш проект. P.S. Исходники коммерческих продуктов выкладывать запрещено. Поэтому выше приведено руководство.
  12. Like
    AngryOwl отреагировална Brovin Yaroslav в [XE7] [FGX] Описание версии 0.5.0.41   
    Ссылка на скачивание (Только для RAD Studio XE7): fgx_0.5.0.41.zip
    Инструкция по установке: "Инструкция по установке набора компонентов FGX"
    Описание
    Эта версия включает в себя следующий набор компонентов:
    TfgProgressDialog - Компонент для отображения диалогового окна в момент выполнения длительной фоновой операции, когда время выполнения фоновой операции можно оценить. TfgActivityDialog - компонент для отображения диалогового окна в момент выполнения длительной фоновой операции, когда время выполнения операции не возможно адекватно оценить. TfgActionSheet - Аналог контекстного меню для мобильных платформ. TfgColorsPanel - Палитра цветов с возможностью выбора цвета. TfgGradientEdit - Компонент выбора градиента. TfgLinkedLabel - Метка поддерживающая открытие Web ссылки в браузере по умолчанию. TfgApplicationEvents (NEW)- компонент с возможностью легко задать обработчики на основные события приложения: Отслеживание смены состояния приложения, простой, обновление и выполнение действий Actions, Изменение ориентации устройства и тд. TfgVirtualKeyboard - компонент облегчающий работу с виртуальной клавиатурой. Позволяет задать пользовательские кнопки над виртуальной клавиатурой под iOS, а так же отлавливать события по отображению и скрытию клавиатуры. Зарегистрированы все стилевые объекты на вкладке "FGX: Style objects" Улучшения
    TfgApplicationEvents: Добавлен новый компонент для отслеживания об основных событиях приложения Добавлен пример использования этого компонента TfgActivityDialog, TfgProgressDialog: ​Добавлены события открытия и закрытия диалогов OnShow, OnHide Исправлены утечки памяти на iOS и Android Исправлена ошибка с некорректным отображением на iOS при повороте устройства Общие улучшения на уровне кода Исправлена ошибка с возможностью закрыть диалог кнопкой Back на Андроиде. TfgActionSheet Исправлено не возможность выполнения стандартных действий в TAсtionList TfgLinkedLabel Исправлена ошибка регистрации сервиса, приводящая к фатальным ошибкам в IDE Добавлен пример LinkedLabelDemo TfgColorsPanel Добавлена возможность выбора цвета пользователем. Событие OnColorSelected Общие улучшения Добавлены дополнительные хелперы для iOS и Android Добавлен модуль ассертов для проверки корректности работы компонентов Для Screen добавлен хелпер получения ориентации экрана Значительное улучшение читабельности кода и удобства в использовании.
  13. Like
    AngryOwl отреагировална Brovin Yaroslav в Инструкция по установке набора компонентов FGX   
    Скачать пакет можно здесь: Скачать
    1. Удалить старый пакет библиотеки FGX
    Открываем среду IDE RAD Studio XE7 с административными правами. В меню открываем менеджер пакетов: "Component -> Install Packages..."

    Среди списка компонентов находим "FMX Extension Components". Выделяем и нажимаем кнопку "Remove"

    2. Установка пакета библиотеки FGX
    Открываем в среде группу проектов. "File -> Open Project -> FGXGroup.groupproj"

    Собираем пакет fgx210 для всех требуемых платформ. Выделяем в менеджере проектов нужную платформу "Target Platforms" и в контекстном меню пакета fgx210 выбираем "Build"

    Далее повторяем сборку для всех целевых платформ.
    3. Устанавливаем Design-Time пакет
    Выбираем в группе проектов dclfgx210 пакет и в контекстном меню выбираем "Install"
    Если пакет успешно установлен, то появится сообщение со списком зарегистрированных компонентов следующего вида:

    Все! Установка окончена.
  14. Like
    AngryOwl получил реакцию от sviat9440 в Можно ли задать минимальные размеры для формы?   
    Я думаю со мной согласится абсолютное большинство, что ограничение размеров формы - это проблема!
    Причем проблема с "большой буквы".
    Как это сделать в VCL - все в курсе.
    Предвидя ответ, что это можно сделать самому "ручками", спрошу - почему все должны лезть в исходники Firemonkey и править "родные" модули, дабы достичь нужного результата?
    Вроде это самые элементарные свойства (предопределение минимальных/максимальных размеров формы).
    Поэтому очень хотелось бы вынести это "обсуждение"/проблему на рассмотрение Embarcadero. И, конечно, хотелось бы чтобы они эту проблему решили и решили в срочном порядке.
     
    Согласитесь (думаю и наши уважаемые гуру согласятся), что этот вопрос относится к элементарным и основным проблемам.
    Представьте себе любого начинающего FMX-прогера, который в первом же своем FMX-проекте столкнется с данной проблемой...
     
    P.S. Как крайний вариант - рассматриваю коллективное обсуждение и решение этой задачи с публикацией кода.
  15. Like
    AngryOwl отреагировална dnekrasov в Несколько окон приложения в панели задач   
    Приложение убрано из панели задач
    Свойства формы:
    BorderStyle = None
    Transparency = True
     
    Немного поэкспериментировав нашел лучший способ: ... TMyForm = class(TForm) ... protected procedure CreateHandle; override; ... end; ... procedure TMyForm.CreateHandle; begin inherited CreateHandle; SetWindowLong(WindowHandleToPlatform(Handle).Wnd, GWL_EXSTYLE, GetWindowLong(WindowHandleToPlatform(Handle).Wnd, GWL_EXSTYLE) or WS_EX_APPWINDOW); end; ... end. Этот код вставлять нужно в каждой форме, которую Вы хотите отобразить на панели задач
  16. Like
    AngryOwl отреагировална dnekrasov в Несколько окон приложения в панели задач   
    Этот код работает,только его надо переместить из обработчика события OnCreate в обработчик OnShow
    Не знаю в чем проблема, но FHandle в этих событиях принимает разные значения и, как я понял, правильный именно в FormShow.
     
    Как это работает можно посмотреть в приложении Clip2net (написано на Delphi XE6)

  17. Like
    AngryOwl отреагировална Kitty в Сервис платных ответов   
    А мне, конкретно, в полном объеме, качественно, четко помог пользователь Nix0N. Он решил все мои проблемы и без всяких денег. Есть у человека добрая воля и знания - наверное для этого и форум.
  18. Like
    AngryOwl отреагировална Brovin Yaroslav в Описание TfgColorsPanel   
    Описание
    Назначение: Компонент предназначен отображения палитры цветов и осуществлении выбора цвета пользователем. Широкий набор настроек позволяет детально настроить внешний вид палитры. Цвета отображаются в виде сетки, где каждая ячейка сетки отвечает одному из цветов палитры. Поддерживаемые платформы: Windows, OSX, iOS, Android Демо проект: Samples\ColorPanelDemo\ColorPanelDemo.dproj Возможности
    Настройка размеров ячеек цветов - TfgColorsPanel.CellSize Настройка закругления внешних углов сетки - TfgColorsPanel.BorderRadius Настройка цвета границ сетки - TfgColorsPanel.Stroke Два предустановленных набора цветов: X11, WebSafe - TfgColorsPanel.PresetKind Возможность указания своего набора цветов - TfgColorsPanel.ColorsPreset Определение факта выбора цвета пользователем - TfgColorsPanel.OnColorSelected Возможность выполнить свою отрисовку ячейки цвета. Например, для отображения типа градиента или вывода изображения и тд - TfgColorsPanel.OnPaintCell Возможность менять цвет ячейки текущего набора цветов - TfgColorsPanel.OnGetColor
     
  19. Like
    AngryOwl отреагировална Brovin Yaroslav в [Руководство] Using New Delphi Coding Styles and Architectures   
    Название: Using New Delphi Coding Styles and Architectures. A Review of the Language Features in Delphi 2009
    Автор: Marco Cantù
    Язык: Английский
    Скачать: using-new-delphi-coding-styles-and-architectures-marco-cantu.pdf
     
    Руководство описывает использование относительно новых конструкций языка Delphi (Object Pascal): дженерики, анонимные методы, директива deprecated, выход из процедуры со значением Exit, Новые типы данных и их алиасы.
  20. Like
    AngryOwl отреагировална Brovin Yaroslav в Описание TfgProgressDialog   
    Описание
    Назначение: Компонент предназначен для визуального отображения хода выполнения длительной операции. При этом пользовательский интерфейс блокируется диалоговым окном до окончания выполнения задачи. В отличии от TfgActivityDialog этот компонент используется в том случае, когда мы можем каким-либо способом оценить длительность выполнения операции. Поддерживаемые платформы: iOS, Android Демо проект: Samples\ProgressDialogDemo\ProgressDialogDemo.dproj Скриншоты
    Работа под iOS:
    Работа под Андроид (Выше, чем GingerBread 2.3):
    Работа под Андроид (GingerBread 2.3):

     
  21. Like
    AngryOwl отреагировална Brovin Yaroslav в Описание TfgActivityDialog   
    Описание
    Назначение: Компонент предназначен для визуального отображения хода выполнения длительной операции. При этом пользовательский интерфейс блокируется диалоговым окном до окончания выполнения задачи. Используется, когда время выполнения задачи нельзя оценить никаким адекватным способом (Ожидание ответа от сервера при авторизации и тд.) Если время выполнения известно, то рекомендуется использовать TfgProgressDialog Поддерживаемые платформы: iOS, Android Демо проект: Samples\ProgressDialogDemo\ProgressDialogDemo.dproj Скриншоты
    Работа под iOS:
    Работа под Андроид (Выше, чем GingerBread 2.3): Работа под Андроид (GingerBread 2.3):
  22. Like
    AngryOwl отреагировална estra в [Android] [XE7] Как получить журнал вызовов?   
    Это подойдет - Работаем со списком вызовов?
  23. Like
    AngryOwl отреагировална estra в [Android] [XE7] Как получить список контактов?   
    Это подойдет - Работаем со списком контактов, #1, Работаем со списком контактов, #2?
  24. Like
    AngryOwl отреагировална estra в [Android] [XE7] Как получить входящие/исходящие сообщения?   
    Это подойдет - Получаем список SMS-сообщений?
  25. Like
    AngryOwl отреагировална ophion в [Android] Использование ACloseDialogProc в MessageDlg   
    Коротко объясню....
    ACloseDialogProc - это процедура-обработчик результатов, полученных при помощи MessageDlg, поскольку в этой версии RAD XE7 все диалоги являются не блокирующими, т.е. во время показа диалога, продолжается выполнение следующих строк кода.
     
    Вам необходимо объявить новую процедуру, которая будет вызываться после нажатия любых кнопок в MessageDlg.
     
    Т.е. будет что-то вроде
    procedure TForm1.doSomethingWithDialogResult(const AResult: TModalResult); begin   if AResult=mrYes then begin     {тут обработка нажатия кнопки Yes}   end; end; а вызвать диалог необходимо следующим образом
    MessageDlg('Тут текст сообщения', TMsgDlgType.mtConfirmation, mbYesNo, 0, doSomethingWithDialogResult);
×
×
  • Создать...