DBGrid를
에서이 절차의 하이라이트`FilterText은 '
procedure HighlightCellText(AGrid :TDbGrid; const ARect : TRect; AColumn : TColumn; FilterText : string; AState:TGridDrawState ;
BkColor : TColor = clYellow; SelectedBkColor : TColor = clGray);
var
HlRect : TRect;
Position : Integer;
HlText, FilterColName,DisplayText: string;
i, offset : Integer;
begin
DisplayText := Acolumn.Field.AsString;
Position := Pos(AnsiLowerCase(FilterText), AnsiLowerCase(DisplayText){ AnsiLowerCase(AColumn.DisplayText)});
if Position > 0 then
begin
// set highlight area
case AColumn.Alignment of
taLeftJustify: HlRect.Left := ARect.Left + AGrid.Canvas.TextWidth(Copy(DisplayText, 1, Position-1)) + 1;
taRightJustify: begin
Offset := AGrid.Canvas.TextWidth(Copy(DisplayText, 1,1)) - 1;
HlRect.Left := (ARect.Right - AGrid.Canvas.TextWidth(DisplayText)-offset) + AGrid.Canvas.TextWidth(Copy(DisplayText, 1, Position-1));
end;
taCenter: begin
Offset := ((ARect.Right - ARect.Left) div 2) - (AGrid.Canvas.TextWidth(DisplayText) div 2) - (AGrid.Canvas.TextWidth(Copy(DisplayText, 1,1)) - 2);
HlRect.Left := (ARect.Right - AGrid.Canvas.TextWidth(DisplayText)- offset) + AGrid.Canvas.TextWidth(Copy(DisplayText, 1, Position-1));
end;
end;
HlRect.Top := ARect.Top + 1;
HlRect.Right := HlRect.Left +AGrid.Canvas.TextWidth(Copy(DisplayText, Position, Length(FilterText))) + 1 ;
HlRect.Bottom := ARect.Bottom - 1;
//check for limit of the cell
if HlRect.Right > ARect.Right then
HlRect.Right := ARect.Right;
// setup the color and draw the rectangle in a width of the matching text
if gdSelected in AState then
AGrid.Canvas.Brush.Color := SelectedBkColor
else
AGrid.Canvas.Brush.Color := BkColor;
AGrid.Canvas.FillRect(HlRect);
HlText := Copy(DisplayText,Position, Length(FilterText));
AGrid.Canvas.TextRect(HlRect,HlRect.Left + 1,HlRect.Top + 1, HlText);
end;
end;
는 DbGrid.OnDrawColumnCell 이벤트를 사용
예를 들어 강조 텍스트는 "RO"입니다.
procedure TForm6.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
HighlightCellText(TDBGrid(Sender),Rect, Column,'ro',State);
end;
결과 :
편집 : 표준 DBGrid를에 불가능
A litle demo
. 그리고 다른 구성 요소에 대해 묻는 질문은 [도움말/주제에 따라] 주제와 관련이 없습니다. 우리는 컴포넌트 쇼핑 네트워크가 아닙니다. –
이론 상으로는 Default Drawing을 false로 설정하고 OnDrawColumnCell 및/또는 OnDrawDataCell 이벤트를 사용하여 셀을 직접 그릴 수 있습니다.하지만 이는 꽤 낮은 수준에서 상당한 양의 작업입니다. 그리드 자체로는 할 수 없습니다. – Dsm
DevExpress gridview가 바로이 작업을 수행하지만 저렴하지는 않습니다. – GuidoG