delphi - 如何获取带有组合框的面板图像

标签 delphi delphi-xe image-capture

我需要捕获面板的图像。

我遇到的问题是,如果面板包含 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 两个它。然后我添加一个按钮来调用上面的 代码。

结果如下:

Imaging of Panel Painting Problem

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

最佳答案

使用 GetDC 怎么样?和BitBlt功能?

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;

关于delphi - 如何获取带有组合框的面板图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8828360/

相关文章:

delphi - 如何让TVirtualStringTree在禁用状态下显示图标?

delphi - 如何识别 Delphi 程序中的命令行参数?

delphi - delphi中如何检查注册表访问权限?

.net - 如何从 .Net 世界中的网站捕获相机图像?

delphi - Delphi ITE:什么时候可以更改资源ID?

arrays - 如何使数组不同

delphi - 如何将 list <requestedPrivileges>信息添加到delphi项目中

delphi - 使用Delphi windows api获取文件信息

相机中的 OpenCV 捕获会产生类似噪声的图像

linux - Linux 上的视频捕获?