如题,有两种办法(如果还有其它办法,我现在不知道)。
办法一:设计期对它的 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 的边框颜色就好了。