안녕하세요?
스트링그리드의 한셀에는 사진을 넣고 그 다음 셀에는 관련정보를 넣을려고 합니다.
사진을 넣는 관계로 높이가 높아져서 셀에 여러 라인이 들어갑니다.
그래서 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;
그럼. 고수님들의 도움을 바랍니다.
답변이 아니라서 죄송합니다. 제가 궁금한 것은 왜 스트링그리드를 사용하는가 입니다.
질문내용으로봐서는 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;
>
> 그럼. 고수님들의 도움을 바랍니다.