任意改变FMX的TPanel控件的颜色
来源:互联网 发布:阿里云域名解析端口号 编辑:程序博客网 时间:2024/05/22 13:17
FMX的控件的外观以Style为主,但是也有不方便的地方,比如要任意改变TPanel的颜色,只能写代码,摸索了几天,初步实现了
unit FMX.JKPanelEx;interfaceuses System.SysUtils, System.Classes, System.Types, System.UITypes, FMX.Types, FMX.Controls, FMX.Objects, FMX.Graphics, FMX.Controls.Presentation, FMX.StdCtrls;type TAppearanceUpdateKind = (None, Fill, Stroke, CornerSize); TJKPanelEx = class(TPanel) private FAppearance: TRectangle; FFill: TBrush; FStroke: TStrokeBrush; FCornerSize: Single; FAppearanceUpdateKind: TAppearanceUpdateKind; procedure SetFill(const Value: TBrush); procedure SetStroke(const Value: TStrokeBrush); procedure SetCornerSize(const Value: Single); protected procedure ApplyStyle; override; procedure FreeStyle; override; procedure FillChanged(Sender: TObject); virtual; procedure StrokeChanged(Sender: TObject); virtual; procedure UpdateAppearanceFill; procedure UpdateAppearanceStroke; procedure UpdateAppearanceCornerSize; procedure UpdateAppearance; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; property Appearance: TRectangle read FAppearance write FAppearance; published property Fill: TBrush read FFill write SetFill; property Stroke: TStrokeBrush read FStroke write SetStroke; property CornerSize: Single read FCornerSize write SetCornerSize; end;procedure Register;implementationprocedure Register;begin RegisterComponents('JKFMXControl', [TJKPanelEx]);end;{ TJKPanelEx }procedure TJKPanelEx.ApplyStyle;begin inherited; if not Assigned(FAppearance) then begin if not FindStyleResource<TRectangle>('Background', FAppearance) and (ResourceControl is TRectangle) then FAppearance := TRectangle(ResourceControl); UpdateAppearanceCornerSize; UpdateAppearanceFill; UpdateAppearanceStroke; end else begin UpdateAppearance; end;end;constructor TJKPanelEx.Create(AOwner: TComponent);begin inherited; FAppearance := nil; FAppearanceUpdateKind := TAppearanceUpdateKind.None; FFill := TBrush.Create(TBrushKind.Solid, TAlphaColor($FFE0E0E0)); FStroke := TStrokeBrush.Create(TBrushKind.Solid, TAlphaColors.Black); FFill.OnChanged := FillChanged; FStroke.OnChanged := StrokeChanged;end;destructor TJKPanelEx.Destroy;begin FreeAndNil(FFill); FreeAndNil(FStroke); inherited;end;procedure TJKPanelEx.FillChanged(Sender: TObject);begin FAppearanceUpdateKind := TAppearanceUpdateKind.Fill; ApplyStyle;end;procedure TJKPanelEx.FreeStyle;begin inherited; FAppearance := nil;end;procedure TJKPanelEx.SetCornerSize(const Value: Single);begin if FCornerSize <> Value then begin FAppearanceUpdateKind := TAppearanceUpdateKind.CornerSize; FCornerSize := Value; UpdateAppearanceCornerSize; end;end;procedure TJKPanelEx.SetFill(const Value: TBrush);begin FFill.Assign(Value);end;procedure TJKPanelEx.SetStroke(const Value: TStrokeBrush);begin FStroke.Assign(Value);end;procedure TJKPanelEx.StrokeChanged(Sender: TObject);begin FAppearanceUpdateKind := TAppearanceUpdateKind.Stroke; ApplyStyle;end;procedure TJKPanelEx.UpdateAppearance;begin case FAppearanceUpdateKind of TAppearanceUpdateKind.None: ; TAppearanceUpdateKind.Fill: UpdateAppearanceFill; TAppearanceUpdateKind.Stroke: UpdateAppearanceStroke; TAppearanceUpdateKind.CornerSize: UpdateAppearanceCornerSize; end;end;procedure TJKPanelEx.UpdateAppearanceFill;begin if FAppearance <> nil then begin FAppearance.Fill.Assign(FFill); end;end;procedure TJKPanelEx.UpdateAppearanceStroke;begin if FAppearance <> nil then begin FAppearance.Stroke.Assign(FStroke); end;end;procedure TJKPanelEx.UpdateAppearanceCornerSize;begin if FAppearance <> nil then begin FAppearance.XRadius := FCornerSize; FAppearance.YRadius := FCornerSize; end;end;end.
阅读全文
0 0
- 任意改变FMX的TPanel控件的颜色
- 改变控件的颜色
- 控件颜色的改变
- 可任意改变背景颜色的万年历
- 如何改变控件的颜色
- 如何改变控件的颜色
- 改变控件颜色的方法
- 如何改变控件的颜色
- 改变ListBox控件的颜色
- 任意改变CDateTimeCtrl控件的显示格式
- delphi FMX控件的常见属性
- 字符串中改变任意字的颜色和字体大小
- 如何改变STATIC控件的文字颜色
- 如何改变STATIC控件的文字颜色
- 改变控件的边框颜色(示例Label)
- VC改变控件的背景颜色
- 改变控件内的字体颜色
- mfc里的text控件改变颜色
- Unity
- 数学建模_以fisheriris数据为例使用新版本神经网络工具箱fitforwardnet进行简单实现
- HttpClient的使用
- Linux Mint 18.2 安装图像软件GIMP之画箭头&添加画笔
- Java 重写equals 的范式
- 任意改变FMX的TPanel控件的颜色
- DetachedCriteria 分页Projection取消聚合条件 (解决方案)
- java数据类型之基本数据类型
- C++总结6——继承与多态的笔试题
- 常见排序算法实现
- DATA TYPES
- WebGL之旅(一)canvas、WebGL和shader简介
- splay伸展树基础操作(bzoj 1861: [Zjoi2006]Book 书架)
- kali2.0 2017国内源添加+系统信息相关命令+中文输入法安装