I'm trying to make a Slider in Delphi, but I keep getting errors:
Incompatible types 'TPoint' and 'TPointF'
Incompatible types 'Integer' and 'Single'
Incompatible types 'Integer' and 'Extended'
I don't know why I'm getting these errors.
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;
Here is a screenshot:
CodePudding user response:
TPoint
has Integer
fields, and TPointF
has Single
(floating point) fields.
You need to use one or the other, or convert between Integer
/Single
.
CodePudding user response:
In P := TLayout(F).AbsoluteToLocal(T.Location);
, you are trying to assign a TPointF
to a TPoint
, but they are completely different types that are not assignment-compatible with each other. TPointF
holds Single
s whereas TPoint
holds Integer
s instead.
In P.X := R.Position.X;
, you are trying to assign a Single
to an Integer
. That assignment is not allowed without a type-cast.
In P.Y := P.Y - 10 - R.Height * 0.5;
, you are trying to assign an Extended
to an Integer
. That assignment is not allowed without a type-cast.
That said, TLayout.AbsoluteToLocal()
returns a TPointF
, and R.Position.Point
wants a TPointF
, so your P
variable should be declared as TPointF
instead of TPoint
. That should solve all 3 of your errors.