0

TShape実行時にプログラムでコントロールを作成する方法があるのだろうか。たとえば、100 個の図形を配置する代わりに、それらを非表示にし、プログラムの実行時に表示すると、しばらくすると 100 個の図形を作成できます (5 秒で 5 つの図形、10 秒で 10 個、15 秒で 15 個、など)。 .

4

1 に答える 1

3

コントロールを使用して描画したりアニメーション化したりしないでください。代わりに、プレーン GDI またはその他の API を使用して手動で描画する必要があります。例については、この例または質問の 1 つからのこの例を参照してください

とにかく、あなたの質問に対する簡単な答え:TTimerフォームに a を置き、それを に設定しInterval250次のように記述します。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
    FShapes: array of TShape;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  SetLength(FShapes, Length(FShapes) + 1); // Ugly!
  FShapes[high(FShapes)] := TShape.Create(Self);
  FShapes[high(FShapes)].Parent := Self;
  FShapes[high(FShapes)].Width := Random(100);
  FShapes[high(FShapes)].Height := Random(100);
  FShapes[high(FShapes)].Left := Random(Width - FShapes[high(FShapes)].Width);
  FShapes[high(FShapes)].Top := Random(Height - FShapes[high(FShapes)].Height);
  FShapes[high(FShapes)].Brush.Color := RGB(Random(255), Random(255), Random(255));
  FShapes[high(FShapes)].Shape := TShapeType(random(ord(high(TShapeType))))
end;

end.
于 2013-04-27T10:41:36.487 に答える