Delphi 我正在尝试检查发件人的位置,但我得到了无法访问的值。我该如何正确做?

问题描述 投票:0回答:1

我有一个带有 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'

image object pointers delphi delphi-12-athens
1个回答
0
投票

您可以将发件人

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

© www.soinside.com 2019 - 2024. All rights reserved.