我试图用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;
以下是一张截图:
2条答案
按热度按时间d7v8vwbk1#
TPoint
具有Integer
字段,TPointF
具有Single
(浮点)字段。您需要使用其中之一,或者在
Integer
/Single
之间进行转换。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个错误。