最近因客户要求,一直在解决如何在Grid中 根据将符合条件的所有记录中的关键字 高亮显示。   现在此做个记号。   在csdn和大富翁上发帖,可怜啊,无人应答,好容易有个人回复,竟然告诉我这个问题几乎没法解决,晕菜了。思路:   一开始有两套思路,一个是通过html来显示,一个是通过rtf来显示,因为使用的是cxgrid ,强大的表格控件,别告诉我你没用过哈!如果可以嵌套html 那就相当不错了,不过貌似没此属性,再加上有若干记录行的,有可能行不通。   第二套方案,rtf格式,这种富文本格式,你应该很熟悉吧,对,就是Trichedit ,废话少说,下面说一下具体的步骤 顺便带上demo  1.搭建数据连接 还用说嘛,cxgrid==Dbtableview===Datasource===adoquery===adoconnection==mssqlserver   2.将cxgrid对应的数据库字段加进来,然后设置其propertites==RichEdit, 这样就可以将字段属性设置为rtf格式了,简单吧。  3.说明一下,一开始这样设置的话,会存在一个问题,就是部分记录行会出现,rtf源码格式,原因我也没找出来,后来通过修改了一种属性暂时解决了这个问题 Dbtableview==DBDataController==DataModeController==gridmode==true  注意,如果修改了该属性,可以大幅提高响应速度,但是随之而来的是,统计,合计而各项功能均失效,如果你需要其中的复杂运算,小计等功能的话,请慎重!  4.修改Adoquery的相关属性,locktype==ltBatchOptimistic  因为改变关键字的颜色仅仅是为了让用户醒目的看到,而并非更新数据中的原始数据,所以设置该属性就是为了临时显示用,以便在修改数据的时候仅仅修改本地数据;custortype==ctStatic;   注意:你要高亮的字段必须为数据库中可以修改的字段,如果产生的是组合而成的别名字段,它是只读属性的,即便当时修改了,到最后仍然会退回原来的状态,即不生效。哈,如果有高手解决了该问题的话,麻烦通知我一声哈,在此先谢过了。  以上为基本属性的设置,下面是高亮关键字的代码,你可以根据此代码再进行扩展,下面只显示第一个符合条件的关键字,下面的代码还有个地方需要注意一下,因为Cxrichedit 中获取字符长度的时候,是按照字符个数来统计的,所以如果你通过delphi中的length函数来获取的话,会出现超过长度的情况,下面通过WideString的长度来获取,具体你可以测试一下。 var
    I, FoundPos, StartPosition: integer;
    AColumn: TcxGridDBColumn;
    ATextToFind: string;
    ATextWide, Content: WideString;
    ATextLength: Integer;
    AEdit: TcxRichEdit;
    AFind: Boolean;
begin
   { with ADOQuery1 do
    begin
        if not Active then
            Open
        else
            Requery();
    end;}
    ATextToFind := '吨'; //此处为你要检索的关键字 
    ATextWide := ATextToFind;
    ATextLength := Length(ATextWide);    with cxGrid1DBTableView2 do
    begin
        cxGrid1.SetFocus;
        OptionsSelection.CellSelect := True;
        OptionsData.Editing := True;
        AColumn :=GetColumnByFieldName('高亮的数据库字段名称');//         for I := 0 to ViewData.RecordCount - 1 do
            if ViewData.Rows[I].IsData then
            begin
                ViewData.Rows[I].Focused := True;
                with Controller.EditingController do
                begin
                    ShowEdit(AColumn);                    AEdit := TcxRichEdit(Edit);
                    StartPosition := 0;
                    Content := AEdit.Text;
                    FoundPos := Pos(ATextToFind, Content);
                    if (FoundPos > 0) then
                    begin
                        AEdit.SelStart := FoundPos - 1;
                        AEdit.SelLength := ATextLength;
                        AEdit.SelAttributes.Color := clRed;
                       //AEdit.SelAttributes.Style:=AEdit.SelAttributes.Style+[fsBold];
                        //SendMessage(TcxRichEdit(Edit).InnerControl.Handle,EM_SCROLLCARET, 0, 0);
                    end;
                end;
            end;
       // OptionsData.Editing := False;
        OptionsSelection.CellSelect := False;
    end;end;  我的联系邮箱,[email protected] 有好的建议和意见 欢迎和我联系。