Mudar fonte de uma palavra no dbgrid
Olá pessoal.
Eu tenho um form de busca de clientes em meu sistema que é composto por um edit, um botão e um dbgrid. Eu queria que quando eu digitasse algo no edit e clicasse no botão, se fosse encontrado algum registro, a palavra que eu digitei no edit ficasse destacada(fonte, cor, tamanho) nos registros da dbgrid. Mudar a fonte de uma linha a celula inteira é facil, mas de uma palavra somente eu não sei como.
Agradeço antecipadamente.
Eu tenho um form de busca de clientes em meu sistema que é composto por um edit, um botão e um dbgrid. Eu queria que quando eu digitasse algo no edit e clicasse no botão, se fosse encontrado algum registro, a palavra que eu digitei no edit ficasse destacada(fonte, cor, tamanho) nos registros da dbgrid. Mudar a fonte de uma linha a celula inteira é facil, mas de uma palavra somente eu não sei como.
Agradeço antecipadamente.
Flaviosan
Curtidas 0
Respostas
Marco Salles
06/10/2005
Mudar a fonte de uma linha a celula inteira é facil, mas de uma palavra somente eu não sei como.
Agradeço antecipadamente.
tb não é dificil... Veja vou te dar um exemplo que deve ser adaptado para o seu caso... Também existem outras maneiras..
Como exemplo usei o [b:496a34e3fc]Aliase DBDEMOS [/b:496a34e3fc]e a tabela [b:496a34e3fc]country.db [/b:496a34e3fc]do Delphi 5.0 e também usei um [b:496a34e3fc]table[/b:496a34e3fc] e a function [b:496a34e3fc]FindKey [/b:496a34e3fc]para Localizar o Registro. O Campo a ser pesquisado é o [b:496a34e3fc]campo Name[/b:496a34e3fc] que por definição é chave [b:496a34e3fc]primária[/b:496a34e3fc] nesta tabela
Apos localizado o Registro que contem o Campo a ser pesquisado , ai sim eu desenho na grade...
var Achou:Boolean=False;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject); begin if table1.FindKey([edit1.text]) then achou:=True else achou:=False; end;
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if achou Then if (Column.Field = table1.FieldByName(´name´))and(table1.FieldByName(´name´).Value=Edit1.Text) then DBGrid1.Canvas.Font.Color := clRed; // default drawing DBGrid1.DefaultDrawDataCell (Rect, Column.Field, State); end;
GOSTEI 0
Lelê
06/10/2005
Não sei se funciona porque não tive oportunidade de testar, a fonte era pra ser confiável...Acho que vale a pena arriscar
O exemplo abaixo mostra como deixar cada linha do componente DBGrid de uma cor diferente, dando assim um efeito zebrado. O controle é feito no evento OnDrawColumnCell.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, DBTables, Grids, DBGrids, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
DBGrid1: TDBGrid;
Table1: TTable;
DataSource1: TDataSource;
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
If odd(Table1.RecNo) then
begin
DBGrid1.Canvas.Font.Color:= clWhite;
DBGrid1.Canvas.Brush.Color:= clGreen;
end
else
begin
DBGrid1.Canvas.Font.Color:= clBlack;
DBGrid1.Canvas.Brush.Color:= clWhite;
end;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.TextOut(Rect.Left+2,Rect.Top,Column.Field.AsString);
end;
T+
Lê
O exemplo abaixo mostra como deixar cada linha do componente DBGrid de uma cor diferente, dando assim um efeito zebrado. O controle é feito no evento OnDrawColumnCell.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, DBTables, Grids, DBGrids, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
DBGrid1: TDBGrid;
Table1: TTable;
DataSource1: TDataSource;
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
If odd(Table1.RecNo) then
begin
DBGrid1.Canvas.Font.Color:= clWhite;
DBGrid1.Canvas.Brush.Color:= clGreen;
end
else
begin
DBGrid1.Canvas.Font.Color:= clBlack;
DBGrid1.Canvas.Brush.Color:= clWhite;
end;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.TextOut(Rect.Left+2,Rect.Top,Column.Field.AsString);
end;
T+
Lê
GOSTEI 0
Marco Salles
06/10/2005
citação de Lelê
Lele Acho que isso ele sabe
Porque , mudar a fonte ou a dar o efeito de zebrado o raciocineo é o mesmo...
O exemplo abaixo mostra como deixar cada linha do componente DBGrid de uma cor diferente, dando assim um efeito zebrado.
Lele Acho que isso ele sabe
Mudar a fonte de uma linha a celula inteira é facil
Porque , mudar a fonte ou a dar o efeito de zebrado o raciocineo é o mesmo...
GOSTEI 0
Flaviosan
06/10/2005
Valew gente pela força, mas acho que vcs nao entenderam direito o que eu quero.
Eu quero destacar no dbgrid a palavra digitada no edit, e nao o a celula.
Ex.: Digitei ´Santos´ no edit e se for encontrado algum registro somente a palavra ´Santos´ aparece destacada: Flavio Oliveira e [b:8ad0f6d1d2]Santos[/b:8ad0f6d1d2], Carlos [b:8ad0f6d1d2]Santos[/b:8ad0f6d1d2] Silva, etc.
Espero ter explicado melhor a situaçao.
Agradeço antecipadamente
Eu quero destacar no dbgrid a palavra digitada no edit, e nao o a celula.
Ex.: Digitei ´Santos´ no edit e se for encontrado algum registro somente a palavra ´Santos´ aparece destacada: Flavio Oliveira e [b:8ad0f6d1d2]Santos[/b:8ad0f6d1d2], Carlos [b:8ad0f6d1d2]Santos[/b:8ad0f6d1d2] Silva, etc.
Espero ter explicado melhor a situaçao.
Agradeço antecipadamente
GOSTEI 0
Flaviosan
06/10/2005
eae gente, alguem pode me ajudar
T+
T+
GOSTEI 0