Mudar o Glyp do botão em tempo de execução
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 ?
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
Curtidas 0
Respostas
Joel Rodrigues
05/04/2012
Mantenha as imagens que utilizará em uma pasta e use o método LoadFromFile da seguinte forma
É necessário que seja um bitmap.
Botao.Glyph.LoadFromFile(caminho\imagem.bmp);
É necessário que seja um bitmap.
GOSTEI 0
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:
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:
E na hora de altrar o glyph, você faria, por exemplo:
Bom, espero que ajude.
Boa sorte.
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
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
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:
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:
E na hora de altrar o glyph, você faria, por exemplo:
Bom, espero que ajude.
Boa sorte.
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
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
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
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
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
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.
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