Fórum uso do botao speedbutton #424945

28/09/2012

0

caros amigos

preciso de uma ajuda, acho que e simples mas não sei como fazer, o caso e o seguinte :

tenho um sistema que fiz , e nele coloquei 55 speedbutton, cada um numerado, na composição do nome do componente usei a seguinte nomenclatura Spb_1, Spb_2, Spb_3 e assim sucessivamente ate chegar ao botao 55.

minha duvida e o seguinte como pos passar o numero do botao para completar seu nome , ou seja quero tornar o botao 40 por exemplo invisivel queria fazer o seguinte Spb_ + numero + proprieddae ou seja quero so informar o numero do botao na descricao o Spb_ seria padrão e a propriedade tambem. acho que deu para me explicar, eu so passaria o numero desejado e o sistema completaria o comando ficando da seguinte forma Spb_20.visible:= False, hoje eu uso o case e conforme o numero indicado ele usaria o comando certo, mas pense soa 55 botao para tornar invisivel e 55 para tornar visivel. atrazes da opçaõ que solicito so vou ter uma linha, ou melhor 2, so ficando para er passado o numero para completar o comando.

ajudem-me acho que deve ser facil, e confeço nao ter tentado fazer ainda uma tentativa para resolver.

pensei a seguinte forma 'Spb_'+Variavel+'.visible:= False', mas isso seria um texto como transformaria em comando

complicado
Edson Melo

Edson Melo

Responder

Posts

28/09/2012

William

caros amigos

preciso de uma ajuda, acho que e simples mas não sei como fazer, o caso e o seguinte :

tenho um sistema que fiz , e nele coloquei 55 speedbutton, cada um numerado, na composição do nome do componente usei a seguinte nomenclatura Spb_1, Spb_2, Spb_3 e assim sucessivamente ate chegar ao botao 55.

minha duvida e o seguinte como pos passar o numero do botao para completar seu nome , ou seja quero tornar o botao 40 por exemplo invisivel queria fazer o seguinte Spb_ + numero + proprieddae ou seja quero so informar o numero do botao na descricao o Spb_ seria padrão e a propriedade tambem. acho que deu para me explicar, eu so passaria o numero desejado e o sistema completaria o comando ficando da seguinte forma Spb_20.visible:= False, hoje eu uso o case e conforme o numero indicado ele usaria o comando certo, mas pense soa 55 botao para tornar invisivel e 55 para tornar visivel. atrazes da opçaõ que solicito so vou ter uma linha, ou melhor 2, so ficando para er passado o numero para completar o comando.

ajudem-me acho que deve ser facil, e confeço nao ter tentado fazer ainda uma tentativa para resolver.

pensei a seguinte forma 'Spb_'+Variavel+'.visible:= False', mas isso seria um texto como transformaria em comando

complicado


Olá Edson, bom acho q vc precisa de um loop para percorrer esses botões, segue um exemplo:

procedure TForm1.btnLimpaCamposClick(Sender: TObject);
var
   i: Integer;
begin
    //Contador que verifica todos os componentes do Form
    for i := 0 to ComponentCount -1 do
    begin
        //Verifica se o objeto é do tipo TSpeedButton
        if (Components[i] is TSpeedButton) then

            //Verifica o nome do TSpeedButton
            if (Components[i] as TSpeedButton).Name = NomedoBotão then
               (Components[i] as TSpeedButton).Visible = false;
    end;
end;
Responder

Gostei + 0

28/09/2012

William

caros amigos

preciso de uma ajuda, acho que e simples mas não sei como fazer, o caso e o seguinte :

tenho um sistema que fiz , e nele coloquei 55 speedbutton, cada um numerado, na composição do nome do componente usei a seguinte nomenclatura Spb_1, Spb_2, Spb_3 e assim sucessivamente ate chegar ao botao 55.

minha duvida e o seguinte como pos passar o numero do botao para completar seu nome , ou seja quero tornar o botao 40 por exemplo invisivel queria fazer o seguinte Spb_ + numero + proprieddae ou seja quero so informar o numero do botao na descricao o Spb_ seria padrão e a propriedade tambem. acho que deu para me explicar, eu so passaria o numero desejado e o sistema completaria o comando ficando da seguinte forma Spb_20.visible:= False, hoje eu uso o case e conforme o numero indicado ele usaria o comando certo, mas pense soa 55 botao para tornar invisivel e 55 para tornar visivel. atrazes da opçaõ que solicito so vou ter uma linha, ou melhor 2, so ficando para er passado o numero para completar o comando.

ajudem-me acho que deve ser facil, e confeço nao ter tentado fazer ainda uma tentativa para resolver.

pensei a seguinte forma 'Spb_'+Variavel+'.visible:= False', mas isso seria um texto como transformaria em comando

complicado


Olá Edson, bom acho q vc precisa de um loop para percorrer esses botões, segue um exemplo:

procedure TForm1.btnLimpaCamposClick(Sender: TObject);
var
   i: Integer;
begin
    //Contador que verifica todos os componentes do Form
    for i := 0 to ComponentCount -1 do
    begin
        //Verifica se o objeto é do tipo TSpeedButton
        if (Components[i] is TSpeedButton) then

            //Verifica o nome do TSpeedButton
            if (Components[i] as TSpeedButton).Name = NomedoBotão then
               (Components[i] as TSpeedButton).Visible = false;
    end;
end;
Responder

Gostei + 0

28/09/2012

William

Desculpe Edson a postagem acabou saindo duplicada e com informações desnecessárias, caso não seja esse o seu problema é só avisar que bolamos outra solução.
Responder

Gostei + 0

28/09/2012

Edson Melo

meu caro amigo, nao e bem isso so gostaria de passar o numero por referencia.

ja li muito a este respeito quando eu programava em clipper, mas me esqueci e tambem tudo mudor o laço ficaria coomo uso hoje seria trocar 6 por meia duzia

mas não vou me desesperar sei que conseguiremos chegar a um bom resultado
Responder

Gostei + 0

28/09/2012

Marcos Iwazaki

Ola amigo.
vc pode fazer assim
SeuForm.FindComponent(NomeDoComponenteEmString)
esta function retorn um TComponent
então p ter acesso as prop do speedbutton
faça assim:
if SeuForm.FindComponent(NomeDoComponenteEmString) is TSpeedButton then
TSpeedButton(SeuForm.FindComponent(NomeDoComponenteEmString)).visible

espero ter ajudado.



meu caro amigo, nao e bem isso so gostaria de passar o numero por referencia.

ja li muito a este respeito quando eu programava em clipper, mas me esqueci e tambem tudo mudor o laço ficaria coomo uso hoje seria trocar 6 por meia duzia

mas não vou me desesperar sei que conseguiremos chegar a um bom resultado
Responder

Gostei + 0

29/09/2012

Edson Melo

ola amigos voces nao entenderam, do geito que voces me dizem , acho melhor continuar com minha opção que é assim


case StrToInt(Label3.caption) do
1 : Spb_1.visible:= False
2 : Spb_2.Visible:= False
3 : Spb_3.Visible:= False
4 : Spb_4.Visible:= False
5 : Spb_5.Visible:= False
6 : Spb_6.Visible:= False
7 : Spb_7.Visible:= False
8 : Spb_8.Visible:= False
9 : Spb_9.Visible:= False

..... e assim por diante ate chegar ao 55


so passo o numero do botao e o case se encarrega de executar o comando. so que são 55 botoes, esse case fica enorme e são 2 case um habilitando e outro desabilitando.

sei que tem como fazer do jeito que eu imagino. elpassaria o numero e o sistema completaria o comando Spb_ .Visible:= False; onde o espaço vazio seria completado com o numero e o comando seria executado
Responder

Gostei + 0

29/09/2012

Edson Melo

meu caro amigo socram, vendo melhor seu exemplo acho que talves funcione, vou analizar melhor
pode ser que resolva meu problema, pois monto o nome do componente como se fosse um texto e o comando fax a substituição

depois te respondo o que achei

obrigado

mas mesmo assim continuo a busca de uma solução mais simples, agora me correu uma ideia , cada componente tem um indice, e se eu passe o indice no comando ......componente.visible:= False. o numero do indice deveria ser igualao numero do botao para que essa minha ideia funcionase, so que não sei coomo por essa ideia em pratica.

ai sim e que chegaria o mais perto possivel do que eu quero.

me ajudem pr favor , quem souber executar isto que pensei



Responder

Gostei + 0

01/10/2012

Marcos Iwazaki

case StrToInt(Label3.caption) do
1 : Spb_1.visible:= False
2 : Spb_2.Visible:= False
3 : Spb_3.Visible:= False
4 : Spb_4.Visible:= False
5 : Spb_5.Visible:= False
6 : Spb_6.Visible:= False
7 : Spb_7.Visible:= False
8 : Spb_8.Visible:= False
9 : Spb_9.Visible:= False

vou exemplificar melhor o que eu disse...

talvez a sintaxe esteja errada pois estou sem o delphi aqui

for I:=0 to MeuForm.componentcount -1 do begin
if meuForm.components[i] is TSpeedButton then begin
if Assinged (TSpeedButton(meuForm.components[i])) then begin
if TSpeedButton(meuForm.components[i]).name = 'Spb_'+Label3.caption //aqui vc formata o nome certinho
TSpeedButton(meuForm.components[i]).visible := false;
break; //para sair do for, pois ja achou o q precisava. Evita gastar processamento sem necessidade.
end;
end;
end; //for

se não esqueci de nada deve ser isso..

meu caro amigo socram, vendo melhor seu exemplo acho que talves funcione, vou analizar melhor
pode ser que resolva meu problema, pois monto o nome do componente como se fosse um texto e o comando fax a substituição

depois te respondo o que achei

obrigado

mas mesmo assim continuo a busca de uma solução mais simples, agora me correu uma ideia , cada componente tem um indice, e se eu passe o indice no comando ......componente.visible:= False. o numero do indice deveria ser igualao numero do botao para que essa minha ideia funcionase, so que não sei coomo por essa ideia em pratica.

ai sim e que chegaria o mais perto possivel do que eu quero.

me ajudem pr favor , quem souber executar isto que pensei



Responder

Gostei + 0

01/10/2012

Marcos Iwazaki

opa esqueci de postar a outra parte...
vc pode fazer assim tbm
var
  aux :TSpeedButton;
begin
  aux := meuForm.FindComponent('Spb_'+Label3.caption) //aqui vc formata o nome certinho
  if Assinged (aux) then begin
    TSpeedButton(aux).visible := false;
end

Responder

Gostei + 0

01/10/2012

Edson Melo

ola socram vou testar e depois te respondo, acho que voce entendeu em vez de ter varias linhas para rodar o comando, eu gostaria de ter apenas uma e que fizesse o serviço todo

mas vou tentar espere que te respondo]
Responder

Gostei + 0

26/10/2012

Claudia Nogueira

  TSpeedButton(FindComponent('Spb_'+Label3.Caption)).Visible := False;


ola socram vou testar e depois te respondo, acho que voce entendeu em vez de ter varias linhas para rodar o comando, eu gostaria de ter apenas uma e que fizesse o serviço todo

mas vou tentar espere que te respondo]
Responder

Gostei + 0

12/08/2015

Diego Jacauna

Ótima Dica!!! Estava procurando isso faz tempo!

  TSpeedButton(FindComponent('Spb_'+Label3.Caption)).Visible := False;


ola socram vou testar e depois te respondo, acho que voce entendeu em vez de ter varias linhas para rodar o comando, eu gostaria de ter apenas uma e que fizesse o serviço todo

mas vou tentar espere que te respondo]
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar