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

Владимир

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

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

  • Посещение

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

    1

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

  1. Like
    Владимир получил реакцию от Alialioglu2016 в Как программно уменьшить масштаб страницы в Webbrowser - Android?   
    Здравствуйте, подскажите пожалуйста. Как программно уменьшить масштаб страницы в Webbrowser?
     
    Когда загружаю страничку - масштаб большой.
  2. Like
    Владимир получил реакцию от Anatoliy в Возникает ошибка при открытии приложения после получения локального уведомления   
    Здравствуйте! Спасибо большое, что откликнулись на мою проблему. Обновил Delphi XE10. 2. Всё работает! Рекомендую обновиться, столько всего исправили. 
  3. Like
    Владимир отреагировална Brovin Yaroslav в [RX] [FGX] Описание версии 0.7.1.74   
    Ссылка на скачивание (Только для RAD Studio RX): fgx_0.7.1.74.zip Инструкция по установке: "Инструкция по установке набора компонентов FGX" FGX - Donate - QIWI: 4890 4941 7671 0929 Описание
    Эта версия включает в себя следующий набор компонентов:
    Дизайнер итемов - дизайнер итемов. TfgToast (UPDATED) - класс отображения быстрых сообщений TfgFlipView - слайдер изображений. Поддерживает несколько способов переключения фотографий при помощи эффектов и сдвигов. При первом использовании ОБЯЗАТЕЛЬНО прочитать инструкцию "TfgFlipView - Инструкция загрузки стиля" TfgPositionAnimation - анимация свойств типа TPosition TfgPosition3DAnimation - анимация свойств типа TPosition3D  TfgBitmapLinkAnimation - анимация свойств типа TBitmapLink  TfgProgressDialog - Компонент для отображения диалогового окна в момент выполнения длительной фоновой операции, когда время выполнения фоновой операции можно оценить. TfgActivityDialog - компонент для отображения диалогового окна в момент выполнения длительной фоновой операции, когда время выполнения операции не возможно адекватно оценить. TfgActionSheet - Аналог контекстного меню для мобильных платформ. TfgColorsPanel - Палитра цветов с возможностью выбора цвета. TfgGradientEdit - Компонент выбора градиента. TfgLinkedLabel  - Метка поддерживающая открытие Web ссылки в браузере по умолчанию. TfgApplicationEvents - компонент с возможностью легко задать обработчики на основные события приложения: Отслеживание смены состояния приложения, простой, обновление и выполнение действий Actions, Изменение ориентации устройства и тд. TfgVirtualKeyboard - компонент облегчающий работу с виртуальной клавиатурой. Позволяет задать пользовательские кнопки над виртуальной клавиатурой под iOS, а так же отлавливать события по отображению и скрытию клавиатуры. Зарегистрированы все стилевые объекты на вкладке "FGX: Style objects" Список изменений
    TfgToast: Добавлена реализация для iOS платформы. С эмулирована очередь тостов. Другими словами, при быстрой отправки несколько тостов, они будут показываться последовательно согласно заданным интервалом отображения тоста.  Добавлены глобальные настройки, позволяющие настроить внешний вид всех тостов в рамках приложения: TfgToast.DefaultBackgroundColor, TfgToast.DefaultMessageColor и TfgToast.DefaultPadding Исправлена ошибка, которая не меняла цвет текста тоста, если тост без картинки. Обновлен пример ToastsDemo
  4. Like
    Владимир отреагировална Brovin Yaroslav в Как залить цветом область произвольной формы?   
    Нет, 
     
    Как вариант, использовать заливку полигона или пути:
    procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); begin Canvas.Fill.Kind := TBrushKind.Solid; Canvas.Fill.Color := TAlphaColorRec.Red; Canvas.FillPolygon([TPointF.Create(0, 0), TPointF.Create(100, 0), TPointF.Create(100, 100)], 1); end;
  5. Like
    Владимир отреагировална Brovin Yaroslav в Как указать цвет по RGB?   
    Например так для RGB:
    var Color: TColor; begin TColorRec(Color).R := 123; TColorRec(Color).G := 113; TColorRec(Color).B := 13; Rectangle1.Fill.Color := Color; end; Или так для ARGB:
    var Color: TAlphaColor; begin TAlphaColorRec(Color).R := 123; TAlphaColorRec(Color).G := 113; TAlphaColorRec(Color).B := 13; TAlphaColorRec(Color).A := 126; Rectangle1.Fill.Color := Color; end; Update 1 (2014.06.25): В RAD Studio XE6 появился более удобный способ через использование конструктора типа TAlphaColorF:
    uses System.UITypes; var Color: TAlphaColor begin Color := TAlphaColorF.Create(123 / 255, 113 / 255, 13 / 255, 126 / 255).ToAlphaColor; end;
  6. Like
    Владимир отреагировална Rusland в Скачать курс валют через THTTPClient   
    Проблема решена.
    Оказалось что там кодировка Win1251, а я указал 
    TStringStream.Create('', TEncoding.UTF8); вместо
    TStringStream.Create(''); И парсер на всякий случай:
    uses msxml; procedure GetKursValutAndDate(XML:String; var KDollar,KEuro:Double); var XMLDoc: IXMLDOMDocument; Subnodes: IXMLDOMNodeList; AttributeNode: IXMLDOMNode; OperationNode: IXMLDOMNode; i:integer; begin KDollar:=0; KEuro:=0; try XMLDoc:=CoDOMDocument.Create; if Assigned(XMLDoc) and XMLDoc.loadXML(XML) then begin Subnodes:=XMLDoc.selectNodes('//ValCurs/node()'); if Assigned(Subnodes) then begin for I := 0 to Subnodes.length - 1 do begin AttributeNode := Subnodes[I].attributes.getNamedItem('ID'); if Assigned(AttributeNode) then if (AttributeNode.nodeValue='R01235') then begin // доллар OperationNode:=Subnodes[I].selectSingleNode('.//Value'); if Assigned(OperationNode) then KDollar:=StrToFloat(OperationNode.text); end else if (AttributeNode.nodeValue='R01239') then begin // евро OperationNode:=Subnodes[I].selectSingleNode('.//Value'); if Assigned(OperationNode) then KEuro:=StrToFloat(OperationNode.text); end end; end; end; except Raise Exception.Create('Не удалось получить курс валют'); end; end;  
  7. Like
    Владимир отреагировална Brovin Yaroslav в [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..."
     

  8. Like
    Владимир отреагировална Brovin Yaroslav в [TTabControl] Красивое 3D переключение вкладок в TabControl   
    Можно сделать так:
    Делаем поворот TTabControl на от 0 до 90 градусов, чтобы он повернулся к пользователю ребром. По окончании первой анимации меняем активную вкладку в TTabControl. Делаем поворот TTabControl еще на 90 градусов от 270 до 360. В итоге TTabControl поворачивается к нам уже новой вкладкой.  Видео эффекта в действии: 

     
    Проект: TTabControl_3DRotationDemo.zip
  9. Like
    Владимир отреагировална Brovin Yaroslav в TShadowEffect   
    Все применения эффектов кэшируются, так как применение эффекта очень ресурсоемкая задача. То есть под конечное изображение выделяется дополнительный буфер, содержащий результирующее изображение с эффектом. Кэш обновляется либо в ручную, либо автоматически в нескольких случаях. При скроллировании, видимо эффект не обновляется. Это можно сделать в OnViewPortPositionChanged в ручную.
    var EffectContainer: IEffectContainer; begin if Supports(Button1, IEffectContainer, EffectContainer) then EffectContainer.NeedUpdateEffects; Но повторюсь, в этом случае у вас заметно замедлиться скорость прокрутки. Лучше использовать для тени прозрачную png картинку, подложенную в стиль итема.
  10. Like
    Владимир отреагировална Andrey Efimov в Глобальные тормоза сайта   
    По поводу двух тем, да, я как раз в тот момент оказался на форуме, так что успел удалить дубликат. Как уже написал Ярослав, ночью, поправили всё, но появилась необходимость обновить движок форума до последней лицензионной версии (а лицензия, на данный момент, стоит примерно 200$ = 14 000 руб., сами понимаете, сумма не маленькая...).
     
    Спасибо за оперативное сообщение о проблемах .
  11. Like
    Владимир отреагировална Error в RAD 11 на подходе?   
    Вот не надо переименований, Delphi это имя, не в среде школьников конечно.
    Самые спорщики о мертвости Delphi - часто сами ничего сложнее калькулятора не писали, ни на чем
  12. Like
    Владимир отреагировална Andrey Efimov в RAD 11 на подходе?   
    Сами себе противоречите, хотите всё и сразу, но при этом чтобы приложение не "пухло". Это невозможно... Для примера, вспомните сколько раньше весили приложения для Андроида, когда было мало функционала (XE5, XE6), но с появлением новых функций, которые просил народ, размер естественно увеличивался. Сейчас приложение с сервисом весит примерно 40 МБ, хотя с сегодняшним развитием технологий и повсеместной установкой модулей памяти на 16 ГБ и более, увеличение не так заметно. Да и к тому же некоторые очень популярные (во всём мире) приложения весят намного больше.
  13. Like
    Владимир отреагировална Brovin Yaroslav в Текст плюс картинка. Какие компоненты лучше выбрать   
    TScrollBox автоматически высчитывает размер скролируемого контента. Поэтому, когда вы помещаете в него контрол и перемещаете его за видимые границы контрола (ViewPort), то TScrollBox пересчитывает размеры контента и добавляет полосы прокрутки. Отсюда следует важный факт, что размер контента TScrollBox зависит от внутернний контролов. Вы пытаетесь добавить внутрь контента Layout, выравненный по всей области скроллбокса. Что вы вы этом случае ожидаете получить на выходе? Как я думаю, вы догадываетесь, что это выравнивание зависит от размер родительского контрола. А сам скролл бокс (предок), использует ваш Layout для определение размера контента. Так что в вашей ситуации TScrollBox для контента возьмет размер самого скролл бокса. Чтобы вам добавить прокрутку нужно: Взять за основу TVertScrollBox Поместить внутрь TLayout (если хотите, можно без него напрямую складывать контролы). Выравнять его по верхнему краю. В этом случае вы сможете руками задать требуемую высоту, при получении новых данных Когда вы будите знать размер вашего изображения, пересчитать высоту и обновить ее для вашего Layout. 
  14. Like
    Владимир отреагировална masmat в Обновление файла БД без перезапуска приложения   
    Под Android я делаю так. Вставляю изначально файл БД в Deploy.
    Потом вызываю при необходимости процедуру
    procedure TForm1.RefreshBD; { TODO -cKod : RefreshBD - обновление БД } var   PackageName: JString;   zip: TZipFile; begin      // Отключаемся от базы       FDConnection1.Connected := False;       // Получаем имя apk файла       PackageName := SharedActivityContext.getPackageResourcePath;       if TFile.Exists(JStringToString(PackageName)) then       begin         // Удаляем старый файл базы         TFile.Delete(TPath.GetHomePath + PathDelim + 'DBGK.db');         // Извлекаем новый файл базы         zip := TZipFile.Create;         zip.Open(JStringToString(PackageName), TZipMode.zmRead);         zip.Extract('assets/internal/DBGK.db', TPath.GetDocumentsPath, False);         zip.Close;         zip.free; end;   // Подключаемся к базе   FDConnection1.Connected := True; end;  
    Под iOS вставляю в ресурсы, потом вот так
     
    procedure TForm1.RefreshBD; { TODO -cKod : RefreshBD - обновление БД } begin      // Отключаемся от базы       FDConnection1.Connected := False;   if FindResource(0, 'res_bd', PChar(RT_RCDATA)) <> 0 then     rs_bd := TResourceStream.Create(0,'res_bd',PChar(RT_RCDATA));   if TFile.Exists(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db') then     begin       TFile.Delete(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db');       rs_bd.SaveToFile(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db');     end   else     begin       rs_bd.SaveToFile(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db');     end;   FDConnection1.Connected := True; end;
  15. Like
    Владимир отреагировална masmat в Обновление файла БД без перезапуска приложения   
    При указанном мной способе, файл перезаписывается на УРА 
  16. Like
    Владимир отреагировална Равиль Зарипов (ZuBy) в Потоки и процедуры   
    использовать такую конструкцию
    //uses System.Threading; TTask.Run(      procedure      begin         // выполняем загрузку файла из интернета;         TThread.Synchronize(nil, procedure            begin               // выполняем действия связанные с визуальными компонентами            end); end); но помнить что из доп. потока нельзя запустить доп. поток
  17. Like
    Владимир отреагировална Andrey Efimov в Где хранить большое количество картинок?   
    Допустим ситуацию:
     
    Имеем 164 картинки (может быть больше. Размер примерно 128х128), данные картинки нужно добавить в приложение перед компиляцией apk-файла.
    У всех картинок уже заданы разные имена, например по такой схеме:
    10 картинок (фрукты) – имя = fruit_1..10 26 картинок (овощи) – имя = vegetables_1..26 и т.п. при добавлении в Rad Studio необходимо сохранить эти имена, чтобы потом можно было по ним обращаться к картинкам.
    В приложении, список имён хранится в ComboBox'е, также как и количество картинок для каждой категории.
     
    Я вижу четыре варианта хранения:
    StyleBook (минусы: неудобно добавлять по одной штуке, каждой картинке нужно присвоить имя)  
    Хранить в ресурсах (плюсы: можно добавить сразу все картинки. Минусы: нужно задать каждой картинке имя)  
    Задеплоить (главный минус: прописывать настройки (путь и т.п.) для каждого файла (Kikoma просветил меня, оказывается можно массово задавать конечный путь)) единственное что теперь смущает, так это куча файлов в окне для деплоя  
    Хранить все картинке в zip-архиве (плюсы: один файл, извлечь архив можно в любой момент) Это пока экспериментальный вариант, к нему я склоняюсь больше всего. Смысл данного варианта заключается в том что я запихну все картинки в один архив, сам архив в приложение, и когда придёт время извлеку все картинки по нужному пути, т.е. деплой в рантайме Минусы: Размер приложения в конечном итоге, после извлечения архива будет чуток больше.  
    Картинки у меня в png формате, к ним я применяю сжатие при помощи PNGGauntlet, чтобы уменьшить размер.
     
     
    У кого есть ещё какие-нибудь варианты?
     
     
    Суть вопроса заключается в том, чтобы найти максимально простой и наименее затратный по времени вариант добавления картинок. Чтобы не задавать новые имена, а использовать уже существующие, чтобы можно было в один клик добавить все картинки, чтобы можно было в один клик прописать путь (если нужно) для всех картинок.
  18. Like
    Владимир отреагировална Равиль Зарипов (ZuBy) в [TBitmap] Загрузка изображений из интернета в приложение   
    idhttp1.Create(Application); - что это за бред?
    IdHTTP - это откуда взялось?
    никогда и никому этот код не показывай
     
    берем файлик во вложении подключаем в проекте и пишем
    with ListView1.Items.Add do begin   Text := 'Text';   Bitmap.LoadFromUrl('http://site.ru/icons/icon.png'); end; не проверял, но должно работать. не нужно пихать в поток, там итак уже используется
    FMX.Features.Bitmap.Helpers.zip
  19. Like
    Владимир отреагировална Brovin Yaroslav в Включение своих файлов в приложение   
    Добрый вечер,
     
    Тут есть два способа:
    Работа с Deployment менеджером. Он довольно подробно описан на Embarcadero Doc Wiki: http://docwiki.embarcadero.com/RADStudio/XE5/en/Deployment_Manager Работа через менеджер ресурсов и их получение через ResourceStream. Этот способ описал MyDelphiPw в сообщении выше тут. 1. Deployment Manager
    Специальная настройка проекта, которая позволяет указать, какие файлы нужно включить в состав пакета (Андроид) или бандла (iOS). Суть его работы простая, вы указываете какие файлы с вашего компьютера нужно перенести на устройство (в какое место). А далее работаете с ними из приложения так, как при обычной работе с файлами под Windows.
     
    На мобильных платформах нужно учесть специфику возможных местоположений файла. Пакет/Бандл (приложение) не допускает изменения внутренних файлов, потому что подписывается сертификатом. Поэтому теоретически при изменении файлов приложения, вы нарушаете целостность подписи. Именно по этому файлы внутри пакета/бандла доступны только на ЧТЕНИЕ.
     
    Однако, мобильные платформы предлагают широкий круг специальных мест для хранения (временные папки, песочницы, документы, карточка памяти и тд) изменяемых файлов (например файл локальной базы данных, или настройки в ini файле и тд).
     
    Описание всех вариантов местоположений с описанием путей есть в записе TPath (RTL): http://docwiki.embarcadero.com/RADStudio/XE5/en/Standard_RTL_Path_Functions_across_the_Supported_Target_Platforms. 

    Общие действия для использования менеджера развертывания такие:
    1. Открываем менеджер развертывания: Системное Меню -> Project -> Deployment.

    2. Выбираем в верхнем выпадающем меню платформу и конфигурацию сборки.

    3. Нажимаем кнопку добавить файл и выбираем нужный файл.
     
    4. Указываем местоположение файла, куда он должен поместиться после развертывания приложения на устройстве. Тут есть особенность, если файл нужен только на чтение, то пути менять не надо. Если возможна ситуация, когда файл может быт изменен, то файл нужно поместить под iOS в Startup\Documents\ (регистр важен)

    Под Андроид в assets\internal (регистр важен) - для внутреннего доступа из пакета приложения или assets - для внешнего доступа

    5. Получаем пути к расположению файлов:
    Под iOS:
    TPath.Combine(TPath.GetDocumentsPath, 'filename') Под Андроид:
    TPath.Combine(TPath.GetDocumentsPath, 'filename') { Внутренний доступ} TPath.Combine(TPath.GetSharedDocumentsPath, 'filename') { Внешний доступ } Полезные ссылки
    Подробное руководство по добавлению файлов для iOS: http://docwiki.embarcadero.com/RADStudio/XE5/en/Creating_an_iOS_App#Loading_and_Deploying_Files Подробное руководство по добавлению файлов для Android: http://docwiki.embarcadero.com/RADStudio/XE5/en/Creating_an_Android_App#Loading_and_Deploying_Files
  20. Like
    Владимир отреагировална rareMax в Включение своих файлов в приложение   
    Да, можно.
    В файл проекта dpk добавляем строку
    program YouSoft; {$R 'resource.res' 'resource.rc'}  в файле resource.rc создаем такое содержимое:
    YouRes RCDATA .\Resources\твой_файл.txt и далее в программе загружать примерно так:
    var Stream: TResourceStream; begin Stream:= TResourceStream.Create(hInstance, 'YouRes', RT_RCDATA); try //Работаем с потоком finally Stream.Free; end;  Как-то так. Удачи!
  21. Like
    Владимир отреагировална haword в Потоки и процедуры   
    procedure potoc1
     begin
                  // выполняем действия связанные с визуальными компонентами
     end
     
     procedure potoc
     begin
            // выполняем загрузку файла из интернета;
           TThread.Synchronize(nil, potoc1);
    end;
     
    TTask.Run(potoc);
     
    так лучше? 
  22. Like
    Владимир получил реакцию от Andrey Efimov в Как решить проблему с кодировкой на Android   
    Да, конечно!
     
  23. Like
    Владимир отреагировална Brovin Yaroslav в Групповые занятия   
    Добрый день, уважаемые участники форума,
     
    В связи с востребованностью обучения по Skype и моим ограниченным количество времени, предлагаю организовать групповые занятия по курсу обучения кроссплатформенной разработки.
     
    Условия
    Занятия в группе от 2 до 3 человек Стоимость 1 часа (60 минут) - 1 500 р. с группы (сумма делится на количество участников в группе) Требования к участникам
    Знание синтаксиса языка Delphi (ООП) План курса
    На текущий момент набирается группа на обучение FireMonkey по кроссплатформенной разработке. Курс предполагает изучение следующих разделов (список разделов и тем приблизительный и может корректироваться):
    Первое приложение. (Создание проекта, типы проекта и их отличия, знакомство со средой разработки) Архитектура FireMonkey (Концепция кроссплатформенности, достоинства и недостатки подходов, архитектура платформы, сервисы, сообщения, стили) Сервисы (Концепция, Преимущества сервисов, существующие виды сервисов, Разработка своих сервисов, использование чужих.) Графика (Особенности отрисовки, отличия от VCL, виды реализаций канвы, GPU канва, весь процесс отрисовки графики. Отрисовка компонентов. Рисуем текст. Особенности отрисовки растровых изображений. Ограничения платформ. Особенности ускорения отрисовки) Анимация и триггеры (Типы (быстрая, компонентная) и виды анимации (линейная, квадратичная и тд), принцип работы настройка. Триггеры.) Фильтры и эффекты (Понятие фильтра и эффекта. Как работают фильтры и эффекты. Фильтры на уровне шейдеров. Эффекты используют фильтры) Сенсоры (Общий подход работы с сенсорами. Какие значения выдают разные виды сенсоров.) Стили (Описание, как работают стили: загрузка, создание, выгрузка, использование, виды стилей (растровые векторные), редакторы стилей. Замена платформенного стиля. и тд) Компонентная база (по выбору) Создание приложения от идеи до воплощения Особенности разработки на мобильных платформах Использование нативного API Вопросы производительности
  24. Like
    Владимир отреагировална Brovin Yaroslav в Как прокрутить TScrollBox в самый низ?   
    В XE7 мне не удалось воспроизвести вашу ситуацию. TScrollBox прокручивается до самого низа при использовании кода:
    ScrollBox1.ScrollBy(0, -ScrollBox1.ContentBounds.Height);
×
×
  • Создать...