Q&A

  • 그러니까...StringGrid를 이용해서....
그러니까 StringGrid를 이용해서 점수매기는 걸 할려구 합니다..

어떤 거냐면 우선 1~10등까지 보여주는데 이름을 입력 받고 각각의 점수를

비교해서 순위를 매겨야합니다...방법은 두가지가 있다고 들었습니다..

그냥 StringGrid를 이용해서 해도 되는데 종료하면 데이타 들이 다 사라지는 방법하고

txt화일을 만들어서 다음에도 계속 그 화일에 저장하도록 해서 그 데이타를 유지하는

방법...이왕이면 전 후자의 경우로 하고 싶은데...

txt화일을 어떻게 생성해서 어떻게 연결시키는지 도무지 알수가 없습니다..

멋있는 고수님들께서 멋진 방법을 가르쳐 주시길 간절하게 기다리고 있겠습니다...

1  COMMENTS
  • Profile
    강민주 2000.04.22 00:39
    깨구르 wrote:

    > 그러니까 StringGrid를 이용해서 점수매기는 걸 할려구 합니다..

    > 어떤 거냐면 우선 1~10등까지 보여주는데 이름을 입력 받고 각각의 점수를

    > 비교해서 순위를 매겨야합니다...방법은 두가지가 있다고 들었습니다..

    > 그냥 StringGrid를 이용해서 해도 되는데 종료하면 데이타 들이 다 사라지는 방법하고

    > txt화일을 만들어서 다음에도 계속 그 화일에 저장하도록 해서 그 데이타를 유지하는

    > 방법...이왕이면 전 후자의 경우로 하고 싶은데...

    > txt화일을 어떻게 생성해서 어떻게 연결시키는지 도무지 알수가 없습니다..

    > 멋있는 고수님들께서 멋진 방법을 가르쳐 주시길 간절하게 기다리고 있겠습니다...







    {쓰기}

    procedure SaveGridToStream(aGrid: TStringGrid);

    var

    i, k: Integer;

    iBuf: Integer;

    S: String;

    FS: TFileStream;



    procedure WrInt( anInt: Integer );

    begin

    FS.WriteBuffer(anInt, Sizeof(anInt));

    end;

    begin

    FS := TFileStream.Create('temp.dat', fmCreate or fmOpenWrite);

    try

    with aGrid do begin

    WrInt( ColCount );

    WrInt( rowCount );

    for i:= 0 to rowCount-1 do

    for k:= 0 To colCount-1 do begin

    S:= Cells[k, i];

    WrInt(Length(S));

    if Length(S) > 0 then

    FS.WriteBuffer(S[1], Length(S));

    end;

    end;

    finally

    FS.Free;

    end;

    end;



    {읽기}

    Procedure LoadGridFromStream(aGrid: TStringGrid);

    Var

    i, k: Integer;

    iBuf: Integer;

    S: String;

    FS: TFileStream;



    Function RdInt: Integer;

    Begin

    FS.ReadBuffer(Result, Sizeof(Result));

    End;

    Begin

    FS := TFileStream.Create('temp.dat', fmOpenRead);

    try

    With aGrid Do Begin

    ColCount:= RdInt;

    RowCount:= RdInt;

    For i:= 0 To rowCount-1 Do

    for k:= 0 To colCount-1 Do Begin

    iBuf := RdInt;

    If iBuf > 0 Then Begin

    SetLength(S, iBuf);

    FS.ReadBuffer(S[1], iBuf);

    Cells[k, i] := S;

    End;

    End;

    End;

    finally

    FS.Free;

    end;

    End;





    procedure TForm1.SaveButtonClick(Sender: TObject);

    begin

    SaveGridToStream(StringGrid1);

    end;



    procedure TForm1.LoadButtonClick(Sender: TObject);

    var

    i: Integer;

    begin

    for i := 0 to StringGrid1.RowCount - 1 do

    StringGrid1.Rows[i].Clear;



    LoadGridFromStream(StringGrid1);

    end;



    procedure TForm1.FormShow(Sender: TObject);

    var

    col, row: Integer;

    begin

    {테스트를 위해 값을 임으로 넣었습니다.}

    StringGrid1.RowCount := 5;

    StringGrid1.ColCount := 6;

    for col:=0 to 5 do

    for row:=0 to 4 do

    StringGrid1.Cells[col, row] := '테스트?';

    end;