2

私はLineDDAアニメーションの選択を描くために使用しています:

procedure TFormMain.DrawMarchingAnts;
begin
  AMarchingAntsCounter := AMarchingAntsCounterStart;
  // Use LineDDA to draw each of the 4 edges of the rectangle
  LineDDA(AMarchingAntsPointA.X, AMarchingAntsPointA.Y, AMarchingAntsPointB.X, AMarchingAntsPointA.Y,
    @MarchingAnts, LongInt(
    AMarchingAntsCanvas));
  LineDDA(AMarchingAntsPointB.X, AMarchingAntsPointA.Y, AMarchingAntsPointB.X, AMarchingAntsPointB.Y,
    @MarchingAnts, LongInt(
    AMarchingAntsCanvas));
  LineDDA(AMarchingAntsPointB.X, AMarchingAntsPointB.Y, AMarchingAntsPointA.X, AMarchingAntsPointB.Y,
    @MarchingAnts, LongInt(
    AMarchingAntsCanvas));
  LineDDA(AMarchingAntsPointA.X, AMarchingAntsPointB.Y, AMarchingAntsPointA.X, AMarchingAntsPointA.Y,
    @MarchingAnts, LongInt(
    AMarchingAntsCanvas));
  if AMarchingAntsPointB.X > AMarchingAntsPointA.X then
    ARubberbandVisible := True
  else
    ARubberbandVisible := False;
end;

グリップポイントの長方形のコーナーにアニメーションの楕円を追加する機能はありますか?

4

1 に答える 1

5

アニメーションの「行進アリ」サークルが必要ですか? 次に、カスタム ペン スタイルを作成します。たとえば、次のようになります。

unit Unit1;

interface

uses
  Windows, Classes, Graphics, Controls, Forms, ExtCtrls, Math;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormPaint(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    FMarkBrush: LOGBRUSH;
    FMarkPen: HPEN;
    FPenStyle: array[0..1] of Integer;
    FStartAngle: Single;
  end;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FPenStyle[0] := 4;
  FPenStyle[1] := 4;
  FMarkBrush.lbStyle := BS_SOLID;
  FMarkBrush.lbColor := ColorToRGB(clBlue);
  FMarkPen := ExtCreatePen(PS_GEOMETRIC or PS_USERSTYLE, 1, FMarkBrush, 2,
    @FPenStyle);
  Canvas.Pen.Handle := FMarkPen;
end;

procedure TForm1.FormPaint(Sender: TObject);
var
  X: Integer;
  Y: Integer;
begin
  Canvas.FillRect(Rect(0, 0, 50, 50));
  X := Round(25 * (1 + Cos(FStartAngle)));
  Y := Round(25 * (1 + Sin(FStartAngle)));
  Canvas.Arc(0, 0, 50, 50, X, Y, X, Y);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  FStartAngle := FStartAngle + DegToRad(5);
  Invalidate;
end;

end.

ここに画像の説明を入力

于 2013-02-25T17:41:13.773 に答える