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

rareMax

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

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

  • Посещение

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

    35

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

  1. Like
    rareMax получил реакцию от Brovin Yaroslav в Почему не стилизуется рамка окна?   
    Спасибо большое за скорую помощь!
  2. Like
    rareMax отреагировална Brovin Yaroslav в Почему не стилизуется рамка окна?   
    Не все стили FireMonkey содержат стилизацию рамки окна. В вашем случае стиль не поддерживает стилизацию рамки. Поэтому свойство TForm.Border.Styling не оказывает никакого эффекта на стилизацию рамки. А в примере по ссылку используется другой стиль, который видимо поддерживает стилизацию рамки.
     
    Наличие поддержки стиля рамки окна можно проверить двумя способами:
    Непосредственно загрузив стиль и запустив приложение. Открыть стиль в дизайнере стиля в TStyleBook и проверить наличие стиля "windowborderstyle". Именно этот стиль используется для стилизации рамки окна.
  3. Like
    rareMax отреагировална Brovin Yaroslav в Как нарисовать точку на канве в FireMonkey?   
    Добрый вечер
     
    В моей статье, я описывал способ работы с TBitmap. В вашем же случае, вы работаете с канвой. У канвы формы нету Bitmap. Поэтому ваш код падает при попытке вызывать Map у не существующего объекта.
     
    Для решения вашей задачи, нужно:
    Помнить о самое главной вещи при работе с канвой в FMX. Это то, что выполнять отрисовку можно только в определенный моменты времени (в отличии от VCL). Непосредственно, когда получен системный запрос на отрисовку сцены (формы), а именно в событиях OnPaint, OnPainting (в вашем случае у панели).  Знать, что канва существует в единственном экземпляре в рамках одной формы (опять же в отличии от VCL, где свою канву имеет каждый оконный контрол). Резюмирую, все выше сказанное.
    procedure TForm4.Panel1Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); var X, Y: Integer; PixelRegion: TRectF; begin Canvas.Stroke.Color := TAlphaColorRec.Red; for X := 0 to Floor(Panel1.Width) - 1 do for Y := 0 to Floor(Panel1.Height) - 1 do begin PixelRegion := TRectF.Create(TPointF.Create(X, Y), 1, 1); Canvas.DrawRect(PixelRegion, 0, 0, AllCorners, 1); end; end; Задаем обработчик на событие TPanel.OnPaint. Используя канву переданную через параметры, задаем цвет кисти и отрисовываем логические пиксели. Для закраски пикселей, я воспользовался обычной отрисовкой квадрата с шириной в 1 логический пиксель.
     
    Если речь идет об андроиде, то из-за возможного наличия экрана с повышенной плотностью пикселей (Screen Scale) это код для экранов со Scale отличных от 1 и не кратных 2, будет рисовать сдвоенные/размазанные линии. Чтобы этого избежать, нужно перед отрисовкой выполнить округление региона до физических пикселей при помощи метода TCanvas.AlignToPixel.
    procedure TForm4.Panel1Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); var X, Y: Integer; PixelRegion: TRectF; PixelPos: TPointF; begin Canvas.Stroke.Color := TAlphaColorRec.Red; for X := 0 to Floor(Panel1.Width) - 1 do for Y := 0 to Floor(Panel1.Height) - 1 do begin PixelPos := Canvas.AlignToPixel(TPointF.Create(X, Y)); PixelRegion := TRectF.Create(PixelPos, 1, 1); Canvas.DrawRect(PixelRegion, 0, 0, AllCorners, 1); end; end;
×
×
  • Создать...