- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试简单的事情。但我不能 :(
我有一个 TImage,它的名称是概述。
我想绘制一个位于概览但独立于概览的矩形。所以我在概述的前面添加了一个 TImage 并绘制了一个矩形。矩形有效,但我只能看到 TImage 或概述。我试图给 rectImg 一个透明度,但 rectImg 完全消失了。
with rectImg.Canvas do
begin
Pen.Color:= clRed;
Rectangle(0, 0, rectImg.Width, rectImg.Height);
end;
最佳答案
如果我正确理解您的问题,您实际上希望在视觉上构图图像而不在原始图形本身上绘制框架,即 rectImg.Picture
不应返回带框的图形。立即想到两种方法:
a) 转储 TImage
并使用 TPaintBox
,手动维护核心图形并通过方法调用而不是组件上的属性设置进行任何拉伸(stretch)或任何操作。
b) 扩展TImage
有一个OnPaint
在 TImage
之后引发的事件已经完成了标准的绘画。
关于 (b),您可以将其作为插入器类或自定义组件来执行。作为插入器类,您可以这样做:
1) 重新声明TImage
就在您的表单类上方:
type
TPaintEvent = procedure (Sender: TObject; Canvas: TCanvas) of object;
TImage = class(Vcl.ExtCtrls.TImage) //use class(ExtCtrls.TImage) if pre-XE2
strict private
FOnPaint: TPaintEvent;
protected
procedure Paint; override;
published
property OnPaint: TPaintEvent read FOnPaint write FOnPaint;
end;
TMyForm = class(TForm)
//...
Paint
像这样覆盖(有点繁琐,因为
TImage
重新定义了基类的
Canvas
属性):
type
TGraphicControlAccess = class(TGraphicControl);
procedure TImage.Paint;
begin
inherited;
if Assigned(FOnPaint) then
FOnPaint(Self, TGraphicControlAccess(Self).Canvas);
end;
procedure rectImgPaint(Sender: TObject; Canvas: TCanvas);
Brush.Style
至
bsClear
不创建填充矩形:
procedure TMyForm.rectImgPaint(Sender: TObject; Canvas: TCanvas);
begin
Canvas.Brush.Style := bsClear;
Canvas.Pen.Color := clRed;
Canvas.Rectangle(0, 0, rectImg.Width, rectImg.Height);
end;
OnCreate
中分配事件处理程序事件:
procedure TMyForm.ImagePaint.FormCreate(Sender: TObject);
begin
rectImg.OnPaint := rectImgPaint;
end;
TImage
提供OnPaint
事件作为标准。 TImage
与 TShape
,设置形状的Brush.Style
属性(property)给 bsClear
就像我们在编码解决方案中所做的那样。在这种情况下,设置形状的 Enabled
属性(property)给 False
如果您有任何OnClick
或 OnMouseXXX
分配给图像的处理程序。 关于delphi - 动态 TRect 绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28024734/
我希望我在某种程度上感到困惑。我遇到一些与 TRect.Intersect 和 TRect.IntersectsWith 不一致的行为。这是一些演示该问题的代码。 program RectCheck;
我正在尝试简单的事情。但我不能 :( 我有一个 TImage,它的名称是概述。 我想绘制一个位于概览但独立于概览的矩形。所以我在概述的前面添加了一个 TImage 并绘制了一个矩形。矩形有效,但我只能
我正在将代码从 Delphi 7 迁移到图形模块之一的 XE2。 我们正在使用 TRect变量,旧代码在 Delphi 7 中运行没有问题 前任: Var Beold : TRect begin
我正在阅读 3-d 方 Delphi 源代码并卡在一行中,其中 Rect 用另一个 Rect 的坐标初始化,但交换了,如下所示: r, rsrc: TRect; ... r := Rect(rsrc.
我是一名优秀的程序员,十分优秀!