1

我遇到了一个相当有趣的问题。我有一个Fill设置为Gradient.

在 Windows、IOS 和 OSX 上,渐变是按应有的方式绘制的。但在 Android 上,颜色是错误的。有任何想法吗?

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 480
  ClientWidth = 640
  Fill.Kind = Gradient
  Fill.Gradient.Points = <
    item
      Color = xFFFFC600
      Offset = 0.000000000000000000
    end
    item
      Color = xFFFFF100
      Offset = 1.000000000000000000
    end>
  Fill.Gradient.StartPosition.Y = 0.500000000000000000
  Fill.Gradient.StopPosition.X = 1.000000000000000000
  Fill.Gradient.StopPosition.Y = 0.500000000000000000
  FormFactor.Width = 320
  FormFactor.Height = 480
  FormFactor.Devices = [Desktop]
  DesignerMasterStyle = 0
  object Button1: TButton
    Position.X = 8.000000000000000000
    Position.Y = 8.000000000000000000
    TabOrder = 0
    Text = 'Button1'
  end
end

视窗: 窗口截图

操作系统: OSX 截图

IOS: IOS截图

安卓: 安卓截图

4

1 回答 1

1

你用的是德尔福,对吧?因为,我从未见过在基于 Pascal 的语言中使用该语法,也无法让您的代码在 Delphi 10 Seattle 下运行。它是由代码生成器创建的吗?

但是,我已经编写了您尝试使用 Delphi 10 Seattle 和 Firemonkey 获得的渐变。它在每台设备上都可以工作并且看起来都一样,即使在 Android 上也是如此:

procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas;
  const ARect: TRectF);
var
  locGradient: TGradient;

begin
  with Canvas do begin
    BeginScene;

    // Create and initialize the gradient object
    locGradient := TGradient.Create;
    with locGradient do begin
      Color   := $FFFFC600;
      Color1  := $FFFFF100;

      StartPosition .Y  := 0.5;

      StopPosition  .X  := 1;
      StopPosition  .Y  := 0.5;
    end;

    // Assign the created gradient object to the fill property of the canvas
    with Fill do begin
      Kind      := TBrushKind.Gradient;
      Gradient  := locGradient;
    end;

    // Create a rectangle which represents the gradient
    FillRect( ARect,  0, 0, AllCorners, 1.0 );

    EndScene;
  end;

  FreeAndNIL( locGradient );
end;

这不一定回答您的问题,即为什么您的颜色值在 Android 上只使用您的代码就搞砸了,但话又说回来,您的代码似乎没有遵循常见的Delphi 语法约定。

于 2016-03-02T10:06:28.800 回答