Fórum Destacar letras com cor diferente no DBGrid? #365526
27/10/2008
0
Tenho uma procedure para fazer consultas no dbgrid destacando letras por uma determinada cor, e funciona blz.
A função é esta aqui
Em todas dbgrids do meu sistema funciona, mais tem um aqui que não quer funcionar de forma alguma, o método de uso é o mesmo para todas dbgrids.
Chamo assim no evento oncell do dbgrid
O Select esta assim nesta ultima que não quer funcionar o destaque de cor no DBGrid.
Somente nesta grid que não está funcionando, e eu não sei o motivo.
Grato pela ajuda
Adriano.
A função é esta aqui
{:Função para pintar letra destacada no DBGrid}
procedure DrawTextDestacado(Canvas : TCanvas; Rect: TRect;
TextoOrig, TextoDestaque : string;
CorDestaque : TColor);
procedure Draw(S : string; Cor : TColor);
begin
Canvas.Font.Color:= Cor;
Canvas.TextRect(Rect, Rect.Left, Rect.Top + 2, S);
Inc(Rect.Left, Canvas.TextWidth(S));
end;
var
S1 : string;
P : Integer;
CorOrig : TColor;
begin
Canvas.FillRect(Rect);
Inc(Rect.Left, 2);
CorOrig := Canvas.Font.Color;
while not (TextoDestaque = ´´) do
begin
P := Pos(´ ´, TextoDestaque);
if P = 0 then
begin
S1 := TextoDestaque;
TextoDestaque := ´´;
end else
begin
S1 := Copy(TextoDestaque, 1, P-1);
TextoDestaque := Trim(Copy(TextoDestaque, P+1, 255));
end;
if not (S1 = ´´) then
begin
P := Pos(UpperCase(S1), UpperCase(TextoOrig));
if P = 0 then
Break;
Draw(Copy(TextoOrig, 1, P-1), CorOrig);
Delete(TextoOrig, 1, P-1);
P := Length(S1);
Draw(Copy(TextoOrig, 1, P), CorDestaque);
Delete(TextoOrig, 1, P);
end;
end;
if not (TextoOrig = ´´) then
Draw(TextoOrig, CorOrig);
end;Em todas dbgrids do meu sistema funciona, mais tem um aqui que não quer funcionar de forma alguma, o método de uso é o mesmo para todas dbgrids.
Chamo assim no evento oncell do dbgrid
procedure TfrmListEmpresas.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
{Primeiro chamo a função para destacar letras no DBGrid}
if DataCol in [0, 1] then
DrawTextDestacado(DBGrid1.Canvas, Rect, Column.Field.AsString, Trim(Edit2.Text), clBlue);
end;O Select esta assim nesta ultima que não quer funcionar o destaque de cor no DBGrid.
var
texto: string;
begin
{:Primeiro passo os dados para serem filtrados no edit com mais de um nome e com espaços
serve para filtrar tipo assim ADR SERV, JOAO DE S.... etc}
if Trim(edit2.text) = ´´ then
Exit;
texto := AnsiUpperCase(StringReplace(TrimRight(edit2.text),´ ´,´¬ ´,[rfReplaceAll]))+´¬´;
{:Aqui faço novamente o select agora passando por parametros}
{:Obs Este select já esta cadastrado do DM com o parametro para o CDS reconheçer o parametro "ASSOCIADO"}
with dm.ibPermissoesUser do
begin
Close;
SelectSQL.Text := ´ select a.*, b.nmempresa, b.cdempresa, ´+
´ b.nrcgc from permissoesuser a, empresa b ´+
´ where a.idusuario = :pusuario and ´+
´ b.cdempresa = a.idempresa and a.marcarbox = ´´T´´ ´+
´ and upper(b.nmempresa) like :busca ´+
´ order by b.cdempresa ´;
ParamByName(´pusuario´).AsInteger := StrToInt(StatusBar1.Panels[1].Text);
ParamByName(´busca´).AsString := AnsiUpperCase(Texto);
Open;
if IsEmpty then
MessageDlg(´Não existe dados para esta pesquisa´, mtInformation, [mbOK], 0);
Abort;
end;Somente nesta grid que não está funcionando, e eu não sei o motivo.
Grato pela ajuda
Adriano.
Adriano_servitec
Curtir tópico
+ 0
Responder
Posts
29/10/2008
Adriano_servitec
Resolvido
if (DataCol in [0, 1]) or SameText(Column.Field.FieldName, ´nmempresa´) then DrawTextDestacado(DBGrid1.Canvas, Rect, Column.Field.AsString, Trim(Edit2.Text), clBlue);
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)