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

解決


へぎ  2004-10-23 05:03:07  No: 11494

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

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

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


にしの  2004-10-23 06:45:26  No: 11497

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


へぎ  2004-10-23 09:35:56  No: 11498

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

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

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


初心者999  2004-10-23 17:23:44  No: 11499

こういうことですか?

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

グローバル変数iを定義

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

とか?


TtPIPICH  2004-10-23 23:02:26  No: 11501

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


へぎ  2004-10-25 20:45:22  No: 11502

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


@っしー  2004-10-25 21:22:25  No: 11503

//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

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

※変数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

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


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

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






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