解决方案 »
- Delphi调用Fortran编写的DLL
- 查找数据集中多行数据相邻的数据?在线等
- 求MMTools的Delphi XE2版可用的控件包!
- 有什么办法可以实时获取数据库中被更新的数据,即数据库中有没有一个“更新”事件返回给我的应用程序?
- DLL中使用IDTcpClient的问题
- 怎样得到IE的版本
- 85分求购两个文件操作函数,即刻给分!!!!!!
- 关于vb转型到delphi有什么建议么?
- 我的代码有错吗? if d<(-0.005) or d>(0.005) then.....
- Slice(FSortArray^, FSize)解释解释“^”和“Slice()”
- MDI焦点问题,
- Delphi DBGRid导出问题
构造函数里会判断当前self是不是为空,如果不为空直接返回该对象。
function _ClassCreate(AClass: TClass; Alloc: Boolean): TObject;
asm
{ -> EAX = pointer to VMT }
{ <- EAX = pointer to instance }
PUSH EDX
PUSH ECX
PUSH EBX
TEST DL,DL
JL @@noAlloc
CALL DWORD PTR [EAX] + VMTOFFSET TObject.NewInstance
@@noAlloc:
{$IFNDEF PC_MAPPED_EXCEPTION
procedure TForm1.FormCreate(Sender: TObject);
var
n : integer;
P : Pointer;
Obj : TEdit;
begin
n := TEdit.InstanceSize; //得到TEdit对象需要的内存大小
GetMem(P , n); //申请对象的内存空间
FillChar(P^ , n , 0); //清0
PPointer(P)^ := TEdit; //这句非常关键,把内存空间(结构)和类关联起来
TEdit(P).Create(Self); //这句的作用就是实现对象的初始化,也就是把内存空间结构中的其他元素填好
Obj := P;
//到此,对象就建立好了,以上加起来和 Obj := TEdit.Create(Self);没区别 Obj.Top := 10;
Obj.Left := 30;
Obj.Text := '还可以这样..
Obj.Parent := Self;
end;