Q&A

  • 파일을 읽어서 그래픽을 그리는 소스입니다.. 문제의 원인을 찾아주세요..
안녕하세요..

지금..쫌..급해서..그런데여..소스좀..봐주세여..



procedure TForm1.Button1Click(Sender: TObject);

var

fp : TextFile;

i:Integer;

s:array[1..20] of Integer;

begin

i:=1;

Image1.Canvas.Pen.Color := clRed;

Image1.Canvas.Pen.Width := 5;

Image1.Canvas.MoveTo(50,10);

assignfile(fp,'c:22.txt');

reset(fp);

while not Eof(fp) do

begin

read(fp,s[i]);

memo1.lines.add(IntToStr(s[i]));



if ((i mod 2) = 0) then

begin

Image1.Canvas.LineTo(s[i-1],s[i]);

Image1.Canvas.MoveTo(s[i-1],s[i]);

end;

i:=i+1;

end;

end;

위의 소스를..보면..파일에서..값을 읽어서..

만약..하나를..읽으면..다시..다음을 읽고..

두개를 다 읽으면..라인을 그려주고......

이러한..프로그램인데여..프로그램을..실행하면

먼저 파일에서..모두읽고..라인을 그려주더군여..

저는..두개의 값을 읽으면..그려주려고 하는데..

알고리즘..상으로는.. 문제가 없는 것 같은데..

실제로..컴파일해서..보면..안돼더군여...

좋은..생각..부탁합니다..엉엉~~~

즐거운..하루되세요..

1  COMMENTS
  • Profile
    흐르는산 2000.11.16 11:01
    두깡이 wrote:

    > 안녕하세요..

    > 지금..쫌..급해서..그런데여..소스좀..봐주세여..

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > fp : TextFile;

    > i:Integer;

    > s:array[1..20] of Integer;

    > begin

    > i:=1;

    > Image1.Canvas.Pen.Color := clRed;

    > Image1.Canvas.Pen.Width := 5;

    > Image1.Canvas.MoveTo(50,10);

    > assignfile(fp,'c:22.txt');

    > reset(fp);

    > while not Eof(fp) do

    > begin

    > read(fp,s[i]);

    > memo1.lines.add(IntToStr(s[i]));

    >

    > if ((i mod 2) = 0) then

    > begin

    > Image1.Canvas.LineTo(s[i-1],s[i]);

    > Image1.Canvas.MoveTo(s[i-1],s[i]);

    > end;

    > i:=i+1;

    > end;

    > end;

    > 위의 소스를..보면..파일에서..값을 읽어서..

    > 만약..하나를..읽으면..다시..다음을 읽고..

    > 두개를 다 읽으면..라인을 그려주고......

    > 이러한..프로그램인데여..프로그램을..실행하면

    > 먼저 파일에서..모두읽고..라인을 그려주더군여..

    > 저는..두개의 값을 읽으면..그려주려고 하는데..

    > 알고리즘..상으로는.. 문제가 없는 것 같은데..

    > 실제로..컴파일해서..보면..안돼더군여...

    > 좋은..생각..부탁합니다..엉엉~~~

    > 즐거운..하루되세요..



    아무래도 화면 갱신에 관련된 문제로 보이네요

    실제로 해보면 안되는 이유는 이벤트를 처리하지 않기 때문에 그렇게 보입니다.

    실제로는 그리지만 어떤 프로지저 또는 함수를 완전히 처리하기 전까지는 다른 이벤트를

    처리하지 않습니다. 비록 Canvas에는 그림을 그렸지만 실제 화면에 보이기 위한

    이벤트는 해당하는 for 문자이 안 끝났기 때문에 보이지는 않습니다.

    중간에 Application.ProcessMessages를 넣어보세요 그럼 그려지는 것이 보일것입니다.

    그렇지만 순식간에 일어나는 일이니까 실제로 보이지는 않을겁니다.