Labelにi番目の文字を出すには?

解決


へぎ  2004-10-23 05:03:07  No: 11494  IP: [192.*.*.*]

Delphi6のPersonal版を使用しています。初心者です。
for文を使って数字の0から5までを順番にLabelに表示させたいとき、

for i := 0 to 5 do
 begin 
  label1.caption := IntToStr(i);
 end;
end;

としても「5」しか表示されません。
Application.ProcessMessagesやsleep()を挿入しても
効果がありません。
初歩的な質問で申し訳ないのですが、
どうすればよいのか、是非教えてください。お願いします。

編集    削除
@っしー  2004-10-23 06:20:30  No: 11495  IP: [192.*.*.*]

for i := 0 to 5 do
 begin 
  label1.caption := IntToStr(i);
  Application.ProcessMessage;
  Sleep(1000); //単位msec
 end;
end;

こんな感じでどうでしょう?

編集    削除
@っしー  2004-10-23 06:24:03  No: 11496  IP: [192.*.*.*]

追加です、Sleep関数の引数が小さすぎると、質問のような状況になると思います。

編集    削除
にしの  2004-10-23 06:45:26  No: 11497  IP: [192.*.*.*]

Sleepの間は固まったようになりますけどね。
TTimerを使った方が簡単にできると思います。

編集    削除
へぎ  2004-10-23 09:35:56  No: 11498  IP: [192.*.*.*]

すいません!基本的な構造から理解できていませんでした。

時間がたつと変化するというのではなく、
Buttonをクリックするたびに0→1→2…と
表示を変えていきたいのです。

@っしーさん、にしのさん、せっかくお答えいただいたのに申し訳ありません。
(教えていただいた内容は理解できました)
どうぞよろしくお願いします。

編集    削除
初心者999  2004-10-23 17:23:44  No: 11499  IP: [192.*.*.*]

こういうことですか?

procedure TForm1.FormCreate(Sender: TObject);
begin
    Label1.Caption := '0';  //起動時に0をセット
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    //+1する
    Label1.Caption := IntToStr(StrToInt(Label1.Caption) + 1);
end;

編集    削除
初心者999+α  2004-10-23 21:29:36  No: 11500  IP: [192.*.*.*]

グローバル変数iを定義

procedure TForm1.Button1Click(Sender: TObject);
begin
    //+1する
    Label1.Caption := IntToStr(Inc(i));
end;

とか?

編集    削除
TtPIPICH  2004-10-23 23:02:26  No: 11501  IP: [192.*.*.*]

>Label1.Caption := IntToStr(Inc(i));
Incは値を返さないのでは?

編集    削除
へぎ  2004-10-25 20:45:22  No: 11502  IP: [192.*.*.*]

どうもありがとうございます!
for文にこだわりすぎてました。
初心者999さんの方法で解決したのですが、
5までで終わらせたいときはどうすればよいのでしょうか?
何度もすみません…

編集    削除
@っしー  2004-10-25 21:22:25  No: 11503  IP: [192.*.*.*]

//CounterはForm1のCreate時に0に初期化してください

var
 Counter: integer;

const
 MaxCount: integer = 5;

procedure TForm1.Button1Click(Sender: TObject);
begin
    if Counter < (MaxCount+1) then begin
      Inc(Counter);
      Label1.Caption := IntToStr(Counter);
    end begin
      ShowMessage('最大カウント数を超えました');
    end;
end;

編集    削除
初心者999+β  2004-10-25 21:49:33  No: 11504  IP: [192.*.*.*]

procedure TForm1.FormCreate(Sender: TObject);
begin
    Label1.Caption := '0';  //起動時に0をセット
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    //+1する
    if Lable1.Caption = '5' Then
        ShowMessage('最大カウント数を超えました')
    else
        Label1.Caption := IntToStr(StrToInt(Label1.Caption) + 1);
end;

とか?

編集    削除
@っしー  2004-10-26 00:16:47  No: 11505  IP: [192.*.*.*]

※変数Counterのカウントアップ部分が間違ってました。

var
 Counter: integer;

const
 MaxCount: integer = 5;

procedure TForm1.Button1Click(Sender: TObject);
begin
    if Counter < (MaxCount+1) then begin
      Label1.Caption := IntToStr(Counter);
      Inc(Counter);  //ココ
    end begin
      ShowMessage('最大カウント数を超えました');
    end;
end;

編集    削除
へぎ  2004-10-26 09:53:00  No: 11506  IP: [192.*.*.*]

おかげさまで、動かすことができました。
お答え頂いた皆さん、本当にありがとうございました。

編集    削除