안녕하세요? 선배님들...^^*
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;