Delphi 使用渐变背景色填充listview

Delphi 使用渐变背景色填充listview,delphi,listview,Delphi,Listview,我正在尝试使用图形绘制列表视图上的渐变背景,我只有渐变位置的问题 这是我的自定义列表视图绘制事件 Var R: TRect; begin // Full ListView SetRect(R, ARect.Left, ARect.Top, ARect.Right - ((ARect.Right-ARect.Left) div 2), ARect.Bottom ); GradientFillCanvas(Sender.Canvas, panelemo.Color, clWhite,

我正在尝试使用
图形绘制列表视图上的渐变背景,我只有渐变位置的问题

这是我的自定义列表视图绘制事件

Var
  R: TRect;
begin
  // Full ListView
  SetRect(R, ARect.Left, ARect.Top, ARect.Right - ((ARect.Right-ARect.Left) div 2), ARect.Bottom );
  GradientFillCanvas(Sender.Canvas, panelemo.Color, clWhite, R, gdVertical); // GraphUtil
  SetRect(R, ARect.Right - ((ARect.Right-ARect.Left) div 2), ARect.Top, ARect.Right, ARect.Bottom );
  GradientFillCanvas(Sender.Canvas, panelemo.Color, clWhite, R, gdVertical);
  panelmeter.Color := panelemo.Color;
我想画从右到左的渐变,而不是像这样从上到下


不清楚你到底想要什么,因为你说的和你展示的不同

无论如何,
gdHorizontal
表示颜色从左到右水平从
StartColor
更改为
EndColor
。在您的图像中,就好像您将指定白色作为开始颜色,而turqoise作为结束颜色一样。如果要更改水平方向(从右向左),则需要交换颜色

使用水平代码的示例:

GradientFillCanvas(ListView1.Canvas, AColor, clWhite, R, gdHorizontal);
GradientFillCanvas(ListView1.Canvas, AColor, clWhite, R, gdVertical);

gdVertical
表示颜色从上到下垂直变化。如果要更改垂直方向(从下到上),则需要交换颜色

垂直使用代码的示例:

GradientFillCanvas(ListView1.Canvas, AColor, clWhite, R, gdHorizontal);
GradientFillCanvas(ListView1.Canvas, AColor, clWhite, R, gdVertical);


我想您提到的切片结果是由这样一个事实造成的,即您通过对
GradientFillCanvas()
的两次调用为
TRect
的每一半绘制一次渐变→
gdHorizontal
我在对背景进行切片之前就这样做了是的,因为你只需要绘制一个渐变(从开始颜色到结束颜色),而不是两个渐变,不是吗?我猜您正在寻找这行代码
GradientFillCanvas(Sender.Canvas、panelemo.Color、clWhite、ARect、gdHorizontal)。但我放弃了你的问题。似乎只有我无法理解它们(因为人们正在投票支持它们)。我可能可以画gdhorizontal并将rect设置为相同的左和右,但我的问题是如何准确地绘制图像中的平滑渐变,我可以绘制gdHorizontal,但它看起来是从中心切片的,而不是图像中的平滑。那么,使用
gdHorizontal
时,“切片”渐变是什么样子的?如果在draw
SetRect的listview中更改后测试此代码,我的原始代码将从上到下显示(R,ARect.Left,ARect.Top,ARect.Right-((ARect.Right ARect.Left)div 2),ARect.Bottom);GradientFillCanvas(Sender.Canvas,panelemo.Color,clWhite,R,gdHorizontal);//GraphUtil SetRect(R,ARect.Left-((ARect.Right ARect.Left)div 2),ARect.Top,ARect.Left,ARect.Bottom);GradientFillCanvas(Sender.Canvas,panelemo.Color,clWhite,R,gdHorizontal);
查看结果如何向上显示,示例显示+1,但在我的代码中你看不到它的样子test@DelphiStudent再次阅读我的最后一段。我不需要测试就知道你的listview被一分为二,每个都有自己的渐变,IOW是“切片的”正如你所说。但是为什么你要专注于你不想要的东西呢?不要把rect一分为二!只使用一个对GradientFillCanvas的调用!