Witam. Jestem raczej nowicjuszem w Delphi więc z góry przepraszam jeśli pytanie jest oczywiste.
Mam pewien program który napisałem sobie korzystając z poradników w VCL i ten program działa. Chciałbym teraz ten sam program uruchomić na Androidzie, a tym samym muszę przejść na FireMonkey. I tutaj zaczęły się schody. Mam taki oto kod:
Image1.Canvas.FillRect(Canvas.ClipRect);
Image1.Canvas.Pen.Width:=1;
Image1.Canvas.Pen.Color:=cLBlack;
with Form1 do begin
for i := 0 to 360 do
if (i mod 15)=0 then
begin
Image1.Canvas.MoveTo(PozycjaX,PozycjaY);
Image1.Canvas.LineTo(Round(PozycjaX+PromienP*sin(i*pi/180)),Round(PozycjaY+PromienP*cos(i*pi/180)));
end;
for i := 0 to PromienP do
if (i mod 20)=0 then
begin
Image1.Canvas.Arc(PozycjaX+i,PozycjaY+i,PozycjaX-i,PozycjaY-i,PozycjaX+i,PozycjaY+i,PozycjaX+i,PozycjaY+i);
end;
Czyli po prostu rysowanie na TImage coraz większych okręgów. Niestety mam duży problem z napisaniem tego samego w FireMonkey. O ile zrozumiałem że MoveTo i LineTo łączy się teraz w jedno DrawLine, to kompletnie nie wiem jak przejść ze starego Arc na nowe DrawArc. To co mi się udało do teraz zrobić to:
Image1.Bitmap.Clear($FFFFFF);
Image1.Bitmap.Canvas.Stroke.Color := TAlphaColors.Black;
Image1.Bitmap.Canvas.Stroke.Thickness := 1;
p1 := TPointF.Create(PozycjaX, PozycjaY);
Image1.Bitmap.Canvas.BeginScene;
with Form1 do begin
for i := 0 to 360 do
if (i mod 15)=0 then
begin
p2 := TPointF.Create(Round(PozycjaX+PromienP*sin(i*pi/180)), Round(PozycjaY+PromienP*cos(i*pi/180)));
Image1.Bitmap.Canvas.DrawLine(p1, p2, 100);
end;
for i := 0 to PromienP do
if (i mod 20)=0 then
begin
//Image1.Bitmap.Canvas.Arc(PozycjaX+i,PozycjaY+i,PozycjaX-i,PozycjaY-i,PozycjaX+i,PozycjaY+i,PozycjaX+i,PozycjaY+i);
end;
Image1.Bitmap.Canvas.EndScene;
end;
Wykomentowana jest linijka której nie potrafię sam wymienić na wersję działającą w FireMonkey. Efekt który chciałbym uzyskać to coś takiego:
Z góry dziękuję za pomoc jak to ruszyć.
- screenshot-20190319231010.png (23 KB) - ściągnięć: 153