Błąd aplikacji w OnPaint

0

Witam,
Mam problem z rysowaniem krzywej. Niby wszystko działa jeśli kod jest w osobnej procedurze i wywoływany przy przesuwaniu lini w MouseMove . Lecz jest mały mankament: Odświeżając komponent przy przerysowaniu płótna, linie strasznie migają.

Problem znika gdy rysowanie jest w .OnPaint lecz program wysypuje sie przy pobieraniu współrzędnych X1,X2,Y1... z tablicy obiektów Tlinia.

procedure TMainForm.Layout1Paint(Sender: TObject; Canvas: TCanvas;
  const ARect: TRectF);

var
  I   : integer;
  karteczka   : TPathData;
  X1,X2,Y1,Y2 : Single;
  L  : TLinia;

 begin

  if Line_index <> 0 then

    Begin
    for I := 1 to LineIndex do
    begin

        L := LineArray[I];

        X1 := L.obiekt1.Position.X + Offset_lini_X;
        Y1 := L.obiekt1.Position.Y + Offset_lini_Y;
        X2 := L.obiekt2.Position.X + Offset_lini_X;
        Y2 := L.obiekt2.Position.Y + Offset_lini_Y;

        karteczka := TPathData.Create;

          try
          karteczka.MoveTo( TPointF.Create(X1,Y1));
          karteczka.CurveTo(TPointF.Create(X1+(X2-X1)*0.3,Y1),
                            TPointF.Create(X2+(X1-X2)*0.3,Y2),
                            TPointF.Create(X2,Y2));

          Canvas.Stroke.Color := TAlphaColors.Orange;
          Canvas.BeginScene;
          Canvas.Stroke.Thickness := 3;
          Canvas.DrawPath(karteczka, 1);
          Canvas.EndScene;

          finally
            karteczka.Free;
          end;


    end;
  end;
 end;

Nie mam pojęcia dlaczego nie mogę wyciągnąć danych z tej tablicy.

0
Rafał Kapłon napisał(a):

Lecz jest mały mankament: Odświeżając komponent przy przerysowaniu płótna, linie strasznie migają.

Nie znam się na FMX, ale spróbuj malować całą klatkę na pomocniczej, wirtualnej bitmapie. Po skończeniu malowania odmaluj formularz (np. Invalidate), a w zdarzeniu OnPaint jedynie namaluj zawartość tej bitmapy na płótnie okna. Powinno działać wielokrotnie szybciej.

BeginScene i EndScene wewnątrz OnPaint nic nie dają – czytaj dokumentację.

1 użytkowników online, w tym zalogowanych: 0, gości: 1