我是这样做的 procedure TForm1.DBGridEh1SetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String); var lRect:TRect; ls_Char:String[1]; ls_Country:String; li_Width:integer; begin ls_Char := Copy(Value,length(Value),1); lRect := (Sender As TDbGridEh).Columns.Grid.CellRect(ACol,ARow); if ls_Char=' ' then begin //如果两个空格间是一个国家 ls_Country := GetCountryWord(trim(Value)); if ls_Country <>'' then begin li_Width := Canvas.TextWidth(Value) - Canvas.TextWidth(ls_Country); lRect.Left := lRect.Left+li_Width; (Sender As TDbGridEh).Canvas.Font.Color:=Clred; (Sender As TDbGridEh).Canvas.fillrect(lRect); (Sender As TDbGridEh).Canvas.textout(lRect.left,lRect.top+2,ls_Country ); end; end; end; 基本实现了功能,但是在录入下一个单词时,前一个国家单词的颜色又变成黑色了,怎么办啊???有其他方法吗?
先定位,再著色procedurDrawLine(tab:Ttable;const Rect:Trect;Field:Tfield;state:TgridDrawState;dbg:TDBGrid) begin if (tab.fieldbyname(zdm).asstring=zdz)then begin dbg.canvas.font.color:=clred; dbg.canvas.brush.color:=clyellow; end; dbg.DefaultDrawDataCell(Rect,Field,State); end;
begin
if Table1.FieldByName('Test').asInteger>0 then
DBGrid1.Canvas.Brush.Color := clRed //红色;
else
DBGrid1.Canvas.Brush.Color := clWindowsText;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.TextOut(Rect,Left+2,Rect.Top+2,Field.AsString);
end;
而且不按回车的话,每输入一个字母都要对整个单词进行一次检测呀,假设你有一个国家表的话,每次key
都要query一次数据库了。
最关键就是canvas颜色问题,你自己在检查到是国家名字的时候,主动呼叫DBGrid1DrawDataCell事件看看。
如果是我的话就这样做了。下班回家。
procedure TForm1.DBGridEh1SetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: String);
var
lRect:TRect;
ls_Char:String[1];
ls_Country:String;
li_Width:integer;
begin ls_Char := Copy(Value,length(Value),1);
lRect := (Sender As TDbGridEh).Columns.Grid.CellRect(ACol,ARow); if ls_Char=' ' then
begin
//如果两个空格间是一个国家
ls_Country := GetCountryWord(trim(Value));
if ls_Country <>'' then
begin li_Width := Canvas.TextWidth(Value) - Canvas.TextWidth(ls_Country); lRect.Left := lRect.Left+li_Width; (Sender As TDbGridEh).Canvas.Font.Color:=Clred;
(Sender As TDbGridEh).Canvas.fillrect(lRect); (Sender As TDbGridEh).Canvas.textout(lRect.left,lRect.top+2,ls_Country );
end;
end;
end;
基本实现了功能,但是在录入下一个单词时,前一个国家单词的颜色又变成黑色了,怎么办啊???有其他方法吗?
begin
if (tab.fieldbyname(zdm).asstring=zdz)then
begin
dbg.canvas.font.color:=clred;
dbg.canvas.brush.color:=clyellow;
end;
dbg.DefaultDrawDataCell(Rect,Field,State);
end;