Delphi FireMonkey TMemo 修改背景颜色和边框颜色

如题,有两种办法(如果还有其它办法,我现在不知道)。

办法一:设计期对它的 style 进行修改编辑。大概意思就是改它的 style 里面的图片或者其它什么鬼。

办法二:运行期用代码实现。

先看代码,在 D10.4.2 测试通过:

procedure TForm1.Memo1ApplyStyleLookup(Sender: TObject);
var
  Obj: TFmxObject;
    Rectangle1: TRectangle;
begin
  Obj := Memo1.FindStyleResource('background');
  if Obj <> nil then
  begin
    TControl(Obj).Margins   := TBounds.Create(TRectF.Create(0, 0, 0, 0));
    TControl(Obj).Padding := TBounds.Create(TRectF.Create(-8, -8, -8, -8)); //把边框覆盖了
    Rectangle1              := TRectangle.Create(Obj);
    Obj.AddObject(Rectangle1);
    Rectangle1.Align        := TAlignLayout.Client;
    Rectangle1.Fill.Color   := claCornsilk;
    Rectangle1.Stroke.Color := claNull;
    Rectangle1.HitTest      := False;
    Rectangle1.SendToBack;
  end;
end;

代码解释

1. Memo1 的事件列表里面,有一个事件叫做 ApplyStyleLookup。在这个事件里面写程序。

2. 找到它的 background 的这个对象,在上面叠加一个自己创建的 TRectangle 对象。

3. TRectangle 对象的颜色和边框颜色都是可以用代码修改的。

4. 因为我的目的是不显示边框,因此,我设置:

4.1. TRectangle 对象的边框颜色为 claNull 也就是没颜色;当然设置为颜色和背景色相同,也是看不到的,等于没有边框;

4.2. 要覆盖掉 Memo 自己的边框,必须让这个 Rectangle 面积比 Memo 更大,因此需要设置 Memo 的 background 这个对象的 Padding 值,都是负数。

4.3. Padding 的意义:一个对象的 Padding 值一般是正数,表示这个对象上面摆放的对象在充满的时候(Align 属性是 Client),其边框和下面这个对象的边框之间的距离。也就是说,Padding 这个数字是针对容器的,它决定了容器内部的对象距离容器边框的距离。

4.4. 另外一个值:Margins ,是针对容器内的一个对象的,它决定了这个对象和容器边框的距离。

结论:

改变 TMemo 的背景色和边框颜色,就是在它的 Style 的背景对象上面,用代码创建一个 TRectangle 覆盖上去,适当修改这个 Rectangle 的颜色和边框颜色,以及它的边框和 TMemo 原本的边框的距离。如果要让边框有颜色,只要设置这个 Rectangle 的边框颜色就好了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值