タイマーで、色がランダムな8個の円(9個目書くときは1個目を白で消す)が出るプログラムを作りたいのですが、以下(抜粋)のように作ったら
新しく書く円以外も一個円を書くたびに変色してしまいます今まで書いた円の色を記憶して毎回その色で塗りなおすにはどうしたらよいでしょうか(長文すいません)
var s:integer;
data:array[0..7,1..3] of integer; {$R *.dfm}
procedure TForm1.Timer2Timer(Sender: TObject);
begin
data[s,1] := random(Image1.Width);
data[s,2] := random(Image1.Height);
data[s,3] := random(22);
for i:=s+1 to s+8 do
begin
randomize;
Image1.Canvas.Pen.Color := RGB(random(256),random(256),random(256));
circle(data[i mod 8,1],data[i mod 8,2],5*(data[i mod 8,3]+1));
end;
s := (s+1) mod 8;
TColorの配列を作っておいて、FormCreateなどであらかじめ
色を配列に入れておけば、良いのではないでしょうか。
var
CircleColor: array[1..8] of TColor;
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
randomize;
for i:=1 to 8 do
begin
CircleColor[i] := RGB(random(256),random(256),random(256));
end;
end;
こんな感じにして、描く時に
for i:=s+1 to s+8 do
begin
Image1.Canvas.Pen.Color := CircleColor[i];
end;
ところで、タイマーの変数sは、ちゃんと初期化されてるのですか?
全体を見てないので、わかりませんが。
ループでただ8回呼び出すだけなら、
for i:=1 to 8 do
で良い気もしますが。
レスありがとうございます
試してみます、あとタイマー変数についても調べてみます。できたら報告します
できました、BROさんありがとうございました(ごめんなさいタイマー変数はよくわかりませんでした
ツイート | ![]() |