首页 > 其他分享 >delphi 运行时动态设置控件(类)属性值

delphi 运行时动态设置控件(类)属性值

时间:2023-10-27 18:55:07浏览次数:43  
标签:控件 begin end vComponent delphi TObject 属性

运行时动态设置控件(类)属性值

代码

运行时根据控件名称设置Alignment属性值

uses System.Rtti;

procedure TForm1.Button1Click(Sender: TObject);
var
  vComponent: TComponent;
  vRttiCtx: TRttiContext;
  vRType: TRttiType;
  vProp: TRttiProperty;
  v: TValue;
begin
  vComponent := Self.FindComponent(Edit1.Text);
  if vComponent = nil then
  begin
    Memo1.Lines.Add('未找到控件' + Edit1.Text);
  end
  else
  begin
    vRttiCtx := TRttiContext.Create;
    try
      vRType := vRttiCtx.GetType(vComponent.ClassInfo);
      vProp := vRType.GetProperty('Alignment');
      if vProp = nil then
      begin
        Memo1.Lines.Add('未找到Alignment属性');
      end
      else
      begin
        v := TValue.From<TAlignment>(taRightJustify);
        vProp.SetValue(vComponent, v);
      end;
    finally
      vRttiCtx.Free;
    end;
  end;
end;

运行时根据控件名称设置Alignment属性值(SetPropValue方法)

uses System.TypInfo;

procedure TForm1.Button2Click(Sender: TObject);
var
  vComponent: TComponent;
begin
  vComponent := Self.FindComponent(Edit1.Text);
  if vComponent = nil then
  begin
    Memo1.Lines.Add('未找到控件' + Edit1.Text);
  end
  else
  begin
    SetPropValue(vComponent, 'Alignment', taRightJustify);
  end;
end;

方法

System.Rtti.TRttiProperty.SetValue

procedure SetValue(Instance: Pointer; const AValue: TValue);

Unit

System.Rtti

设置给定实例中属性的值。

参数

AInstance 指向类实例或记录实例。

AValue 包含新属性值的 TValue 结构。

注意: 使用 IsWritable 属性来检查是否允许写入属性的值。尝试对不可写属性调用会导致异常。

System.TypInfo.SetPropValue

procedure SetPropValue(Instance: TObject; const PropName: string; const Value: Variant);
procedure SetPropValue(Instance: TObject; PropInfo: PPropInfo; const Value: Variant);

Unit

System.TypInfo

利用 RTTI(运行时类型信息)来使用变体值设置组件属性的值。

该函数允许在运行时进行可视化组件处理,设置组件属性。

通常,Variant 类型不能保留类型 TObject、set、方法指针和类类型。但是 GetPropValueSetPropValue 可以处理这些类型。在这些情况下,SetPropValue 可以更改类型 TObject、集合、方法指针和类的属性。

参数

Instance 指向类实例。

PropName 属性的名称

PropInfo 指向属性信息记录的指针。可以用 GetPropInfoGetPropList 来获取。

Value 新属性值。如果参数不是 GetPropValue 的返回值,则必须同时检查变体数据和属性类型,且属性类型为 TObject、set、方法指针或类类型,则结果未定义。

注意:

  • 如果指定的属性不存在或不是已发布的属性,则会引发 EPropertyError 异常。
  • 要设置 Variant 类型属性,必须使用 SetVariantProp

标签:控件,begin,end,vComponent,delphi,TObject,属性
From: https://www.cnblogs.com/txgh/p/17792996.html

相关文章

  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(6) -- 窗口控
    在我们窗口新增、编辑状态下的时候,我们往往会根据是否修改过的痕迹-也就是脏数据状态进行跟踪,如果用户发生了数据修改,我们在用户退出窗口的时候,提供用户是否丢弃修改还是继续编辑,这样在一些重要录入时的时候,可以避免用户不小心关掉窗口,导致窗口的数据要重新录入的尴尬场景。本篇随......
  • Fabric.js 自定义控件
    本文简介带尬猴,我是德育处主任虽然Fabric.js提供的基础功能已经很丰富了,但有时难免需要定制一些需求。比如本文要讲的『自定义控件』。掌握创建自定义控件这个功能,能够创建更加精美和实用的图形应用程序,提高用户体验和用户满意度。尽管Fabric.js的文档很一般,但demo还挺......
  • Jquery 将 JSON 列表的 某个属性值,添加到数组中,并判断一个值,在不在数据中
    jquery将JSON列表的某个属性值,添加到数组中如果你有一个JSON列表,并且想要将每个对象的某个属性值添加到数组中,你可以使用jQuery的$.each()函数来遍历JSON列表,并获取所需的属性值。以下是一个示例代码:varjsonList=[{"name":"John","age":30,"city":"NewYork"}......
  • winform控件命名
    控件命名【参考】控件命名=控件缩写前缀+变量名privateLabellblNote;privateButtonbtnOk;privateTextBoxtxtName;【参考】winform控件缩写 控件名称缩写ButtonBtnCheckBoxChkCheckedListBoxCklComboBoxCmbDateTimePickerDtpLabelLbl......
  • Mybatis,核心配置中,属性优化,别名优化,设置,插件
    配置:MyBatis可以配置成适应多种环境不过要记住:尽管可以配置多个环境,但每个SqlSessionFactory实例只能选择一种环境.学会使用配置多套运行环境!: 通过ID来选择环境: 测试的时候可能有很多不同的数据库可以选择,但是最终只能选择一个Mybatis默认的事务管理器就是JDBC,连接池:......
  • WPF 纯xaml实现控件运动动画
    1、Image控件加载后上下运动2、Image控件可以放在Grid等布局控件中3、指定加载时触发动画:EventTriggerRoutedEvent="Image.Loaded"4、指定动画的起止位置,和运动周期1<ImageGrid.Row="1"Grid.Column="1"VerticalAlignment="Top"Margin="0,40,0,0"Ho......
  • VS添加SunnyUI控件时报错:创建组件UILabel失败
    在引用中将sunnyui和sunnyui.common移除在引用中重新从本地引用上面两个dll文件......
  • 界面控件开发包DevExpress v23.1.6全新发布|附高速下载
    DevExpressUniversal拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpressDashboardeXpressApp框架、适用于VisualStudio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress今年第一个重要版本v23.1正式发布,该版本拥有众多新产品和数十个具......
  • 属性很多时如何很清晰的通过充血模型创建数据合法的对象
    原因:在构建充血模型时,为构建合法的对象,对象赋值都在私有的。属性少的时候可以直接写构造函数,属性多时就不太合适了。如何解决这个问题呢?直接上代码Book类:1publicclassBook2{3publiclongId{get;privateset;}4publiclongAuthorId{g......
  • 每日随笔——c#窗口控件联系
    自己设计并编写一个Windows应用程序,要求用到TextBox、GroupBox、RadioButton、CheckBox、ComboBox、ListBox控件。将程序功能、界面布局和运行结果的截图与事件代码写在实验报告中。 usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;us......