to danng:
对于你上面的方法,有一点疑问,pWidth:=@edt1.Width
其中width为TControl的一个属性,那么@edt1.Width的到的是什么呢?
另外,你的操作具有一定危险性,若:
property Width: Integer read SetWidth write SetWidth 那么我们这种方法就会出错。
下面是我做的一个Demo:
var
P1, P2, P3: Pointer;
vW: Integer;
begin
p1 := Pointer(TEdit);
P2 := @Edit1.Width;
//$7968为类TControl的方法setwidth与 类TEdit 之间的内存相对位置
p2 := Pointer(Integer(P1) + $7968);
vW := 15;
P3 := Edit1;
asm
push eax
push edx
mov edx, vW
mov eax, p3
call p2
pop edx
pop eax
end;
end;
对于$7968需要特殊处理,处理方式需要一步步跟踪Cpu地址得到。
经验证成功更改了Edit1的宽度,并且是通过SetWidth设置的,和自己的要求相符。