吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 832|回复: 8
收起左侧

[求助] 新Delphi问题,如何创建动态的“活的未知已知组”控件?

[复制链接]
冥界3大法王 发表于 2024-2-15 15:58
本帖最后由 冥界3大法王 于 2024-2-15 16:03 编辑


譬如说,最简单的是动态创建控件的实例像下面这种:
procedure TForm7.动态创建控件Click(Sender: TObject);
var
  MyEdit: TEdit;           // 定义变量存储新创建的编辑控件
begin
  MyEdit := TEdit.Create(Self); // Self表示当前所属的窗体或者容器
  MyEdit.Parent := Form7;  // Form7
  MyEdit.Left := 50;       // 设置编辑控件左边距
  MyEdit.Top := 50;        // 设置编辑控件上边距
  MyEdit.Width := 50;     // 设置编辑控件宽度
  MyEdit.Height := 50;    // 设置编辑控件高度
end;

注意看红字 绿字




问题来了。。。。假设我把未知要创建的控件类型 ,弄到ComboBox下拉菜单列表里边去
假设有
TEdit
TButton
。。。省略137种

那我红字和绿色的定义如何表达呢?

image.png
不出所料,果然报错了。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

homejun 发表于 2024-2-15 16:56
根据字符串调用特定的控件create
DEATHTOUCH 发表于 2024-2-15 17:04
如楼上所说,就是判断字符串。
这种又叫工厂模式。
 楼主| 冥界3大法王 发表于 2024-2-15 17:11
DEATHTOUCH 发表于 2024-2-15 17:04
如楼上所说,就是判断字符串。
这种又叫工厂模式。

是不是没有简单的方法了?
wyw6813 发表于 2024-2-15 17:17
最简单的实现如下,楼主大魔王玩了这么多年delphi,似乎还是什么都不会,基础太差了点。。。多补补基础,不要整天搞那些花里胡哨的。
[Delphi] 纯文本查看 复制代码
procedure TForm1.Button1Click(Sender: TObject);
var
  NewControl: TControl;
begin
  case ComboBox1.ItemIndex of
    0: NewControl := TEdit.Create(Self);
    1: NewControl := TButton.Create(Self);
    // 添加其他控件类型...
    else
      Exit; // 如果没有选择控件类型,直接退出
  end;

  // 设置控件的属性
  NewControl.Parent := Self; // 设置父级为当前的Form
  NewControl.Left := 100;
  NewControl.Top := 100;
end;
 楼主| 冥界3大法王 发表于 2024-2-15 17:21
wyw6813 发表于 2024-2-15 17:17
最简单的实现如下,楼主大魔王玩了这么多年delphi,似乎还是什么都不会,基础太差了点。。。多补补基础,不 ...

可是这还是写死的啊。
DEATHTOUCH 发表于 2024-2-15 17:52
利用RegisterClass和GetClass或FindClass也可以哦,不过非常花里胡哨,不如字符串匹配写个类厂直接。
[Delphi] 纯文本查看 复制代码
procedure TForm1.FormCreate(Sender:TObject);
var
  ps:TPersistentClass;
  btn:TButton;
begin
  ps:=GetClass('TButton');
  if ps<>nil then
  begin
    btn:=TButton(TComponentClass(ps).Create(Self));
    btn.Parent:=Self;
    btn.SetBounds(100,50,200,80);
    btn.Caption:='按钮';
  end;
end;

initialization

RegisterClass(TButton);  
wyw6813 发表于 2024-2-15 18:29
冥界3大法王 发表于 2024-2-15 17:21
可是这还是写死的啊。

有写死的方法,当然必定有不写死的方法。
使用TControlClass,TControl,FindClass可以动态实现,不需要显式的知道当前要创建的控件是什么类型。自行探索吧。
happyxuexi 发表于 2024-2-16 07:33
貌似简单的问题,实现方法各不相同,学习了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 17:16

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表