- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用:Delphi XE2、VCL 32位应用程序、Windows 8
我正在尝试将框架的背景绘制到面板上(我正在使用 TJvPanel,因为它公开了 OnPaint 事件),该面板是框架的子控件。
阅读后this post并添加 Canvas 作为字段,我仍然没有成功。
调用 ShowAddReceiptPanel 后,它应该在经过 ProEffectImage 方法处理后,在前景面板上绘制框架 (TfrmMyFrame) 窗口内容及其上已有的所有控件(包括网格和页面控件),并进行灰度化,但改为它显示不透明的白色背景。我错过了什么吗?
这是我的代码:
type
TfrmMyFrame = class(TFrame)
pnlHdr: TPanel;
pnlAddNewBG: TJvPanel;
procedure pnlAddNewBGPaint(Sender: TObject);
private
{ Private declarations }
FBGImg: TProEffectImage;
Fcnvs: TCanvas;
procedure PaintWindow(DC: HDC); override;
procedure ShowAddReceiptPanel;
procedure HideAddReceiptPanel;
procedure ResizePanel_pnlAddNewBG;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
constructor TfrmMyFrame.Create(AOwner: TComponent);
begin
inherited;
FBGImg := TProEffectImage.Create(nil);
Fcnvs := TCanvas.Create;
end;
destructor TfrmMyFrame.Destroy;
begin
if Assigned(FBGImg) then
FBGImg.Free;
if Assigned(Fcnvs) then
Fcnvs.Free;
inherited;
end;
procedure TfrmMyFrame.ShowAddReceiptPanel;
begin
ResizePanel_pnlAddNewBG;
pnlAddNewBG.Visible := True;
end;
procedure TfrmMyFrame.PaintWindow(DC: HDC);
begin
inherited;
Fcnvs.Handle := DC;
end;
procedure TfrmMyFrame.pnlAddNewBGPaint(Sender: TObject);
var
l, t, w, h: Integer;
srct, drct: TRect;
begin
// Copy Frame canvas to BGImg bitmap
l := 0;
t := pnlHdr.Height;
w := ClientWidth;
h := ClientHeight - t;
srct := TRect.Create(l, t, w, h);
FBGImg.Width := w;
FBGImg.Height := h;
drct := TRect.Create(l, t, w, h);
FBGImg.Canvas.CopyMode := cmSrcCopy;
FBGImg.Canvas.CopyRect(drct, Fcnvs, srct);
// FBGImg.Picture.SaveToFile('c:\tmp\a.bmp');
FBGImg.Effect_AntiAlias;
FBGImg.Effect_GrayScale;
// Draw BGImg onto Option panel
TJvPanel(Sender).Canvas.CopyMode := cmSrcCopy;
TJvPanel(Sender).Canvas.Draw(0, 0, FBGImg.Picture.Graphic);
end;
procedure TfrmMyFrame.ResizePanel_pnlAddNewBG;
var
x1, y1, x2, y2: Integer;
bmp: TBitmap;
begin
x1 := 0;
y1 := pnlHdr.Height;
x2 := ClientWidth;
y2 := ClientHeight - y1;
pnlAddNewBG.SetBounds(x1, y1, x2, y2);
end;
最佳答案
分配给 Canvas 句柄的 DC 仅在 PaintWindow 调用期间有效。当它无效时,您可以在该函数之外使用它,从而导致您观察到的行为。
我认为您应该可以通过调用PaintTo来解决您的问题方法。创建正确大小的位图并将其 Canvas 传递给 PaintTo。
关于delphi - 如何访问TFrame的 Canvas ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15831932/
为了避免单例和全局变量,我希望能够将参数传递给 TFrame 组件。然而,由于 TFrame 通常在设计时包含在表单中,因此只能使用默认构造函数。 创建 TFrame 后,父窗体当然可以在 OnCre
我有一个 TForm (TVehicleEditForm),里面有 3 个相同的 TFrame (TVehicleUnitFrame)。 这个想法是框架的每个实例都通过框架内的事件处理程序处理自己的事
是否可以创建运行时框架并添加现有面板,例如将面板的父级设置为框架?添加后,复制框架并使用它? 喜欢: f:= Tframe. create(..) ... panel3.parent = f; //w
我正在使用 C++ Builder 创建 VCL 表单应用程序。现在我有一个包含一堆组件的 TFrame,它看起来像这样...... 我还有一个名为“添加”的按钮。基本上每次我按下窗体上的那个添加按钮
我很难让 Delphi 2006 将事件处理程序分配给 TFrame 上独立的组件。 假设我有一个框架TComboFrame包含 TCombo Combo1我在我的主要表单的几个地方使用它。 当我放置
我使用以下代码创建了一个以 TFrame 作为祖先的组件: type TCHAdvFrame = class(TFrame) private { Private declaration
如何在主 TForm 上创建(当我想显示它时)和销毁(当我想隐藏它时)框架?框架的align = alClient。 我尝试过这个: 形式: unit main; interface uses W
我有一个包含 TFrame 的表单。 TFrame 包含一个动态填充的ComboBox。每个ComboBox 条目都有一个关联的对象。当调用 TFrame 的重写析构函数时,ComboBox 中的项目
我有一个包含很多框架的项目,当我重新加载项目时,它们的宽度和高度会调整为 443x270 或左右。 我确实在运行时驻留这些框架,但我希望它们在设计时创建它们时保留下来。 我使用非嵌入式、经典的未停靠
我想制作一个基于 TFrame 的组件,其中包含 TLMDShapeControl (用于绘制圆角背景)和 TEdit 控件(可以也可以是 TComboBox 或 TDBEdit 等等)。之后,我将使
我创建了一个新框架,我想将其注册为组件。我已经从 this question 了解了 RegisterSprigType ,所以它省去了我一些麻烦。 RegisterSprigType 可以正确防止设
Delphi 对象检查器按设计不显示 TFrame 后代的附加属性。人们倾向于建议使用一种已知的技巧,该技巧通常用于在对象检查器上显示 TForm 后代的属性。技巧是:通过设计时包将 TForm 后代
我已将 TFrame 的后代类注册为组件,并且我注意到 Loaded 过程执行了两次: 运行时: TMyFrame = class(TFrame) private protected
我需要intercept the WM_PASTE message对于放置在 TFrame 的后代类中的 TEdit 组件。 如果不满足条件,我想启动粘贴操作。 有没有办法在帧级别做到这一点? (我的
我有一个带有嵌入式 TFrame 的表单,以及一些具有关联属性的组件(在父表单和框架中)。我可以使用以下方法访问父表单组件属性: for field in ctx.GetType(frm.ClassI
首先,简单介绍一下我,我是 GUI 编程的新手,尤其是 C++ Builder。我有一个包含一行单元格的 tframe,就像上图一样。有一个 + 按钮,当按下时,一个单元格只会添加到最后一列,如图所示
我创建了一个带有视觉和数据库控件的 Tframe 单元。我使用 sprig 方法将框架注册为组件。 TFrame 有一些已发布的 bool 属性。 一切正常,除了我注意到如果我启动 IDE 并打开一个
我有一个疑问。我在 firemonkey 中创建了一个框架并添加了 2 个按钮,然后在 MainForm 中添加了这个框架。 Frame.Align = Scale 在MainForm中对象Frame
我在 Delphi 7 中遇到框架和继承问题。 假设我使用 visible=false 定义一个框架(在设计时)。现在,我将此框架嵌入到某个表单中,并在表单内的框架的嵌入实例上设置 visible=t
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我是一名优秀的程序员,十分优秀!