書いた色を記憶しておくには?

解決


ごえごえ  2004-07-13 21:04:33  No: 9893

タイマーで、色がランダムな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;


BRO  2004-07-13 22:05:36  No: 9894

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  
 で良い気もしますが。


ごえごえ  2004-07-16 08:41:00  No: 9895

レスありがとうございます
試してみます、あとタイマー変数についても調べてみます。できたら報告します


ごえごえ  2004-07-23 09:12:27  No: 9896

できました、BROさんありがとうございました(ごめんなさいタイマー変数はよくわかりませんでした


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加