Q&A

  • DBGrid에서 하나의 컬럼을 워드랩 하는 방법?
안녕하세요? 선배님들...^^*

DBgrid에서 하나의 필드만 워드랩을 하고싶은데요.

그러니까 DB에서 읽어 그리드에 뿌려줄때 2줄로 나오게 하고픈데요.



tip란에 있는 워드랩방법은 초보인 저로써는 너무 어려워서요.

어떻게 적용해야 할지...^^;

또, 한 컬럼에 대해서 워드랩하려면 그리드의 DBGrid4DrawColumnCell 이벤트에서

처리해야 하는게 아닌가도 싶구요.



어찌해야하나 가르쳐주세요. 아래는 전철호님의 tip을 옮깁니다.

자세한 설명좀 부탁드려요....잉~



작성자 : 전철호 (jeonchulho@hanmail.net) 조회수: 894 , 줄수: 54

DBGrid에서 데이타를 워드랩 하는 방법

OnDataDrawCell 이벤트에서

다음과 같이 필드값을 다시금 뿌려주면 된다.

DrawText(DbGrid1.Canvas.Handle, PChar(Field.AsString),

StrLen(PChar(Field.AsString)), ARect,

(DT_WORDBREAK or DT_NOPREFIX or Alignments[Field.Alignment]));



사용예)

procedure TJeonDBGrid.DrawDataCell(Const Rect: TRect; Field : TField; State: TGridDrawState);

var

ARect : TRect;

Caption : string;

const

Alignments : array[TAlignment] of Word =

(DT_LEFT, DT_RIGHT, DT_CENTER);

begin

if gdSelected in State then

Canvas.Brush.Color := clWhite

else

Canvas.Brush.Color := clSilver;



Canvas.FillRect(Rect);



Caption := DispTypeValue(Field.AsString);



ARect := Rect;

ARect.Top := Rect.Top + 4;

ARect.Left := Rect.Left + 4;

ARect.Right := Rect.Right - 4;

ARect.Bottom:= Rect.Bottom - 4;



if (Field.DataType = ftSmallint) or

(Field.DataType = ftInteger) or

(Field.DataType = ftWord) or

(Field.DataType = ftFloat) then

Field.Alignment := taRightJustify;



if (Field.DataType = ftMemo) or

(Field.DataType = ftFmtMemo) then

begin

DrawText(Canvas.Handle, PChar(Field.AsString),

StrLen(PChar(Field.AsString)), ARect,

(DT_WORDBREAK or DT_NOPREFIX or

Alignments[Field.Alignment]) );

end;



if (not (Field.DataType = ftMemo )) and

(not (Field.DataType = ftFmtMemo)) and

(not (Field.DataType = ftBlob)) and

(not (Field.DataType = ftGraphic)) then

DrawText(Canvas.Handle, PChar(Caption),

StrLen(PChar(Caption)), ARect,

(DT_NOCLIP or DT_END_ELLIPSIS or DT_EXPANDTABS or DT_VCENTER or

Alignments[Field.Alignment]) );

end;



0  COMMENTS