Delphi 我想画两个与Windows.FillRect重叠的矩形

Delphi 我想画两个与Windows.FillRect重叠的矩形,delphi,delphi-xe2,Delphi,Delphi Xe2,我想画两个互相叠加的矩形。其中一个我希望它的尺寸(a)比另一个(B)小,这样我就可以看到后面的那个(B) 您的颜色颠倒了(绘制顺序错误),您的gridCellRect.Left和gridCellRect.Right太窄(8像素),根本不需要调用SetBkMode 此外,gridCellRect-5中有一个错误(它甚至不会编译),并且您从未尝试绘制到gridCellRect1中定义的矩形,即使它这样做了。(对FillRect的第二次调用使用gridCellRect而不是gridCellRect1

我想画两个互相叠加的矩形。其中一个我希望它的尺寸(a)比另一个(B)小,这样我就可以看到后面的那个(B)


您的颜色颠倒了(绘制顺序错误),您的
gridCellRect.Left
gridCellRect.Right
太窄(8像素),根本不需要调用
SetBkMode

此外,
gridCellRect-5
中有一个错误(它甚至不会编译),并且您从未尝试绘制到
gridCellRect1
中定义的矩形,即使它这样做了。(对
FillRect
的第二次调用使用
gridCellRect
而不是
gridCellRect1

下面是一个正确的代码版本,可以帮助您开始:

procedure DrawRectangle(drawDC:HDC;cellBrush:TBrush);
var
  gridCellRect, gridCellRect1  :Trect ;
begin
  gridCellRect.Top := 75;
  gridCellRect.Bottom := 150;
  gridCellRect.Left  := 125;    // Changed left and right to widen
  gridCellRect.right := 200;
  cellBrush.color := clBlack;
  Windows.FillRect(DrawDC, gridCellRect, cellBrush.Handle);

  gridCellRect1 := gridCellRect;
  gridCellRect1.Top := gridCellRect.Top + 5;
  gridCellRect1.Bottom := gridCellRect.Bottom - 5;
  cellBrush.color := clAqua;
  Windows.FillRect(DrawDC, gridCellRect1, cellBrush.Handle);
end;
测试

procedure TForm1.FormPaint(Sender: TObject);
begin
  DrawRectangle(Canvas.Handle, Canvas.Brush);
end;

你真正的问题是什么?你已经知道如何画矩形了。只需画黑色的,然后收缩+偏移矩形,然后画蓝色的。有什么问题?
procedure TForm1.FormPaint(Sender: TObject);
begin
  DrawRectangle(Canvas.Handle, Canvas.Brush);
end;