음..다름이 아니라...
버튼을 누르면 1부터 10000까지 증가하는 과정을 볼려구 하는데여...
이렇게 했는데여... ^^;;
procedure TForm1.Button2Click(Sender: TObject);
var
cnt : integer;
begin
cnt := 1;
with cnt < 10000 do
begin
label1.caption := cnt;
cnt := cnt + 1;
end;
end;
쿠쿠쿠쿠.. 이렇게 했는데.. 끝에 값 9999이거만 찍혀여... ^^;;
왜그럴까여... 궁금해랑.... ㅠ.ㅠ
윈도우에서 화면에 그리는 메세지는 우선순위가 가장 낮습니다. 빠른 속도를 위하여..
그렇기 때문에 여러번의 페인트 메세지가 동시에 들어오면 화면에 그리는 거를 윈도우가
막아버립니다. 때문에 맨 나중에 들어오는 메세지만 처리가 되는거죠...
그럴땐 강제적으로 다시 그려주도록 해주시면 됩니다.
해보시면 아시겠지만 속도에서 많은 차이가 나고, 또한 깜빡거릴겁니다...
그리고 아래 while문(with가 아니라 while이겠죠?)보다는 for문을 사용하시는게 더 좋을거 같군요...
procedure TForm1.Button2Click(Sender: TObject);
var
Cnt : integer;
begin
Cnt := 1;
while Cnt < 10000 do
begin
Label1.Caption := IntToStr(Cnt);
Label1.Refresh; // 강제적으로 다시 그리기...
// = Application.ProcessMessages;
// = Label1.Repaint;
Cnt := Cnt + 1;
end;
end;
for문을 이용...
procedure TForm1.Button2Click(Sender: TObject);
var
Cnt : integer;
begin
for Cnt := 1 to 9999 do
begin
Label1.Caption := IntToStr(Cnt);
Label1.Refresh; // 강제적으로 다시 그리기...
// = Application.ProcessMessages;
// = Label1.Repaint;
end;
end;
^^ 항상 즐코하세요...
김양미 wrote:
> 음..다름이 아니라...
>
> 버튼을 누르면 1부터 10000까지 증가하는 과정을 볼려구 하는데여...
>
> 이렇게 했는데여... ^^;;
>
> procedure TForm1.Button2Click(Sender: TObject);
> var
> cnt : integer;
>
> begin
> cnt := 1;
>
> with cnt < 10000 do
> begin
> label1.caption := cnt;
>
> cnt := cnt + 1;
> end;
>
> end;
>
> 쿠쿠쿠쿠.. 이렇게 했는데.. 끝에 값 9999이거만 찍혀여... ^^;;
>
> 왜그럴까여... 궁금해랑.... ㅠ.ㅠ