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

解決


へぎ  2004-10-22 20: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-22 21: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-22 21:24:03  No: 11496  IP: 192.*.*.*

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

編集 削除
にしの  2004-10-22 21:45:26  No: 11497  IP: 192.*.*.*

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

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

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

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

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

編集 削除
初心者999  2004-10-23 08: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 12:29:36  No: 11500  IP: 192.*.*.*

グローバル変数iを定義

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

とか?

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

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

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

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

編集 削除
@っしー  2004-10-25 12: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 12: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-25 15: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 00:53:00  No: 11506  IP: 192.*.*.*

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

編集 削除