试图创建一个滑块,但我一直收到不兼容的类型

0sgqnhkj  于 2022-09-21  发布在  其他
关注(0)|答案(2)|浏览(143)

我试图用Delphi制作一个Slider,但不断收到错误:
类型‘TPoint’和‘TPointF’不兼容

不兼容的类型‘Integer’和‘Single’

不兼容的类型‘Integer’和‘Extended’

我不知道为什么我会收到这些错误。

procedure TForm1.FormTouch(Sender: TObject; const Touches: TTouches; const Action: TTouchAction);
var
  T:TTouch;
  F: TfmxObject;
  M: TrectF;
  L: TLine;
  R: TRoundRect;
  P: TPoint;
begin
  for T in Touches do begin
    case Action of
      TTouchAction.down,
      TTouchAction.Move:
        for F in Children do
          if F is Tlayout then begin
            M := TLayout(F).AbsoluteRect;
            M.Inflate(0, -10);
            if M.Contains(T.Location) then begin
              L := TLine(TLayout(F).Children[0]);
              R := TRoundRect(L.Children[0]);
              P := TLayout(F).AbsoluteToLocal(T.Location);
              P.X := R.Position.X;
              P.Y := P.Y - 10 - R.Height * 0.5;
              R.Position.Point := P;
            end;
          end;
    end;
  end;
end;

以下是一张截图:

d7v8vwbk

d7v8vwbk1#

TPoint具有Integer字段,TPointF具有Single(浮点)字段。

您需要使用其中之一,或者在Integer/Single之间进行转换。

ha5z0ras

ha5z0ras2#

P := TLayout(F).AbsoluteToLocal(T.Location);中,您试图将TPointF赋值给TPoint,但它们是完全不同的类型,彼此之间不兼容赋值。TPointF保存Single,而TPoint保存Integer

P.X := R.Position.X;中,您尝试将Single分配给Integer。如果没有类型转换,则不允许该赋值。

P.Y := P.Y - 10 - R.Height * 0.5;中,您尝试将Extended分配给Integer。如果没有类型转换,则不允许该赋值。

也就是说,TLayout.AbsoluteToLocal()返回TPointF,而R.Position.Point需要TPointF,因此您的P变量应该声明为TPointF,而不是TPoint。这应该会解决你所有的3个错误。

相关问题