我有一个带有 OnMouseUp 函数的图像,我使用 Sender 放置了一个 if 语句 它不能直接与发送者一起工作,因为它告诉我它必须是一个对象,但它并不关心。 这是功能:
procedure THeaderFooterwithNavigation.DraggableImageMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Single);
var
Current:^TImage;
begin
ActiveDrag.Remove(Sender);
Current:=Sender.ClassInfo;//here is the problem(it doesnt save the pointer in Current)error in if
if ((Image12.Position.X)<(Current.Position.X+Current.Width/2)) and ((Current.Position.X+Current.Width/2)<(Image12.Position.X+Image12.Width)) then
begin
if ((Image12.Position.Y)<(Current.Position.Y+Current.Height/2)) and ((Current.Position.Y+Current.Height/2)<(Image12.Position.Y+Image12.Height)) then
begin
Current.Position.X:=Image12.Position.X;
Current.Position.Y:=Image12.Position.Y;
end;
end;
end;
我尝试将 Current 声明为指向 TImage (^TImage) 的指针,并尝试设置 Current:=^Sender.ClassInfo 但它返回错误:不兼容的类型 'Pointer' 和 'Char'
您可以将发件人
CAST
Object
设为 TImage
(使用 IS 运算符以提高安全性)。var
Current:TImage;
begin
ActiveDrag.Remove(Sender);
if (Current is TImage) then
Current := TImage(Sender);
...
现在您可以访问
Current.ClassInfo
、Current.ClassName
、Current.ClassType
等