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

Brovin Yaroslav

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

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

  • Посещение

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

    390

Ответы сообщества

  1. Пост Brovin Yaroslav - сообщение в [Windows] Поиск всех окон Windows был отмечен как ответ   
    В FireMonkey у объекта TApplication нету Handle. Поэтому, как его получить читаем тему: [Windows] Как получить HWND Application?
     
    P.S. В следующий раз я такую тему закрою, так как она не соответствует правилам.
  2. Пост Brovin Yaroslav - сообщение в [Android] Как включить функцию оттягивания скроллинга за границу контента и его возврат на место? был отмечен как ответ   
    procedure TForm1.FormCreate(Sender: TObject); begin   ScrollBox.AniCalculations.Animation := True;   ScrollBox.AniCalculations.BoundsAnimation := True;   ScrollBox.AniCalculations.TouchTracking := [ttVertical, ttHorizontal]; end;
  3. Пост Brovin Yaroslav - сообщение в Как воспользоваться OnClick и OnDblClick событиями у формы? был отмечен как ответ   
    Разместите непосредственно на самой форме TLayout.
    Layout.HitTest := True; Layout.Align := TALignLayout.Content; Отправьте слой на задний план: Send To Back Используйте события OnClick и OnDblClick у Layout
  4. Пост Brovin Yaroslav - сообщение в [TidHTTP] Как сделать, чтобы idHttp не блокировал форму при скачивании файла? был отмечен как ответ   
    Фоновое выполнение операции без "замораживания" отрисовки
  5. Пост Brovin Yaroslav - сообщение в Я не понимаю, как динамически создавать объекты. был отмечен как ответ   
    Глядя на ваш проект, я могу уверенно сказать, что вы не знаете основ объектно-ориентированного языка Delphi. А раз так, то я вам порекомендовал бы вначале изучить основы, а потом уже писать код. После прочтения, хотя бы Программирование на языке Delphi. Учебное пособие. у вас у самого отпадут многие вопросы и думаю вы по другому взгляните на свой код.
     
    P.S. Пара мыслей на счет вашего кода:
    Ваша ошибка: Попытка обратиться изнутри класса формы к полям формы, через внешнюю глобальную переменную, которая просто не создана.
    Например, здесь вы создаете форму и сохраняете ее в локальной переменной AForm
    procedure TForm1.Button1Click(Sender: TObject); var Aform:TForm5; begin Aform := TForm5.Create(Application); Aform.Parent := Form1; Aform.Width := Form1.Width; Aform.Height := Form1.Height; Aform.Left := Form1.Left; Aform.Top := Form1.Top; Aform.ShowModal; Aform.Destroy; end; А тут, почему-то считаете, что в Form5 содержит вашу форму, что и в AForm (Не верно, никакой связи между этими переменными нету).
    procedure TForm5.FormCreate(Sender: TObject); begin Form5 := Button1.Parent as TForm5; Form5.Height:=300; Form5.Width:=400; end; Неправильно, Обращаться к форме внутри формы, через глобальную переменную по многим причинам.
    var Form5: TForm5; procedure TForm5.FormCreate(Sender: TObject); begin Form5 := Button1.Parent as TForm5; Form5.Height := 300; Form5.Width := 400; end; Отсюда при обращении к Form5.Height (где Form5 = nil в вашем случае) вы получите Aсcess Voiolation Правильно: напрямую обращаться внутри класса к полям формы:
    var Form5: TForm5; procedure TForm5.FormCreate(Sender: TObject); begin Height := 300; Width := 400; end;
  6. Пост Brovin Yaroslav - сообщение в Как получить значение установленного часового пояса из-под FireMonkey? был отмечен как ответ   
    Добрый день,
     
    Есть. Обратите внимание на TTimeZone.
  7. Пост Brovin Yaroslav - сообщение в У меня не получается применить свой стиль был отмечен как ответ   
    В вашем проекте не лишним будет не только создать TStyleBook, но и подключить его к форме Form.StyleBook.
     
    После этих стандартный манипуляций стиль успешно будет применен.
  8. Пост Brovin Yaroslav - сообщение в Стиль для Progressbar был отмечен как ответ   
    Добрый день
     
    Стандартный TProgressBar работает так:
    Держит две картинки: задний фон, без прогресса (в вашем случае желтые кубики) и активный прогресс (синие кубики) По мере прогресса растягивает картинку с активным прогрессом  Отсюда ваш вариант не сделать только при помощи стиля. Так как вариант растягивания картинки с синими кубиками не подходит для вас.
     
    Решение
    Решение вашего варианта может быть в наследовании TProgressBar и переопределении в наследнике алгоритма заполнения активного прогресса путем перекрытия метода TProgressBar.DoRealign.
    Далее регистрируете ваш новый компонент и используете его.
  9. Пост Brovin Yaroslav - сообщение в При скриншоте окон моего приложения меня не устраивает качество полученного скриншота. В чем может быть проблема? был отмечен как ответ   
    Думаю, логично будет прикрепить сравнительные скриншоты в этому вопросу, чтобы было наглядно виден результат сравнения. Так же полагаю, вам следует подробнее изучить вопрос печати любых изображений, так как печать изображения никак не связана с FireMonkey. Постараюсь кратко пояснить.
    Вы делаете скриншот любого приложения. И получаете размер изображения в точках. Ровно столько, сколько занимает это изображение в видео памяти. Или другими словами, если размер экрана был 300 х 400 точек, то такое же изображение, такого же качества вы получите. По сути скриншот ничем не отличается от обычного вывода изображения на экран. Далее вы пытаетесь 300 х 400 точек распечатать на бумаге А1 (В районе: 594 × 841 мм). То есть спроецировать пиксель в физические размеры на бумаге.Или другими словами вы пытаетесь один пиксель вашего скриншота разместить в регион бумаги размером (594/300 ~ 2 мм, 841 / 300 ~ 2,8 мм). То есть в конечном итоге каждая точка вашего изображения займет на бумаге точку с физическим размером 2 мм  на 3 мм. Думаю дальше уже понятно, что вот она и потеря качества. Ошибочно полагать, что можно любое изображение без потери качества распечатать на любом формате бумаги. И это не зависит от того, каким образом было сформировано изображение окна.Так как размер все равно будет одинаковым.
  10. Пост Brovin Yaroslav - сообщение в Как определить локаль, установленную на устройстве iOS? был отмечен как ответ   
    Добрый день,
     
    Например так, если использовать кроссплатформенный сервис FM:
    uses FMX.Platform; {$R *.fmx} procedure TForm2.Button1Click(Sender: TObject); var LocaleService: IFMXLocaleService; LangID: string; begin if TPlatformServices.Current.SupportsPlatformService(IFMXLocaleService, IInterface(LocaleService)) then LangID := LocaleService.GetCurrentLangID; end; Либо, как вы заметили, можно этого добиться используя на прямую iOS API:
    var CurrentLocale: NSLocale; LanguageISO: NSString; begin CurrentLocale := TNSLocale.Wrap(TNSLocale.OCClass.currentLocale); LanguageISO := TNSString.Wrap(CurrentLocale.objectForKey((NSLocaleLanguageCode as ILocalObject).GetObjectID)); // <-- Здесь берем то, что нужно от локали Result := UTF8ToString(LanguageISO.UTF8String); end;
  11. Пост Brovin Yaroslav - сообщение в Как работать с TStringHelper и TStringBuilder в C++Builder ХЕ6 был отмечен как ответ   
    Как вы заметили есть два способа:
    Использовать директиву условной компиляции Использовать аналоги функции SubString Каждая функция в C++ Builder имеет три аналога. Например, для вашей функции SubString, есть три варианта:
    SubString0 - работает со строкой, как с 0-основной SubString1 - работает со строкой, как с 1-основной SubString - Вариант работы со строкой зависит от платформы (мобильные - 0, настольные - 1) Вы используете третий и поэтому на разных платформах получаете разные варианты работы.
     
    Другого варианта я думаю нет. TStringHelper - это чисто Делфовая особенность. В билдере она не будет работать. Так как строки в Delphi - это базовый тип, а в Builder C++ - нет.
  12. Пост Brovin Yaroslav - сообщение в При попытке сохранить фотографию на устройство у меня возникает ошибка. был отмечен как ответ   
    Как сказал, Андрей, вы все правильно поняли. Я дополню ответ.
    Все известные пути можно получить через System.IOUtils.TPath. Подробно о путях описано тут: Standard RTL Path Functions across the Supported Target Platforms Не во все места на устройстве разрешается осуществлять запись. Это нужно иметь в виду, если файл не сможет сохраниться из-за недостатка прав на запись.
  13. Пост Brovin Yaroslav - сообщение в [Android] Как убрать "Вставить" и подчеркивание при фокусе? был отмечен как ответ   
    Подчеркивание текста - это результат работы проверки текста. Ее можно отключить через:
    TEdit.CheckSpelling = False Кнопка 'Вставить" системная и появляется по системным правилам. Управлять ее поведением увы не удастся.
  14. Пост Brovin Yaroslav - сообщение в [Windows] Почему для прозрачной формы, стиль созданный в BitmapStyleDesigner, скрывает форму в RunTime? был отмечен как ответ   
    Отключите стилизацию рамки окна:
    Form.Border.Styling = False
  15. Пост Brovin Yaroslav - сообщение в Можно ли получить кол-во аудио дорожек? был отмечен как ответ   
    Добрый вечер,
     
    Нет, в него не заложена работа с аудио дорожками. Поэтому он не умеет определять количество дорожек. Если нужен такой функционал, то следует использовать Системное API.
     
    Спасибо
  16. Пост Brovin Yaroslav - сообщение в Как в FM нарисовать текст на Canvas под углом? был отмечен как ответ   
    В общем ничего кроме стандартных знаний линейной алгебры здесь не требуется. Согласно линейной алгебры нужно построить матрицу трансформации задать ее для канвы и рисовать все что угодно.
     
    Если вспомнить, то выполнить нужно следующее:
    Сместить Систему Координат (СК) на вектор центра поворота. Повернуть СК на угол поворота Сместить СК на обратные вектор центра поворота. В коде это будет выглядеть так:
    uses System.Math.Vectors; {$R *.fmx} procedure TForm1.ButtonDrawRotatedTextClick(Sender: TObject); var RotationMatrix: TMatrix; TranslationMatrix: TMatrix; ReverseTranslationMatrix: TMatrix; begin Image1.Bitmap.SetSize(200, 200); Image1.Bitmap.Clear(TAlphaColorRec.Null); with Image1.Bitmap.Canvas do begin BeginScene; try TranslationMatrix := TMatrix.CreateTranslation(100, 100); RotationMatrix := TMatrix.CreateRotation(-Pi / 180 * nbAngle.Value); ReverseTranslationMatrix := TMatrix.CreateTranslation(-100, -100); SetMatrix(ReverseTranslationMatrix * RotationMatrix * TranslationMatrix); Fill.Color := TAlphaColorRec.Red; Fill.Kind := TBrushKind.Solid; Font.Size := 20; FillText(TRectF.Create(50, 50, 150, 150), 'Текст', False, 1, [], TTextAlign.Center, TTextAlign.Center); finally EndScene; end; Image1.Repaint; end; end; Результат:

    Проект: DrawRotatedTextDemo.zip
  17. Пост Brovin Yaroslav - сообщение в Как восстановить стиль из *.style обратно в *.vsf? был отмечен как ответ   
    Либо руками править тексты файла стиля "*.style" Либо иметь исходник стиля в "*.vsf" Других вариантов нет. Поскольку тип vsf имеет другую структуру и по нему конвертер генерирует код для формата style. Этот процесс не обратим.
  18. Пост Brovin Yaroslav - сообщение в Отключение регистрозависимости у TSearchBox для TListBox был отмечен как ответ   
    Добрый вечер
     
    В RAD Studio XE6 поиск в TListBox регистронезависим:

  19. Пост Brovin Yaroslav - сообщение в Как сделать анимацию из кадров? был отмечен как ответ   
    Для покадровой анимации в FireMonkey существует специальный вид анимации TBitmapListAnimation.
    Подробнее тут: FMX.Ani.TBitmapListAnimation
  20. Пост Brovin Yaroslav - сообщение в Как включить Wireframe режим? был отмечен как ответ   
    Такого режима нету в FireMonkey. 
    Однако, если очень хочется и нужно, то есть такой вариант:
    http://www.youtube.com/watch?v=-yKsyKOSyh4
    Правда нужно понимать, что скрытие 3D объекта через Opacity не является правильным способом, так как фактически все вычисления производятся все равно. Чтобы избежать этого, можно для требуемых 3D объектов переопределить метод рендеринга объекта:
    TCopntrol3D.Render И вместо вывода объекта рисовать только ребра, способом описанным человеком на видео.
    TMyCube = class (TCube) public FColorMaterial: TColorMaterialSource; protected procedure Render; override; public property ColorMaterial: TColorMaterialSource read FColorMaterial write FColorMaterial; end; // ..... procedure TMyCube.Render; begin if FColorMaterial <> nil then Context.DrawLines(Data.VertexBuffer, Data.IndexBuffer, TMaterialSource.ValidMaterial(ColorMaterial), Opacity) else Context.DrawLines(Data.VertexBuffer, Data.IndexBuffer, nil, Opacity); end; Демо проект: 3DWireFrame.zip
  21. Пост Brovin Yaroslav - сообщение в Как правильно запускать анимацию в отдельном потоке? был отмечен как ответ   
    Вся отрисовка выполняется в отдельном потоке (известный как UI Thread), из других потоков рисовать в нем запрещено. При попытке это сделать, вы получите исключение. На андроиде оно несет название "ALOOPER_POLL_ERROR". На других платформах будет немного другой текст ошибки.  Чтобы отрисовка происходила в главном потоке (UI Thread) нужно добавить синхронизацию потоков через 
    TThread.Synchronize или 
    TThread.Queen Однако, в этом случае ваш поток будет ожидать момент отрисовки в главном потоке и в момент отрисовки простаивать. В итоге вы получите то, от чего пытаетесь убежать. 
    В вашем случае, медленная скорость анимации может зависеть от больших картинок в TTabControl. Так же она может зависеть от сложной иерархии объектов на форме.
  22. Пост Brovin Yaroslav - сообщение в Можно ли добиться "естественного" прокручивания TScrollBox? был отмечен как ответ   
    За физику и динамику прокручивания TScrollBox отвечает объект TAniCalculations.
    TScrollBox.AniCalculation Прокрутка работает по закону сухого трения, вы можете попробовать изменить параметры трения и скроллинга в AniCalculation, чтобы добиться прокрутки на ваш вкус:
    DecelerationRate StorageTime Elasticity BoundsAnimation Averaging
  23. Пост Brovin Yaroslav - сообщение в Можно ли прокрутить TScrollBox программно? был отмечен как ответ   
    Без анимации можно любым из этих способов:
    // Установка координат окна просмотра (Левый верхний угол) ScrollBox.ViewportPosition := TPointF.Create(0,0); ScrollBox1.ScrollTo(0, 0); // Аналог ViewportPosition // Сдвиг на вектор ScrollBox.ScrollBy(-10, -10); С анимацией так:
    procedure TForm3.FormCreate(Sender: TObject); begin ScrollBox1.AniCalculations.Animation := True; ScrollBox1.AniCalculations.BoundsAnimation := True; ScrollBox1.AniCalculations.TouchTracking := [ttVertical, ttHorizontal]; end; // Сам сдвиг ScrollBox1.AniCalculations.MouseWheel(5, 10);
  24. Пост Brovin Yaroslav - сообщение в Воспроизвидение видео в TMediaPlayer по кругу был отмечен как ответ   
    Самый простой вариант реализации воспроизведения аудио/видео по кругу является использование таймера:
    procedure TFormPlayer.PlayerTimerTimer(Sender: TObject); begin // Выполнять таймер с интервалом 1 секунда if MediaPlayer.State = TMediaState.Stopped then begin MediaPlayer.CurrentTime := 0; MediaPlayer.Play; end; end;
  25. Пост Brovin Yaroslav - сообщение в [iOS] Как поменять цвет фона системного статус бара? был отмечен как ответ   
    Требуемая версия среды: Выше RAD Studio XE5, включительно Чтобы поменять цвет фона системного статус бара под iOS 7, нужно установить цвет фона у формы, не забыв указать, что мы будем использовать тип кисти Solid.

     
    Обратите внимание, что цвет текста выбирается в зависимости от типа цвета. Если цвет фона темный, то для заголовка будет выбран белый контрастный цвет. Иначе черный, что хорошо проиллюстрировано на рисунках ниже:

     
    Если нужно, чтобы цвет фона формы не менялся, нужно поместить в корень формы TRectangle, указать ему цвет заливки и отключить отрисовку границы 
    Stroke.Kind = TBrushKind.None;
×
×
  • Создать...