如何使用组合框获取面板的图像

Rob*_*ove 5 delphi image-capture delphi-xe

我需要捕捉面板的图像.

我遇到的问题是,如果Panel包含TCombobox,则不会出现Text.

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;
Run Code Online (Sandbox Code Playgroud)

使用此代码,我放下一个带有TCombobox的面板.然后在Text Property中输入一个值.我也放了一个TImage接下来的两个.然后我添加一个按钮来调用上面的代码.

结果如下:

面板绘画问题的成像

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

RRU*_*RUZ 11

使用GetDCBitBlt功能怎么样?

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;
Run Code Online (Sandbox Code Playgroud)