首页 > 其他分享 >如何获得控件的On属性事件列表?

如何获得控件的On属性事件列表?

时间:2023-12-24 20:24:58浏览次数:36  
标签:控件 rType Items pMethod 列表 Add sMethodStr ToString 属性

 用RTTI

 

uses strutils, rtti, System.typinfo;

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
var
  context: TRttiContext;
  rType: TRttiType;
  aPropery: trttiproperty;
  LProperty: trttiproperty;
  LField: TRttiField;
var
   i,j: Integer;
  pMethod: TRttiMethod;
  sMethodStr  : String;
  aParameters: System.TArray<System.rtti.TRttiParameter>;
  pParameter: TRttiParameter;
  aParaStr:string;       //参数 名 字符串
  aTypeStr: String;   // 类型 字符串
begin
  context := TRttiContext.Create;
  ListBox1.Items.Clear;
  ListBox2.Items.Clear;
  ListBox3.Items.Clear;
  ListBox4.Items.Clear;
//==================================================================================
  rType := context.GetType(ListBox1.ClassType);
//============== ListBox1.Items.Add(aPropery.ToString);=====================================
  for aPropery in rType.GetProperties do
  begin
     if ( LowerCase( strutils.LeftStr(aPropery.Name,2))='on')       then     //  假设以On开头的属性 都是  事件 Event
    ListBox1.Items.Add(rType.AsInstance.MetaClassType.ClassName + '++' +
      aPropery.Name + '++' + aPropery.PropertyType.ToString);
  end;

//===========  ListBox2.Items.Add(pMethod.ToString);===========================
  for pMethod in rType.GetMethods do
  begin  
    aParameters := pMethod.GetParameters;
   if length( aParameters)=0 then    sMethodStr :=  pMethod.Name  else begin        //没有参数就不加()
    sMethodStr :=  pMethod.Name +'(';
    for i := 0 to High(aParameters) do
    begin
      pParameter := aParameters[i];
      aParaStr := pParameter.Name;  //参数 名 字符串
      aTypeStr := '';

      if pParameter.ParamType <> nil then
       aTypeStr:= GetEnumName(TypeInfo( System.TTypeKind), ord( pParameter.ParamType.TypeKind));      //参数 类型 字符串
      if i > 0 then          sMethodStr := sMethodStr + '; ';
      sMethodStr := sMethodStr + aParaStr + ':' +   aTypeStr;
    end;
     sMethodStr:=sMethodStr+')';
   end;
    if pMethod.ReturnType <> nil then   //根据返回值 确定是 func 还是 procedure
          sMethodStr := 'func '+ sMethodStr+': '+ GetEnumName(TypeInfo( System.TTypeKind), ord( pMethod.ReturnType.TypeKind))
    else  sMethodStr := 'procedure '+ sMethodStr ;
    ListBox2.Items.Add(
//    rType.AsInstance.MetaClassType.ClassName + '++' +
      sMethodStr); // +'++'+LMethod.MethodKind);
  end;

//===================ListBox3.Items.Add(LProperty.ToString);=========================================
  for LProperty in rType.GetProperties do
  begin
    ListBox3.Items.Add(LProperty.ToString);
  end;
//=====================ListBox4.Items.Add(LField.ToString);==========================================
  for LField in rType.GetFields do
  begin
    ListBox4.Items.Add(LField.ToString);
  end;
end;

 

标签:控件,rType,Items,pMethod,列表,Add,sMethodStr,ToString,属性
From: https://www.cnblogs.com/tulater/p/17924801.html

相关文章

  • @ConfigurationProperties(prefix = “xx.xx.xx“) 从配置文件中取值赋给类的属性
    @ConfigurationProperties(prefix=“xx.xx.xx“)从配置文件中取值赋给类的属性@ConfigurationProperties(prefix=“xx.xx.xx”)该注解的作用是从配置文件中取值赋给类的属性,当然也可以为方法的变量赋值/***服务访问URL*/@Component@ConfigurationProperties(value......
  • 列表循环 带有栏目的调用
    <!--foreach:{$loop$vo}--><articleclass="excerpt"><aclass="focus"href="{$vo.aurl}"><!--if:{$vo['image']==''}--><imgsrc="__TPL__static/imag......
  • 幽灵和熔断+LR/SC的实现和使用+Consistent和Coherent+memory 属性 Device-nGnRnE+IP-X
    幽灵和熔断幽灵和熔断是基于瞬态指令流的缓存侧信道攻击。在瞬态指令流中被执行的内存加载指令如果将一个数据带入了缓存,则即使流水线回滚期间处理器丢弃了该指令返回的访存结果,已经被修改的缓存状态却无法撤销。由此,攻击者可以通过监测缓存的变化来推断受害者程序的访存地址,如果......
  • Qt/C++控件设计器/属性栏/组态/可导入导出/中文属性/串口网络/拖曳开发
    一、功能特点自动加载插件文件中的所有控件生成列表,默认自带的控件超过120个。拖曳到画布自动生成对应的控件,所见即所得。右侧中文属性栏,改变对应的属性立即应用到对应选中控件,直观简洁,非常适合小白使用。独创属性栏文字翻译映射机制,效率极高,可以非常方便拓展其他语言的属性......
  • 国标GB28181智能视频监控LiteCVR设备列表显示不全的原因排查
    随着科技的不断发展,安防视频监控技术也在不断创新和升级。近年来,一些新技术不断涌现,为安防视频监控领域带来了更多的机遇和挑战。有用户在现场部署LiteCVR,服务器重启后,设备列表显示不全,只显示国标设备,不显示Ehome设备,如下图:GB28181视频监控国标平台/视频云存储/安防监控LiteCVR视频......
  • html列表标签
    一、无序标签基本语法<ul><li>芊嵛</li><li>流年</li><li>依诺</li></ul>前面的符号设置方法一ul{/*去除none实心小圆点disc默认空心圆circle空心正方形square*/list-style:none;}方法二<!--......
  • MIME 类型列表
    扩展名文档类型MIME类型描述.aacAACaudioaudio/aacAAC(AdvancedAudioCoding)是一种音频编码格式,通常用于数字音频广播和流媒体服务。.abwAbiWorddocumentapplication/x-abiwordAbiWord是一个开源的文字处理软件,而.abw是其默认的文档格式。.arcA......
  • Python各个列表交叉进行排列组合
    例v_list=[["1.mp4","2.mp4"],["3.mp4"],["6.mp4","7.mp4"],[],[]]我想把这个列表里面的各个列表,重新排列组合但是我不知道列表里套了几个列表,套的列表里有几个元素,这样就无法具体固定for循环后来使用exec()函数,间接解决了该问题不考虑顺序的问题,一共有212=4种排列方式下......
  • python之列表常用方法
    常用方法:函数名说明len(list)返回列表元素个数max(list)返回列表中元素最大值min(list)返回列表中元素最小值list(tup)将元组转换为列表list.append(obj)添加obj对象到列表的末尾list.count(obj)返回obj在列表中出现的次数list..extend(seq)在列表中添加指定序列(是序列,不单只列表),函......
  • [Qt5&布局] 控件自动填满所在布局框架
    作者:丶布布如图,在界面布局时,将几个QT控件进行布局时,默认边缘时有一定间隙的(红框标注),有时为了美观,可以将布局边缘的间隙设置成我们想要的宽度具体设置方法:默认边缘间隙为11,设置为1,看一下效果: 戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。......