Mudar o Glyp do botão em tempo de execução

Delphi

05/04/2012

Olá amigos preciso da ajuda de vocês:

Eu uso Delphi 7 e Firebird 2.1.

Estou com o seguinte problema: Estou construindo um programa para controle de Bar e Pizzaria, onde eu quero controlar as mesas que estão ocupadas ou não.
Até aí tudo bem, mas a minha dificuldade é: Quando um cliente senta na mesa 10 e consome alguma coisa, na minha tela de mesas eu preciso alterar a imagem do botão para ocupada. como faço isso ?
Josenildo Rosa

Josenildo Rosa

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

05/04/2012

Mantenha as imagens que utilizará em uma pasta e use o método LoadFromFile da seguinte forma
Botao.Glyph.LoadFromFile(caminho\imagem.bmp);

É necessário que seja um bitmap.

GOSTEI 0
Joel Rodrigues

Joel Rodrigues

05/04/2012

Outra forma é adicionar um ImageList com as imagens que você vai usar (bitmaps), já com o tamanho certo e usar o seguinte código:

Botao.Glyph := nil;
ImageList.GetBitmap(INDICE_DA_IMAGEM, Botao.Glyh);


Essa forma é mais prática, pois você não fica dependente de manter as imagens em arquivo. Para facilitar o uso do INDICE_DA_IMAGEM, você pode definir constantes, por exemplo:
const
MESA_LIVRE = 0;
MESA_OCUPADA = 1;


E na hora de altrar o glyph, você faria, por exemplo:
Botao.Glyph := nil;
//Se a mesa está livre
ImageList.GetBitmap(MESA_LIVRE, Botao.Glyh);


Bom, espero que ajude.
Boa sorte.
GOSTEI 0
Josenildo Rosa

Josenildo Rosa

05/04/2012

Amigos desde já agradeço pela ajuda, mas até aí eu consegui fazer, o que eu não estou conseguindo é que quando eu lanço um produto na tela de mesa e gravo a imagem do botão não altera, ou seja, eu tinha que percorrer o panel onde está os botões das mesas e ver qual o botão é a mesa que está em consumo e mudar a imagem dela para ocupada.
GOSTEI 0
Josenildo Rosa

Josenildo Rosa

05/04/2012

Outra forma é adicionar um ImageList com as imagens que você vai usar (bitmaps), já com o tamanho certo e usar o seguinte código:

Botao.Glyph := nil;
ImageList.GetBitmap(INDICE_DA_IMAGEM, Botao.Glyh);


Essa forma é mais prática, pois você não fica dependente de manter as imagens em arquivo. Para facilitar o uso do INDICE_DA_IMAGEM, você pode definir constantes, por exemplo:
const
MESA_LIVRE = 0;
MESA_OCUPADA = 1;


E na hora de altrar o glyph, você faria, por exemplo:
Botao.Glyph := nil;
//Se a mesa está livre
ImageList.GetBitmap(MESA_LIVRE, Botao.Glyh);


Bom, espero que ajude.
Boa sorte.



Joel!, desde já agradeço pela ajuda, mas até aí eu consegui fazer, o que eu não estou conseguindo é que quando eu lanço um produto na tela de mesa e gravo, a imagem do botão não altera, ou seja, eu tinha que percorrer o panel onde está os botões das mesas e ver qual o botão é a mesa que está em consumo e mudar a imagem dela para ocupada.
GOSTEI 0
Bruno Leandro

Bruno Leandro

05/04/2012

então o que você precisa é quando for dar um post em um lançamento e a mesa estiver fechada alterar a imagem da forma já descrita e quando for realizar o fechamento da mesa mudar para a outra imagem.

para isso verifique antes de dar o post o status da mesa caso seja fechado altera a imagem, senao ignora

e no processo de fechamento de mesa, depois do post volte a imagem
GOSTEI 0
Josenildo Rosa

Josenildo Rosa

05/04/2012

então o que você precisa é quando for dar um post em um lançamento e a mesa estiver fechada alterar a imagem da forma já descrita e quando for realizar o fechamento da mesa mudar para a outra imagem.

para isso verifique antes de dar o post o status da mesa caso seja fechado altera a imagem, senao ignora

e no processo de fechamento de mesa, depois do post volte a imagem


pois é Bruno esse está sendo o problema, não estou conseguindo montar esse código, Você pode me ajudar ?

Eu estava usando este codigo:

qAux.First; // tabela auxiliar de mesas
while not qAux.Eof do
begin
{ Percorre por todos os componentes que têm frmExemplo como parent. }
for i := 0 to sPanel2.ComponentCount -1 do
begin
if TsBitBtn(sPanel2.Components[i]).Name = Mesa + qAuxME_NUMERO.Text then { Ao percorrer o panel que contem os botoes com os nome das mesas Ex: botao Mesa1 que é Mesa + qauxME_NUMERO que vai dar Mesa1 }
TsBitBtn(sPanel2.Components[i]).Glyph.LoadFromFile(D:\Lanchonete\Imagen\Mesa Livre.bmp);
end;
qAux.Next;
end;

A ideia é percorrer toda a tabela auxiliar de mesa e os botoes ao mesmo tempo e alterando a sua imagem de acordo com a mesa gravada na tabela. Não sei se fui claro.
GOSTEI 0
Bruno Leandro

Bruno Leandro

05/04/2012

certo, voce sempre esta colocando TsBitBtn(sPanel2.Components[i]).Glyph.LoadFromFile(D:\Lanchonete\Imagen\Mesa Livre.bmp); então quando fizer este processamento colocará todas as mesas que encontradas como mesa livre o correto seria

for i := 0 to sPanel2.ComponentCount -1 do
begin
if TsBitBtn(sPanel2.Components[i]).Name = Mesa + qAuxME_NUMERO.Text then
begin
qAux.Close;
qAux.parambyname(mesa).value := sPanel2.Components[i]).Name;
qAux.Open;

if qAux.fieldbyname(status_mesa_aberta).asstring = S then
TsBitBtn(sPanel2.Components[i]).Glyph.LoadFromFile(D:\Lanchonete\Imagen\Mesa Livre.bmp)
else
TsBitBtn(sPanel2.Components[i]).Glyph.LoadFromFile(D:\Lanchonete\Imagen\Mesa Fechada.bmp);

qAux.Close;
end;
end;

esse status_mesa_aberta seria algo que identificasse se a mesa esta aberta ou fechada.

GOSTEI 0
POSTAR