Q&A

  • 스트링그리드에서 Cell 합치기
스트링그리드에서 2개 이상의 Cell을 병합 할 수 있나요...



쉽게 말해 엑셀이나, 아래 한글에서의 표처럼 사용할 수 있나요..?



방법이 있으면 좀 알려 주세요...



패널로 덮어서 해볼려 했지만 Fixed Cell과 Scroll 분제 때문에 안되더군요...





2  COMMENTS
  • Profile
    구창민 2000.04.04 01:41
    Red wrote:

    > 스트링그리드에서 2개 이상의 Cell을 병합 할 수 있나요...

    >

    > 쉽게 말해 엑셀이나, 아래 한글에서의 표처럼 사용할 수 있나요..?

    >

    > 방법이 있으면 좀 알려 주세요...

    >

    > 패널로 덮어서 해볼려 했지만 Fixed Cell과 Scroll 분제 때문에 안되더군요...

    >

    >





    안녕하세요~ 구창민입니다.



    좀처럼 찾기 어렵더군요.



    뉴스그룹에서 뒤져보았더니 대부분의 답변이

    "지원하지 않으니 써드파티 컴포넌트를 뒤져보아라"라는 내용들이군요.

    슈퍼페이지에서 뒤지면 있기야 하겠지요.



    암튼, 그중에 한가지 찾은게 있는데 테스트 해보니 일단 되기는 합니다.

    아래 코드들을 좀 수정하셔서 마음에 드시게 고쳐쓰세요.



    그럼~ 즐거운 프로그래밍 하시길~





    procedure TForm1.FormCreate(Sender: TObject);

    var

    i, k: Integer;

    begin

    with StringGrid1 do

    begin

    Cells[1, 1] := '첫번째 셀부터 4번째 셀까지, 셀을 합쳐보지요.';

    for i:= 1 to ColCount-1 do

    for k:= 2 to RowCount -1 do

    Cells[i,k] := Format( 'Cell[%d,%d]',[i,k]);

    end;

    end;







    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

    Rect: TRect; State: TGridDrawState);

    var

    i, x, y: Integer;

    begin

    If gdFixed In State Then Exit;

    If ARow > 1 Then Exit;



    with Sender as TStringGrid do

    begin

    If aCol < Pred(ColCount) Then

    Rect.Right := Rect.Right + GridlineWidth;

    y:= Rect.Top + 2;

    x:= Rect.Left + 2;

    for i:= 1 to aCol-1 do

    x:= x - ColWidths[i] - GridlineWidth;



    Canvas.Brush.Color := $7FFFFF;

    Canvas.Brush.Style := bsSolid;

    Canvas.FillRect( Rect );



    Canvas.TextRect( Rect, x, y, Cells[1,1] );

    end;

    end;



    end.





  • Profile
    Red 2000.04.04 02:23
    구창민 wrote:

    > Red wrote:

    > > 스트링그리드에서 2개 이상의 Cell을 병합 할 수 있나요...

    > >

    > > 쉽게 말해 엑셀이나, 아래 한글에서의 표처럼 사용할 수 있나요..?

    > >

    > > 방법이 있으면 좀 알려 주세요...

    > >

    > > 패널로 덮어서 해볼려 했지만 Fixed Cell과 Scroll 분제 때문에 안되더군요...

    > >

    > >

    >

    >

    > 안녕하세요~ 구창민입니다.

    >

    > 좀처럼 찾기 어렵더군요.

    >

    > 뉴스그룹에서 뒤져보았더니 대부분의 답변이

    > "지원하지 않으니 써드파티 컴포넌트를 뒤져보아라"라는 내용들이군요.

    > 슈퍼페이지에서 뒤지면 있기야 하겠지요.

    >

    > 암튼, 그중에 한가지 찾은게 있는데 테스트 해보니 일단 되기는 합니다.

    > 아래 코드들을 좀 수정하셔서 마음에 드시게 고쳐쓰세요.

    >

    > 그럼~ 즐거운 프로그래밍 하시길~

    >

    >

    > procedure TForm1.FormCreate(Sender: TObject);

    > var

    > i, k: Integer;

    > begin

    > with StringGrid1 do

    > begin

    > Cells[1, 1] := '첫번째 셀부터 4번째 셀까지, 셀을 합쳐보지요.';

    > for i:= 1 to ColCount-1 do

    > for k:= 2 to RowCount -1 do

    > Cells[i,k] := Format( 'Cell[%d,%d]',[i,k]);

    > end;

    > end;

    >

    >

    >

    > procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

    > Rect: TRect; State: TGridDrawState);

    > var

    > i, x, y: Integer;

    > begin

    > If gdFixed In State Then Exit;

    > If ARow > 1 Then Exit;

    >

    > with Sender as TStringGrid do

    > begin

    > If aCol < Pred(ColCount) Then

    > Rect.Right := Rect.Right + GridlineWidth;

    > y:= Rect.Top + 2;

    > x:= Rect.Left + 2;

    > for i:= 1 to aCol-1 do

    > x:= x - ColWidths[i] - GridlineWidth;

    >

    > Canvas.Brush.Color := $7FFFFF;

    > Canvas.Brush.Style := bsSolid;

    > Canvas.FillRect( Rect );

    >

    > Canvas.TextRect( Rect, x, y, Cells[1,1] );

    > end;

    > end;

    >

    > end.

    >

    >

    일단 되기는 하는데....

    합쳐진 Cell에 문자 삽입을 할 수가 없네요...

    문자를 삽입 할려하니 계속 refresh 되는 현상이 발생합니다..

    해결하는 방법이 없을까요...?