DbGrid informando quando em execução

Delphi

30/10/2008

Galera...

Minha questão é a seguinte... vamos ver se vocês entendem...

Eu tenho uma aplicação que rola música...

As músicas ficam em um grid... o grid mostra somente o nome da música... Como se fosse a lista de execução do MediaPlayer.

O que eu gostaria de fazer é o seguinte...
Marcar a linha de azul, ou vermelho, tanto faz da música que esta sendo executada.

Eu criei um campo calculado do tipo bolean e atribui true quando inicio a musica e quando termina a execucao ele localiza a musica de coloca False.

O problema é que ao trocar de registro o evento on calcfield é executado e limpa a minha propriedade True.

Aí o campo nao fica mais do jeito que coloquei no Grid.
Alguem tem idéia de como posso fazer?

Grande Abraço


Tremonti

Tremonti

Curtidas 0

Respostas

Tremonti

Tremonti

30/10/2008

Alguém?


GOSTEI 0
Tremonti

Tremonti

30/10/2008

Alguem sabe galera?


GOSTEI 0
Tremonti

Tremonti

30/10/2008

Galera...

Alguem sabe?

Preciso marcar o Dbgrid de alguma forma mas nao sei como

Abraços


GOSTEI 0
Tremonti

Tremonti

30/10/2008

Galera...

Por favor...

Alguem?!


GOSTEI 0
Tremonti

Tremonti

30/10/2008

vejo que tem muitas visualizações...

porem nenhuma resposta

ninguem pode me dar uma luz?

abraços


GOSTEI 0
Fcinto

Fcinto

30/10/2008

Ao invés de vc usar um campo calculado traz o campo na query
por exemplo
SELECT NOME_MUSICA, AUTOR, ´N´ EXECUCAO FROM MUSICA
ai vc pode alterar este campo execucao a qqer momento e o calcfields não vai limpa-lo.


GOSTEI 0
Devmedia

Devmedia

30/10/2008

Amigo Tremonti!

Voce já tentou usar o evento OnDrawColumnCell ???

Já que voce tem a variável booleana que avisa qual esta ativa, voce só vai ter que procurar ela no GRID e logo depois utiliza este código no evento que falei logo acima:


Para alterar somente a fonte:

 DBGrid.Canvas.Font.Style := DBGrid.Canvas.Font.Style + [fsBold];
 DBGridControleDeClientesVisualizarHistorico.Canvas.Font.Color := clRed; //COR DEFINIDA
DBGrid.DefaultDrawDataCell(Rect,Column.Field,State);



Para alterar a linha inteira:

DBGrid.Canvas.Brush.Color := StringToColor(´$00FFEFDF´); // Aqui se define a cor que ira variar de linha por linha
DBGridCanvas.FillRect(Rect);
DBGrid.DefaultDrawDataCell(rect,Column.Field,State);


Uma observação:

Se voce tiver mais que uma coluna neste grid, vá em Properties -> Options -> dgRowSelect -> Marque True. Acredito em um visual mais interessante pro seu grid.

Um abraço.


GOSTEI 0
Devmedia

Devmedia

30/10/2008

Esqueci de mensionar, que se for um DBGrid voce pode utilizar este código:

DBGrid.SetFocus;
DBGrid.DataSource.DataSet.Locate(´CODIGO_ID´, CrnLabeledEditCodigo.Text, []);


Para localizar o que deseja dentro do DBGrid, sem precisar classificar.
Este código vai vamos dizer assim ´varrer´ seu DBGrid e mudar a linha de seleção para especificada no código. Nescessariamente voce não precisa utilizar o meu CODIGO_ID como ordem de consulta! Pode ser qualquer coisa. Mas somente segue a lógica do código, ok?

Inté.


GOSTEI 0
Tremonti

Tremonti

30/10/2008

O problema é que não possuo um campo boolean na minha tabela..

E estou utilizando ADO para fazer a conexão com a base.

E ele não deixa eu criar um campo virtual desta maneira...

Precisa ser Calculado...

E no campo calculado, cada vez que mudo de registro no dbgrid, ele faz novamente a execucao do metodo OnCalcField, zerando o meu campo preenchido.

Fui claro? =/ ... Se não posso explicar com mais detalhes

Alguem possui uma saida pra mim?

Abraços a todos e obrigado


GOSTEI 0
Tremonti

Tremonti

30/10/2008

Alguem?


GOSTEI 0
Tonidavi2004

Tonidavi2004

30/10/2008

Tremonti vc pode fazer assim:
procedure TForm1.FormCreate(Sender: TObject);
begin
  EmExecucao := False;
end;

procedure TForm1.MediaPlayer1PostClick(Sender: TObject;
  Button: TMPBtnType);
begin
 if (Button = btPlay) then
 begin
    EmExecucao := True;
    DBGrid1.Repaint;
 end
 else
 begin
   EmExecucao := False;
   DBGrid1.Repaint;
 end;
end;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if ((DBGrid1.Seu_Campo_Caminho_Nome_Arquivo = MediaPlayer1.FileName) and (EmExecucao)) then
    DBGrid1.Canvas.Brush.Color := clRed;
  DBGrid1.DefaultDrawDataCell(Rect, DBGrid1.Columns[DataCol].Field, State);
end;



GOSTEI 0
Tremonti

Tremonti

30/10/2008

O problema eh que ele soh muda quando eu troco de registro


GOSTEI 0
POSTAR