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

Pax Beach

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

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

  • Посещение

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

    12

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

  1. Like
    Pax Beach отреагировална Andrey Efimov в [Android] Как скрыть/показать системный Status Bar?   
    XE7 хорошо! Вот написал на скорую руку статейку для XE6.
     
    эм...
    или это не то?
  2. Like
    Pax Beach отреагировална AngryOwl в [Android] Как скрыть/показать системный Status Bar?   
    Не работает!
    В режиме DesignTime (в IDE) при изменении свойтва формы BorderStyle = TFmxFormBorderStyle.bsNone StatusBar пропадает. Но он остается при запуске приложения на смарте.
    В "Project / Options / Uses Permissions" установлены свойства:
    Expand status bar = True
    Advanced / Status bar = True
    (пробовал и другие варианты)
     
    При запуске приложения Status bar не пропадает.
     
    Но вопрос стоял иначе - "скрыть/показать Status Bar в процессе работы"
  3. Like
    Pax Beach отреагировална Brovin Yaroslav в Таймер в сервисе   
    function AndroidTimerCreate: Integer; Создает таймер и возвращает его идентификатор
    procedure AndroidTimerSetInterval(TimerHandle: Integer; Interval: Integer); Задает для созданного таймера по его ID интервал срабатывания.
    Эта реализация работает с одним обработчиком OnTimer для всех таймеров. Чтобы задать такой общий обработчик используется процедура:
    procedure AndroidTimerSetHandler(OnTimer: TAndroidTimerNotify); В параметре OnTimer приходит ваш идентификатор таймера.
    procedure AndroidTimerDestroy(TimerHandle: Integer); Этот метод уничтожает созданный вами таймер по ID
    Этот юнит - это оболочка над posix-таймерами
  4. Like
    Pax Beach отреагировална Brovin Yaroslav в Таймер в сервисе   
    Посмотрите на реализацию системных таймеров в Androidapi.Timer.pas. Они подходят для сервисов.
  5. Like
    Pax Beach отреагировална krapotkin в Что выбрать VCL или FMX?   
    http://www.fmxexpress.com/mix-vcl-and-firemonkey-forms-in-delphi-xe5-firemonkey-on-windows/
    и видео
  6. Like
    Pax Beach отреагировална Равиль Зарипов (ZuBy) в Что выбрать VCL или FMX?   
  7. Like
    Pax Beach получил реакцию от #WAMACO в Berlin жутко тормозит   
    Win 10 x64, 12 GB.
    Проекты вынес на SSD.
    При работе с проектами, выключаю антивирус, отключаю синхронизацию облака.
    Берлин компилит проекты под Android быстрее Сиэтла. Под Windows и так моментально.
    Никаких тормозов в работе часами не увидел.
     
  8. Like
    Pax Beach получил реакцию от zairkz в Что выбрать VCL или FMX?   
    Просто мой аргумент за FMX — единообразие палитры параметров компонентов во всех проектах, возможность масштабирования решений (если вдруг понадобится) на другие платформы.
    У меня есть опасение, что Embrcdr перестанет поддерживать VCL в будущем.
     
  9. Like
    Pax Beach отреагировална kami в Что выбрать VCL или FMX?   
    Основываясь на фразе "создании приложения только для Windows"
    Сама Embarcadero продолжает говорить, что под Windows ничего лучше VCL нет. Используя VCL вы можете задействовать все возможности, предоставляемые операционной системой. Если чего-то будет нехватать для работы (в чем я сомневаюсь, арсенал компонентов и контролов, созданных в рамках VCL, весьма обширен) - к вашим услугам полный набор WinAPI. Все VCL контролы основываются на вызовах WinAPI функций, что гарантирует (ну да, громко сказано, конечно) их быструю работу, поскольку она контролируется оптимальным кодом самой ОС. Помимо этого, некоторые задачи практически невозможно решить без задействования функций ОС. Например, хуки, сервисы, нестандартное поведение при движении мыши (WM_NCHITTEST)... Поведение контролов также будет 100% таким, как пользователь привык видеть во всех приложениях родной ОС.
    Да, на FMX тоже можно использовать функции ОС и нативные контролы. Но микс нативных и "собственных" контролов приводит к извращениям по расположению и компоновке контролов, т.к. нативный контрол всегда отрисуется поверх собственных. Также, т.к. Windows основана на механизме передачи оконных сообщений - есть определенные сложности в применении WinAPI. Ну и - если вы задействуете WinAPI функции, т.е. привяжетесь к конкретной ОС - смысл тогда использовать FMX?
     
    Резюмируя - если работа действительно планируется только под Windows - используйте VCL.
    Если хоть в отдаленном будущем мелькает возможность работы приложения на других платформах - то сразу нужно работать на FMX, этим вы избавите себя от проблем портирования приложения.
     
  10. Like
    Pax Beach получил реакцию от Kitty в Berlin жутко тормозит   
    Win 10 x64, 12 GB.
    Проекты вынес на SSD.
    При работе с проектами, выключаю антивирус, отключаю синхронизацию облака.
    Берлин компилит проекты под Android быстрее Сиэтла. Под Windows и так моментально.
    Никаких тормозов в работе часами не увидел.
     
  11. Like
    Pax Beach отреагировална krapotkin в Прокрутка диаграммы   
    ну, вообще, если нужен скролл, то нужно чтобы вложенный объект имел конкретную ширину/высоту
    тогда и скролл будет на него ориентироваться и скроллить
    и ситуация, когда заголовки строк занимают 80% ширины строки, а график- всего 20%, называется плохой дизайн
  12. Like
  13. Like
    Pax Beach отреагировална umkes в Android MySQL+UniDac+3G   
    Привет, а где находится БД, не в твоей сети случайно, а ты по локальному адресу пытаешься конектиться? =))
  14. Like
    Pax Beach отреагировална asviridenkov в Что выбрать VCL или FMX?   
    FMX слишко сыра, поведение контролов под виндами далеко от нативного. Еще недавно даже примитивный TMemo глючил и падал вовсю.
    Набор контролов крайне ограниченный. Поддержка со стороны сторонних вендоров компонент мала.
     И что значит "откажется от поддержки" применительно к VCL? Перестанет развивать? Так уже давно перестала. Выпилит совсем? Это уронит продажи дельфи ниже плинтуса.
     
     
  15. Like
    Pax Beach отреагировална asviridenkov в Что выбрать VCL или FMX?   
    Win пока однозначно VCL.
     
  16. Like
    Pax Beach отреагировална Brovin Yaroslav в Как включить антиалиасинг на Андроиде?   
    По умолчанию антиалиасинг отключен на Андроиде. За управление этим эффектом отвечает свойство TForm.Quality. Оно имеет три режима:
    HighQuality - Качество отображения в приоритет. Поддержка антиалиасинга HighPerformance - Производительность в приоритете. Отсутствие антиалиасинга. SystemDefault - По умолчанию. Для андроида равен HighPerformance. В вашем случае для формы нужно установить 
    Quality = HighQuality Важно знать
    Антиалиасинг очень дорогостоящая операция, по этому по умолчанию она отключена на мобильных платформах. Так же антиалиасинг должен поддерживаться самим устройством (Поддержка Мультисэплинга).  Если устройство аппаратно не поддерживает мультисэмплинг, то антиалиасинга не будет.
  17. Like
    Pax Beach отреагировална Brovin Yaroslav в Как узнать, что поддерживается антиалиасинг на устройстве на базе Андроид?   
    Проверить можно, установив программу OpenGL Extensions Viewer (Бесплатная) и посмотреть.
    Обратить внимание на наличие опции: "GL_EXT_multisampled_render_to_texture"

  18. Like
    Pax Beach отреагировална Камышев Александр в Сглаживание при рисовании в буфер bitmap   
    протестировал 3 варианта:
    1. правка FMX.Graphics.pas как указано выше
    2. пишу на с++, можно исправить файл FMX.Graphics.hpp
     заменить код 
    __property TCanvasQuality Quality = {read=FQuality, nodefault}; на 
    __property TCanvasQuality Quality = {read=FQuality, write=FQuality, nodefault}; после этого можно 
    bmp_buf->Canvas->Quality = TCanvasQuality::HighQuality; 3. Создать новую канву как указано выше
    TCanvas *MyCanvas = TCanvasManager::CreateFromBitmap( bmp_buf, TCanvasQuality::HighQuality ); во всех трех случаях свойство Quality под debug имеет значение HighQuality, проверял перед DrawPath:
    bool b = MyCanvas->Quality == TCanvasQuality::HighQuality; и во всех вариантах эффекта не было...
    неспроста Quality для формы нужно ставить в design-time
    что происходит при сборке, из-чего включается антиалиасинг?
    .
  19. Like
    Pax Beach отреагировална Brovin Yaroslav в Сглаживание при рисовании в буфер bitmap   
    Так, прежде, чем читать мое сообщение выше, есть еще другой легальный способ. Создать канву из битмапа:
    MyCanvas := TCanvasManager.CreateFromBitmap(Bitmap, quality); Вы получите канву для рисования на битмапе, но потом нужно будет канву удалить после работы.
  20. Like
    Pax Beach отреагировална Равиль Зарипов (ZuBy) в Описание TfgFlipView - слайдер изображений   
    Как динамически добавлять картинки в этот компонент?
    На андроиде не работает?
    Не могу запустить проект на android'e пустой экран
     
     
    Чтобы заработало на Android нужно стиль грузить в ресурсы...
     
    Ярослав, Вынесите в след. версии два метода в public (нижний)
        procedure GoToNext(const Animate: Boolean = True);     procedure GoToPrevious(const Animate: Boolean = True); чтобы можно было реализовать переключение картинок жестами
     
    ещё вот эти не помешают
    function IsFirstImage: Boolean; function IsLastImage: Boolean; Вот еще может реализуете такую штуку, в режиме слайда и ImagesCount = 1 чтобы не переключались картинки
    procedure TfgFlipViewSlidingPresentation.ShowNextImage(const ANewItemIndex: Integer; const ADirection: TfgDirection; const AAnimate: Boolean); begin AssertIsNotNil(Model); inherited; if (csDesigning in ComponentState) or not AAnimate then begin if ImageContainer <> nil then ImageContainer.Bitmap.Assign(Model.CurrentImage); Model.FinishChanging; end else begin if Model.ImagesCount = 1 then begin exit; end; if (FNextImageContainer <> nil) and (FNextImageAnimator <> nil) and (FImageAnimator <> nil) then begin FNextImageContainer.Bitmap.Assign(Model.CurrentImage); InitAnimatorParams(ADirection); FImageAnimator.Start; FNextImageContainer.Visible := True; FNextImageAnimator.Start; end; end; end;
  21. Like
    Pax Beach отреагировална Andrey Efimov в [Статья] RAD Studio 10.1 Berlin - FireUI Live Preview   
    Ссылка: http://delphifmandroid.blogspot.ru/2016/05/rad-studio-101-berlin-fireui-live.html
    Автор: Андрей Ефимов
    Описание: В этот раз, речь пойдёт о новом инструменте FireUI Live Preview, добавленном в RAD Studio 10.1 Berlin . Забегая вперёд скажу, что инструмент очень полезный и удобный, есть исходники и разработан с использованием App Tethering.
  22. Like
    Pax Beach отреагировална dnekrasov в Таймер в сервисе   
    Не забудьте поделиться
  23. Like
    Pax Beach отреагировална dnekrasov в Таймер в сервисе   
    В архиве - простенький проект. Протестирован на Win и OSX.
     
    TimerThreadDemo.zip
  24. Like
    Pax Beach получил реакцию от Rusland в Таймер в сервисе   
    Спасибо большое, хороший полезный класс!
    Можно еще выложить простой пример использования — создание, инициализация, запуск, остановка, уничтожение? Думаю, очень поможет форумчанам.
     
  25. Like
    Pax Beach отреагировална dnekrasov в Таймер в сервисе   
    Когда-то, лет 5 назад у меня возникла такая-же проблема, только в Win32-сервисе. Тогда, для её решения, я написал 2 простеньких класса.
    Вот код, может пригодится?
    unit Utils.TimerThread; interface uses System.Classes, System.SysUtils, System.SyncObjs; type TCustomTimerThread = class abstract (TThread) private FLock: TCriticalSection; FCancelledEvent: TSimpleEvent; FInterval: Integer; FOnTimer: TNotifyEvent; function GetInterval: Integer; function GetOnTimer: TNotifyEvent; procedure SetInterval(const Value: Integer); procedure SetOnTimer(const Value: TNotifyEvent); protected procedure Lock; procedure Unlock; procedure Sleep(AInterval: Integer); reintroduce; procedure TerminatedSet; override; procedure DoOnTimer; virtual; public constructor Create(AInterval: Integer; AOnTimer: TNotifyEvent); reintroduce; procedure BeforeDestruction; override; procedure Cancel; virtual; property Interval: Integer read GetInterval write SetInterval; /// <summary> /// <para> /// За синхронизацией потоков отвечает поток в котором обрабатывается OnTimer /// </para> /// <para> /// !!! НЕ ЗАБЫВАТЬ ПРО ЭТО !!! /// </para> /// </summary> property OnTimer: TNotifyEvent read GetOnTimer write SetOnTimer; end; /// <summary> /// Simple wait thread /// </summary> /// <remarks> /// <para> /// !!! Important !!! /// </para> /// <para> /// Use Cancel instead of Terminate. You can get ThreadExternalTerminate /// exception in multi-thread applications /// </para> /// </remarks> TWaitThread = class(TCustomTimerThread) protected procedure Execute; override; public end; /// <summary> /// Thread independed timer /// </summary> /// <remarks> /// <para> /// !!! Important !!! /// </para> /// <para> /// Use Cancel instead of Terminate. You can get ThreadExternalTerminate /// exception in multi-thread applications /// </para> /// </remarks> TTimerThread = class(TCustomTimerThread) private FEnabled: Boolean; function GetEnabled: Boolean; procedure SetEnabled(const Value: Boolean); protected procedure Execute; override; public constructor Create(AInterval: Integer; AOnTimer: TNotifyEvent; AEnabled: Boolean = True); reintroduce; property Enabled: Boolean read GetEnabled write SetEnabled; end; implementation { TCustomTimerThread } procedure TCustomTimerThread.BeforeDestruction; begin FLock.Free; FreeAndNil(FCancelledEvent); inherited; end; constructor TCustomTimerThread.Create(AInterval: Integer; AOnTimer: TNotifyEvent); begin inherited Create; FInterval := AInterval; FOnTimer := AOnTimer; FreeOnTerminate := True; FLock := TCriticalSection.Create; FCancelledEvent := TSimpleEvent.Create; FCancelledEvent.ResetEvent; end; procedure TCustomTimerThread.Cancel; begin FCancelledEvent.SetEvent; end; procedure TCustomTimerThread.DoOnTimer; begin if Assigned(OnTimer) then OnTimer(Self); end; function TCustomTimerThread.GetInterval: Integer; begin Lock; try Result := FInterval; finally Unlock; end; end; function TCustomTimerThread.GetOnTimer: TNotifyEvent; begin Lock; try Result := FOnTimer; finally Unlock; end; end; procedure TCustomTimerThread.Lock; begin FLock.Enter; end; procedure TCustomTimerThread.SetInterval(const Value: Integer); begin Lock; try FInterval := Value; finally Unlock; end; end; procedure TCustomTimerThread.SetOnTimer(const Value: TNotifyEvent); begin Lock; try FOnTimer := Value; finally Unlock; end; end; procedure TCustomTimerThread.Sleep(AInterval: Integer); begin FCancelledEvent.WaitFor(AInterval); end; procedure TCustomTimerThread.TerminatedSet; begin inherited; FCancelledEvent.SetEvent; end; procedure TCustomTimerThread.Unlock; begin FLock.Leave; end; { TWaitThread } procedure TWaitThread.Execute; begin if FCancelledEvent.WaitFor(FInterval) = wrTimeout then DoOnTimer; end; { TTimerThread } constructor TTimerThread.Create(AInterval: Integer; AOnTimer: TNotifyEvent; AEnabled: Boolean); begin inherited Create(AInterval, AOnTimer); FOnTimer := AOnTimer; FEnabled := AEnabled; end; procedure TTimerThread.Execute; begin while not Terminated do case FCancelledEvent.WaitFor(FInterval) of wrTimeout: begin if Enabled then DoOnTimer; end; else Break; end; end; function TTimerThread.GetEnabled: Boolean; begin Lock; try Result := FEnabled; finally Unlock; end; end; procedure TTimerThread.SetEnabled(const Value: Boolean); begin Lock; try FEnabled := Value; finally Unlock; end; end; end.  
×
×
  • Создать...