6

我需要捕获面板的图像。

我遇到的问题是,如果面板包含 TCombobox,则不会出现文本。

procedure AssignPanelImageToPicture(Panel : TPanel;Image : TImage);
var
 B : TBitmap;
begin
 B := TBitmap.Create;
 try
   B.Width := Panel.Width;
   B.Height := Panel.Height;
   B.Canvas.Lock;
   Panel.PaintTo(B.Canvas.Handle,0,0);
   B.Canvas.Unlock;
   Image1.Picture.Assign(B);
  finally
    B.Free;
  end;
end;

使用此代码,我放置了一个带有 TCombobox 的面板。然后在文本属性中输入一个值。我也放一个TImage Next 两个吧。然后我添加一个按钮来调用上面的代码。

结果如下:

面板绘画问题的成像

有没有更好的方法来捕捉面板的真实图像。

4

1 回答 1

11

使用GetDCandBitBlt函数怎么样?

procedure AssignPanelImageToPicture(Panel : TPanel;Image : TImage);
var
 B : TBitmap;
 SrcDC: HDC;
begin
 B := TBitmap.Create;
 try
   B.Width := Panel.Width;
   B.Height := Panel.Height;
   SrcDC := GetDC(Panel.Handle);
   try
     BitBlt(B.Canvas.Handle, 0, 0, Panel.ClientWidth, Panel.ClientHeight, SrcDC, 0, 0, SRCCOPY);
   finally
      ReleaseDC(Panel.Handle, SrcDC);
   end;
   Image.Picture.Assign(B);
 finally
    B.Free;
  end;
end;
于 2012-01-11T23:57:18.323 回答