VB的这个功能Delphi能否实现〔讨论〕(50分)

  • 主题发起人 主题发起人 zw960122
  • 开始时间 开始时间
Z

zw960122

Unregistered / Unconfirmed
GUEST, unregistred user!
VB代码如下:
Private Sub Form_Load()
Form1.Controls.Add "VB.CommandButton", "cmdObj1", Frame1
With Form1!cmdObj1
.Visible = True
.Width = 2000
.Caption = "Dynamic Button"
End With
End Sub

注意 上面的代码例子使用 ! 作为一个语法要素。您也可以使用
标准集合语法如 Form1.Controls("cmdObj1") 来引用该控件。


这个方法在D中怎么实现呢。VB可以动态建立控件名称。
D如果想实现的话RTTI是否可以呢。俺没用过。请大家讨论一下。

 
其实在delphi中创建更简单,你可以在DFW中搜搜,多的是。
 
var
MyButton: TButton;
begin
MyButton:= TButton.Create(Self);
MyButton.Parent:= Self;
MyButton.OnClick:= MyButtonProc;
end;
 
同意SupermanTm
 
动态菜单.控件,拿手好戏!我常这样用!

我不相信有VB能做Delphi不能的事情,

如果不能就是你水平未够啊!呵呵!
 
VB编写的ActiveX控件有时Delphi就不能导入。
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=496774
 
怎么大家说的和问题的:
〉〉注意 上面的代码例子使用 ! 作为一个语法要素。您也可以使用
〉〉标准集合语法如 Form1.Controls("cmdObj1") 来引用该控件。
都好象没有关系?
我来说说
TDataSet里面有一个属性:
property FieldValues[const FieldName: string]: Variant; default;
注意最后有个光杆的default,他的作用就是:
让 dataset.FieldValues['CustNo'] 可以简化成: dataset['CustNo']
大概可以起到你说的 ! 的作用
 
对几位热心的兄弟回答进行分析:
>>>>:sword_liu
无语
>>>>:SupermanTm
你在声明部分写了个var Myvar :XXXX
这可不行,你先把名称给我定了,这怎么能灵活呢.看一下VB的代码.
这个构件连名称都是动态分配的.而且动态建立的构件可以名称引用.
>>>>:zryzry
无语
>>>>:tan_jian
我想揍你,气我呢?
>>>>:Pipi.
想法不错,我先看一下关于这方法VCL是怎么搞出来的,这个提议不错.
 
procedure TForm1.Button1Click(Sender: TObject);
var
MyButton: TButton;
begin
MyButton:=TButton.Create(Form1);
MyButton.Parent:=Form1;
with Form1,MyButton do
begin
Visible := True;
Width := 100;
Caption := 'Dynamic Button';
end;
end;
end.
 
TDynControls = (tButtons, tEdits, tCheckBoxes);

function Form1.CreateControl(xControl: TDynControls): TControl;
begin
case xControl of
tButtons: Result:= TButton.Create(Form1);
tEdits: Result:= TEdit.Create(Form1);
tCheckBoxes: Result:= TCheckBox.Create(Form1);
end;
Result.Parent:= From1;
end;
 
为什么不能?
var
MyButton: TButton;
begin
MyButton:=TButton.Create(Form1);
MyButton.Parent:=Form1;
MyButton.Show;
MyButton1.Name='Test';
(form1.FindComponent('Test') as TButton).caption:='asdfa';
end;

 
没事不要随便改Name属性。否则你每次用都得FindComponent
RTTI的功能很强大
 
>>>>Pipi
>>>>SupermanTm
两位的思想都不错,值得给分。
Pipi能第一个看明白我说什么。谢了。这年头白痴太多。能来三个高手观注就不错了。
第三个高手就是
>>>>cch_b
我就是想用RTTI。多谢了。
 
呵呵
与cch_b异曲同工

var
MyButton: TButton;
i:Integer;
begin
MyButton:=TButton.Create(Form1);
MyButton.Parent:=Form1;
MyButton.Show;
MyButton1.Name='Test';
for i:=0 ot Form1.ComponentCount-1 do
if Form1.Component.Name='Test' then
TButton(Form1.Component).Click;
///.其实FindComponent的内部也是这么实现的
end;
 
呵呵,写错了
与cch_b异曲同工

var
MyButton: TButton;
i:Integer;
begin
MyButton:=TButton.Create(Form1);
MyButton.Parent:=Form1;
MyButton.Show;
MyButton1.Name='Test';
for i:=0 ot Form1.ComponentCount-1 do
if Form1.Component.Name='Test' then
TButton(Form1.Components).Click;
///.其实FindComponent的内部也是这么实现的
end;
 
>>>>wr960204
你是哪头猪。是不是王锐。
 
我当然知道你是谁。
张唯
 
都不够理想,都需要var xxx:[red]TButton[/red]。

人家VB可不用事先把类名写死在代码里。 这个例子delphi需要用类似RegisterClass的
方法首先注册这个类。

我猜想,VB里面之所以不用临时注册类,是因为在它的程序里面一定已经包含了该类,
换句话说,我有理由相信,VB的程序里面包含了所有的类信息,而且一定是放在某个
类似MSVB60VM.dll之类的库里面。
 
楼上的兄弟们,你们看看VB的程序,再扩展一下吧.
Private Sub Form_Load()
Form1.Controls.Add "VB.CommandButton", "Name", Frame1
With Form1!Name
.Visible = True
.Width = 2000
.Caption = "Name Button"
End With
Form1.Controls.Add "VB.CommandButton", "Sex", Frame1
With Form1!Sex
.Visible = True
.Width = 2000
.Caption = "SexButton"
End With
End Sub

Controls('Name').什么什么什么
Controls('Sex').什么什么什么.
我想建几个就建几个.想对谁操作就对谁操做.Delphi行吗?
哈.

 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
709
import
I
后退
顶部