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

DelphiXE使用皮肤风格下自行控制控件颜色的设置方法 有时候在DelphiXE开发中,使用系统提供的皮肤控件非常漂亮的改变程序皮肤的风格,很方便,但是也带来问题,统一的风格下,我们不能动态的更改控件的颜色或者背景等,但是我们需要及时的或者动态的改变某些控件的显示方法来适应客户的需求。因此需要通过一下设置进行更改。 选中需要更改颜色或者其他属性的控件,修改StyleElements属性的三个方法,为false,然后在程序中可以自由修改控件 的属性和颜色了。 ... 阅读详情

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

办法一:设计期对它的 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 的边框颜色就好了。

Delphi 动态设置Memo控件边框的大小源代码.rar Delphi 动态设置Memo控件边框的大小源代码,改变Memo组件的边框空隙,程序通过获取Memo1的矩形边界,更改Rect边界值,重绘Memo1的矩形边界。其效果类似CSS中的Padding,也就是区块边缘与正文边距之间的空隙。本代码可动态改变左边距和上边距中的Padding大小,你可以亲自操作一下试试效果。 立即下载

相关推荐

动态设置Memo控件边框的大小,Delphi代码..rar

动态设置Memo控件边框的大小,Delphi代码..rar

Delphi 如何调出字体对话框

withTFontDialog.Create(nil)do begin Font:=Memo1.Font; Options:=[fdApplyButton]-[fdEffects]; ifExecute()then Memo1.Font:=Font; end; 原文:https://zhidao.baidu.c...

weixin_30765319的博客 363

告别老旧内核!手把手教你为Android 10设备手动更新WebView(以升级至97版为例)

本文详细指导如何在Android 10设备上手动更新WebView至97版,解决老旧内核导致的兼容性、性能和安全问题。通过ADB命令和图形化操作两种方案,无需Root即可完成升级,显著提升网页加载速度和安全性。

weixin_28672681的博客 582

改变 TMemo 的背景颜色 (Firemonkey)

说明:展示使用程序码改变 Firemonkey TMemo 的背景颜色。 适用:XE6 源码下载:[原創]Memo改背景色_XE6.zip //------------------------------------------------------------------------------ // by [龟山]阿卍 QQ:1467948783 // http://www.c...

weixin_30919429的博客 540

Ubuntu22.04下ROS2与PX4仿真环境搭建全流程解析

本文详细解析了在Ubuntu22.04系统下搭建ROS2与PX4仿真环境的全流程,包括系统准备、ROS2 Humble安装、PX4飞控环境部署、ROS2与PX4通信桥梁搭建等关键步骤。针对常见问题提供了解决方案,并分享了性能优化和开发调试技巧,帮助开发者快速构建无人机仿真开发环境。

weixin_29248653的博客 607

NCCL分布式训练中ibv_reg_mr_iova2内存分配失败的3种解决方案(附详细排查流程)

本文深入探讨了NCCL分布式训练中ibv_reg_mr_iova2内存分配失败的3种解决方案,包括快速临时修复、标准系统配置和PAM模块根治方案。详细分析了错误原因,提供了完整的排查流程和性能优化建议,帮助开发者高效解决RDMA网络环境下的内存锁定问题。

nut55的博客 625

任意改变FMX的TPanel控件的颜色

FMX的控件的外观以Style为主,但是也有不方便的地方,比如要任意改变TPanel的颜色,只能写代码,摸索了几天,初步实现了 unit FMX.JKPanelEx; interface uses System.SysUtils, System.Classes, System.Types, System.UITypes, FMX.Types, FMX.Controls, FMX.Ob

舞天涯的专栏 3626

如何实现SOLIDWORKS阵列的“智能变更”?

有时,我们在设计一个零件时,零件上有一排阵列孔,同时零件有不同的长度,我们又希望可以做到零件长度改变时,这排孔可以按长度等距增减孔阵列的个数;或是零件长度加长或缩短时,这排孔保持个数不变,按零件长度增减孔距。 那具体要怎么做呢?接下来,我们一起来看看怎么用SOLIDWORKS中简单的操作来实现这两种智能的变更: 零件长度加长或缩短时,这排孔要按长度等距增减孔阵列的个数。 零件长度加长或缩短时,这排孔保持个数不变,按零件长度增减孔距。 那接下来,我们一起来看看怎么用简单的操作来实现这两种智能的

SOLIDWORKS艾金米 2077

delphi的提示hint修改底框颜色或者字体颜色

delphi的hint提示默认底色是黄色的有时和程序不搭,需要修改一下底框颜色 在create事件中增加以下语句,可以将提示框变为白底黑字 Application.HintColor := clWhite; Screen.HintFont.Color := $00000000; Screen.HintFont.Size := 10; ...

wynwwj的博客 668

基于eBPF的零侵入LLM智能体观测:AgentSight架构与实战

在分布式系统和云原生架构中,可观测性是保障应用稳定运行与高效排障的核心能力。其原理在于通过日志、指标和追踪三大支柱,从外部视角持续收集和分析系统状态,而非依赖应用内部埋点。这一技术价值在于能以统一、低开销的方式,理解复杂系统的内部行为,尤其在微服务、容器化及Serverless等动态环境中至关重要。应用场景广泛覆盖了性能监控、安全审计、故障诊断与根因分析。当我们将这一基础理念应用于当下快速发展的AI智能体领域时,便自然引出了对LLM智能体进行无侵入、系统级行为观测的需求。传统的应用层方案需要集成SDK,对闭

weixin_28696185的博客 324

DCM4CHEE Archive Light 应用配置-存储配置

本文介绍了在DICOM归档系统中配置和管理存储的方法,包括通过用户界面和LDAP导入两种方式。主要内容包括: 存储配置概述:用户可根据需求配置单个或多个存储设备,支持在磁盘空间不足或多任务并行时使用。存储分为Archive设备级(序列元数据存储)和Application Entity级(对象存储/元数据存储)。 用户界面操作: 设备级存储配置:通过菜单导航添加/编辑存储描述符,设置Storage ID、URI等关键参数 应用级存储引用:在设备扩展和网络AE中分别配置元数据和对象存储引用 LDAP配置方法:

洪城叮当的博客 1416

在应用了皮肤的程序中制作透明的文本编辑控件(如:TcxMemo)

我要在程序中显示一段信息,因为需要让文字的背景透明,我首先使用静态文本控件来实现 遇到需要进行编辑的时候,静态文本控件就不能满足要求了,这就使我想到了可不可以制作一个透明的文本编辑控件 首先上网查了一下,发现有一个方法比较可行,就是将控件的border设置为none,然后将背景色设置为窗口的背景色 首先设置背景颜色:cxmemo1.Style.Color := Form1.Color; 在...

weixin_30872671的博客 312

Zenoh:统一数据平面协议,重塑物联网与边缘计算架构

在分布式系统与物联网领域,数据通信与处理常面临协议割裂的挑战。传统方案如MQTT、Kafka、gRPC等,分别针对发布/订阅、流处理和RPC等不同场景,导致架构复杂、集成成本高。其核心问题在于未能统一处理“运动中数据”(Data in Motion)与“静止中数据”(Data at Rest)。Zenoh协议通过创新的“Key-Value”寻址与“Selector”查询语言,将发布/订阅、存储、查询和计算四种核心操作融合进单一协议,构建了统一的抽象层。这种设计实现了极低的协议开销(仅5字节头部)和地理分布式

weixin_29597551的博客 290

delphi label 背景颜色设置!

需要写一个动态霓虹灯程序,主要结构和程序如下: 创建VCL工程,控件中直接选取一个label 和 一个Timer控件。 由于不需要框架,所以直接设置Form属性中BorderStyle :=  bsNone;取消边框。 双击创建timer对应相应:Timer1Timer,这里可以设置他的间隔调用时间。 在里面直接设置Form和Label 。 font的AutoSize := Tru

思想的可见性 6274

【Autosar COM】Marvell 88Q5050 以太网交换机驱动技术解析

本驱动实现了对Marvell 88Q5050交换机的全面控制,通过模块化设计满足AUTOSAR规范要求。增加DMA加速机制提升大数据量处理性能实现TSN(时间敏感网络)特性支持引入异步通知机制替代轮询操作增强安全特性,如MACsec支持该驱动架构为车载以太网交换机控制提供了可靠基础,其设计思想可推广到其他车载网络控制器开发中。随着车载网络技术的演进,驱动需持续迭代以支持新特性与更高通信速率需求。

1450

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

swt代码调用按钮鼠标点击事件_「B格满满」简单几行代码,教你在WinCC中“操纵”对象的背景颜色...

内部函数的"graphics"组中的函数用于查询和修改对象的各种属性。"graphics"组中包含了功能各异的函数,以满足用户不同的需求。一、"color"组本文介绍两个较为常用的函数:"GetBackColor"和"SetBackColor",分别用于获得和修改画面对象的背景颜色。1、"GetBackColor"函数"GetBackColor"用于返回指定对象的背景颜色。如果要返回整幅画面的"背...

weixin_39882271的博客 672

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Delphi FMX Grid列头样式设定

procedure TForm1.StringGrid1ApplyStyleLookup(Sender: TObject); var Header: THeader; HeaderItem: THeaderItem; I: Integer; begin Header := THeader((Sender as TStringGrid).FindStyleResource('head

秋水的专栏 2057

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

动态设置Edit控件的背景及字体颜色

1.新建一个基于对话框的应用程序,在对话框上添加一个Edit控件和三个Radio控件 2.修改Radio控件的ID分别为:IDC_RAD_RED、IDC_RAD_GREED、IDC_RAD_BLUE,名称对应修改为red、green、blue 3.向对话框对应的类中添加如下成

创造神话,实现梦想! 1万+

FireMonkey 的菜单条的汉化,以及多语言

TEdit 和 TMemo 在界面上,运行期,鼠标右键点下去,会出来一个弹出式下拉菜单,里面的内容是: Cut Copy Paste Delete SelectAll 都是文本操作的常用功能。 问题是,它是英文的。有人问,改成中文怎么办。有人回答,直找到FMX.Consts.pas 去修改里面的常量定义。这个办法我没测试过,但多半有效。问题是,这样直接修改 Delphi 的源代码也点简单粗暴,而且也不支持多语言。假设你做的程序,需要支持多语言怎么办? FMX 本身支持多语言。TLabel, TB.

pcplayer的博客 1072

Delphi XE2 之 FireMonkey 入门(17) - 特效

刚打开 XE2 时, 就从 Tool Palette 窗口的 Effects 组中发现洋洋洒洒的六十多个特效... 每个特效分别对应一个类, 分别来自 FMX.Effects 和 FMX.Filter.Effects 单元. FMX.Effects 中的特效属于附加特效, FMX.Filter.Effects 中的特效只是某种滤镜效果; 它们都是滤镜的一种快捷应用. 每个特效有不...

weixin_34191845的博客 362

设置源码编辑窗口的颜色

默认情况下,源代码编辑窗口的背景色是白色,代码文本颜色是黑色。更改方法是在主界面菜单上选择“工具”|“选项”,打开“选项”对话框,在左边展开“环境”,在展开的项目的末尾找到并选中“字体和颜色”,接着在右边显示项中选择“纯文本”,在旁边通过设置“项前景”和“项背景”来设置源代码编辑窗口的前景色和背景色,如图所示。 ...

LV_ZengMengyao的博客 1632

用Delphi实现自定义颜色对话框及其构件

发布时间:2008-04-02 17:11:04  来源:编程爱好者网站  作者:编程爱好者网站  点击:298   在 开 发 证 券 分 析 软 件 中, 经 常 要 绘 制 各 种 股 票 的 分 析 曲 线。 为 了 使 得 软  件 的 功 能 更 加 方 便. 灵 活, 用 户 希 望 能 够 按 照 自 己 的 喜 好 自 定 义 各 种 曲 线 的  颜 色。 在 W O...

weixin_34106122的博客 270
上一篇: Skia4Dephi 的 Demo 程序界面架构分析
下一篇: FireMonkey 做界面的一个小技巧
pcplayer
博客等级 码龄26年 633粉丝 284原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值