加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何使TFrame与圆角?

发布时间:2020-12-15 04:32:10 所属栏目:大数据 来源:网络整理
导读:我想使用TLMDShapeControl(用于绘制圆角背景)和TEdit控件(也可以是TComboBox或TDBEdit等)的TFrame组件. 之后,我将使用“添加到调色板”命令将其转换为可重用组件控件. 问题在于我需要它的宽度灵活性,因为我有想法将Frame alClient和TEdit中的所有内容转换为5
我想使用TLMDShapeControl(用于绘制圆角背景)和TEdit控件(也可以是TComboBox或TDBEdit等)的TFrame组件.
之后,我将使用“添加到调色板”命令将其转换为可重用组件控件.

问题在于我需要它的宽度灵活性,因为我有想法将Frame alClient和TEdit中的所有内容转换为5像素边距,以便用户可以看到圆角.

这是可怕的,因为我不能使用对齐并将组件设置在另一个顶部.现在我必须在每次使用它时复制和粘贴组件! : – (((

我唯一看到正确的方法是只使用带有alClient和5px边距的TEdit,没有TShape.相反,我可以使TFrame成为透明度的圆角,所以它不会看起来丑陋的不同的颜色或TImage.

但是我该如何做呢?

有人有任何代码示例吗?

解决方法

为了回答你的问题如何使圆角的框架可以尝试这样的事情,但是你会对结果不满意,因为这里使用的 CreateRoundRectRgn没有抗锯齿.
type
  TFrame1 = class(TFrame)
    Edit1: TEdit;
    Button1: TButton;
  protected
    procedure SetBounds(ALeft,ATop,AWidth,AHeight: Integer); override;
  end;

implementation

procedure TFrame1.SetBounds(ALeft,AHeight: Integer);
var
  Region: HRGN;
begin
  inherited;
  Region := CreateRoundRectRgn(0,ClientWidth,ClientHeight,30,30);
  SetWindowRgn(Handle,Region,True);
end;

更新:

由于GDI没有任何支持反渲染的功能,所以我在这里张贴了一个使用GDI的圆形矩形(只是一个纯圆填充的圆形矩形)的例子(因为这将需要GDI包装器from here).

以下属性对于其使用很重要:

>颜色 – 是形状填充颜色(可以增强笔颜色,梯度等)
>半径 – 是用于绘制圆角的圆的??半径(以像素为单位)
> AlphaValue – 是渲染的圆矩形的不透明度值(只是为了fun

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读