Q&A

  • 스트링그리드의 셀에서 라인을 나누려면?
안녕하세요?

스트링그리드의 한셀에는 사진을 넣고 그 다음 셀에는 관련정보를 넣을려고 합니다.

사진을 넣는 관계로 높이가 높아져서 셀에 여러 라인이 들어갑니다.

그래서 char(13)을 넣어서 라인을 나누려합니다.

그런데 라인은 나누어 지는데 연속된 라인도 계속해서 남아있는데 이문제를 어떻게 해야할 지 모르겠군요. 도움을 부탁드립니다.

예르들면 소스가 다음과 가으면



sList := '성명 : ' + sName + Chr(13) +

'부서 : ' + sBu_Name + Chr(13) +

'직위 : ' + sJik_Name + Chr(13) +

'결혼 : ' + sMerried + Chr(13) +

'연령 : ' + IntToStr(Bir_Year) + ' 세' + Chr(13) +

'근속 : ' + IntToStr(In_Year) + ' 년 ' + IntToStr(In_Month) + ' 월' + Chr(13) +

'전년소득 : ' + EditNum(sYearPay, 10, 0) + ' 원';

//sgPic - string grid

sgPic.Cells[1, i] := sList;



이결과가

부서 : 총무팀 직위 : 대리 결혼 : Y 연령 : 32 세 근속 : 2년 3월 전년소

직위 : 대리

결혼 : Y

연령 : 32 세

근속 : 2년 3월

전년소득 : 18,000,000 원



이렇게 원래 라인의 흔적이 남는군요.



그리고 셀에 사진을 넣기 위해 DRawCell 이벤트에서 아래와 같은 일을 합니다.

procedure TPA1030IF.sgPicDrawCell(Sender: TObject; Col, Row: Integer;

Rect: TRect; State: TGridDrawState);

var

JPGImage : TImage;

SRect, DRect : TRect;

x, TopMargin : Integer;

begin

if Row = 0 Then begin

SetTextAlign(Handle, TA_CENTER);

x := (Rect.Left + Rect.Right) div 2;

TopMargin := Trunc((TStringGrid(Sender).RowHeights[Row]+TStringGrid(Sender).Font.Height)/2);

sgPic.Canvas.TextRect(Rect,x, Rect.Top + TopMargin, TStringGrid(Sender).Cells[Col,Row]);

end;

if (col = 0) and (row >= 1) then begin

sgPic.RowHeights[Row] := 112;

if (cbPicture.Checked = False) or (bDraw = False) then

Exit;



if Trim(sgPic.Cells[2, Row]) <> '' Then begin

JPGImage := TImage.Create(Self);

Add_Img(JPGImage, Row, sgPic.Cells[2, Row]);

sgPic.Canvas.FillRect(Rect);

sgPic.Canvas.Draw(Rect.Left, Rect.Top, JPGImage.Picture.Graphic);

sgPic.Canvas.StretchDraw(Rect, JPGImage.Picture.Graphic);

JPGImage.Free;

End;

end;

if (col = 1) and (row >= 1) then

DrawText(sgPic.Canvas.Handle, PChar(sgPic.Cells[Col, Row]), -1, Rect, DT_WORDBREAK);

end;



그럼. 고수님들의 도움을 바랍니다.

1  COMMENTS
  • Profile
    정계훈 2000.01.14 20:11
    안녕하세요. 손민호님.

    답변이 아니라서 죄송합니다. 제가 궁금한 것은 왜 스트링그리드를 사용하는가 입니다.

    질문내용으로봐서는 DBCtrlGrid를 써서 바로 그위에 DBImage, DBEdit를 사용하시면

    좋을듯 싶은데요.

    주제 넘게 찌꺼렸다면 사과드립니다. 다른 고수들에 답변을 지켜보겠습니다.



    손인호 wrote:

    > 안녕하세요?

    > 스트링그리드의 한셀에는 사진을 넣고 그 다음 셀에는 관련정보를 넣을려고 합니다.

    > 사진을 넣는 관계로 높이가 높아져서 셀에 여러 라인이 들어갑니다.

    > 그래서 char(13)을 넣어서 라인을 나누려합니다.

    > 그런데 라인은 나누어 지는데 연속된 라인도 계속해서 남아있는데 이문제를 어떻게 해야할 지 모르겠군요. 도움을 부탁드립니다.

    > 예르들면 소스가 다음과 가으면

    >

    > sList := '성명 : ' + sName + Chr(13) +

    > '부서 : ' + sBu_Name + Chr(13) +

    > '직위 : ' + sJik_Name + Chr(13) +

    > '결혼 : ' + sMerried + Chr(13) +

    > '연령 : ' + IntToStr(Bir_Year) + ' 세' + Chr(13) +

    > '근속 : ' + IntToStr(In_Year) + ' 년 ' + IntToStr(In_Month) + ' 월' + Chr(13) +

    > '전년소득 : ' + EditNum(sYearPay, 10, 0) + ' 원';

    > //sgPic - string grid

    > sgPic.Cells[1, i] := sList;

    >

    > 이결과가

    > 부서 : 총무팀 직위 : 대리 결혼 : Y 연령 : 32 세 근속 : 2년 3월 전년소

    > 직위 : 대리

    > 결혼 : Y

    > 연령 : 32 세

    > 근속 : 2년 3월

    > 전년소득 : 18,000,000 원

    >

    > 이렇게 원래 라인의 흔적이 남는군요.

    >

    > 그리고 셀에 사진을 넣기 위해 DRawCell 이벤트에서 아래와 같은 일을 합니다.

    > procedure TPA1030IF.sgPicDrawCell(Sender: TObject; Col, Row: Integer;

    > Rect: TRect; State: TGridDrawState);

    > var

    > JPGImage : TImage;

    > SRect, DRect : TRect;

    > x, TopMargin : Integer;

    > begin

    > if Row = 0 Then begin

    > SetTextAlign(Handle, TA_CENTER);

    > x := (Rect.Left + Rect.Right) div 2;

    > TopMargin := Trunc((TStringGrid(Sender).RowHeights[Row]+TStringGrid(Sender).Font.Height)/2);

    > sgPic.Canvas.TextRect(Rect,x, Rect.Top + TopMargin, TStringGrid(Sender).Cells[Col,Row]);

    > end;

    > if (col = 0) and (row >= 1) then begin

    > sgPic.RowHeights[Row] := 112;

    > if (cbPicture.Checked = False) or (bDraw = False) then

    > Exit;

    >

    > if Trim(sgPic.Cells[2, Row]) <> '' Then begin

    > JPGImage := TImage.Create(Self);

    > Add_Img(JPGImage, Row, sgPic.Cells[2, Row]);

    > sgPic.Canvas.FillRect(Rect);

    > sgPic.Canvas.Draw(Rect.Left, Rect.Top, JPGImage.Picture.Graphic);

    > sgPic.Canvas.StretchDraw(Rect, JPGImage.Picture.Graphic);

    > JPGImage.Free;

    > End;

    > end;

    > if (col = 1) and (row >= 1) then

    > DrawText(sgPic.Canvas.Handle, PChar(sgPic.Cells[Col, Row]), -1, Rect, DT_WORDBREAK);

    > end;

    >

    > 그럼. 고수님들의 도움을 바랍니다.