在Dll中为什么 Temp Is TButton 无效,Temp是已经赋值的TComponent 变量(100分)

  • 主题发起人 主题发起人 Jack1999
  • 开始时间 开始时间
>Temp是已经赋值的TComponent 变量
只是tconponent 吗?
如果只是TComponent的话当然Temp Is TButton 无效,
赋给temp的必须是tbutton或从tbutton继承下去的。

 
amo说的没错。

var temp:TButton;
begin
if temp is TButton then .....

end;
这样才是对的。
 
temp是tbutton或从tbutton继承
 
错!!

如果是从外部传入的对象(Temp),你在DLL内部判断其类型,
如: Temp is Txxx <font color=red>结果永远为False!</font>

我以前也这么干过,(程序绝对没错)
后来想了一下,觉得可能是因为两个project分开编译,
于是类信息不通用造成的
 
如果你想将一个TComponent转为TButton应用as而不是is
 
要不然这样把:
if Temp.ClassName='TButton' then ......
但如果TEMP是TButton的后代,而非直接的TButton,此判断酒会为FALSE。
 
if TComponent(Temp).ClassName='TButton' then ...
 
jack1999:
我无法回复你的信,
你不知到如何加分吗?
就在下面的单选框里选择“接受答案,病并给***加上100点积分”,
或分配积分,
按“发出”就行了。
呵呵。
 
如果是在delphi的程序内使用是可以的,
可以试试下面这个例子:
//主程序内容
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
procedure test(sender:tbutton);external 'e:/project1.dll';
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(inttostr(integer(button1)));
test(button1);
end;

end.

//dll内容
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

procedure test(sender:tbutton);

implementation

{$R *.DFM}
procedure test(sender:tbutton);
begin
showmessage(inttostr(integer(sender)));
(sender as tbutton).caption:='i am button!';
if (sender is tbutton) then
showmessage('button test');
end;
end.
 
Thanks everyone.
 

Similar threads

S
回复
0
查看
896
SUNSTONE的Delphi笔记
S
S
回复
0
查看
873
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部