Fórum Como manter um botão pressionado? #227008

19/04/2004

0

Olá colegas,

o problema é o seguite:

[b:5269438e3a]Momento 1:[/b:5269438e3a]
Tenho um [b:5269438e3a]edit[/b:5269438e3a] que, a princípio, está ReadyOnly=[u:5269438e3a]true[/u:5269438e3a], e um [b:5269438e3a]botão[/b:5269438e3a] (ainda não sei qual usar: bitbtn, speedbutton ou button) ao lado do edit que, a princípio, deverá estar com uma figura de um cadeado fechado.

[b:5269438e3a]Momento 2:[/b:5269438e3a]
Quando o usuário clicar no [b:5269438e3a]botão[/b:5269438e3a] ele deverá continuar pressionado e com uma figura de cadeado aberto. Ao mesmo tempo o [b:5269438e3a]edit[/b:5269438e3a] deverá mudar de estado para ReadyOnly=[u:5269438e3a]false[/u:5269438e3a].

Ao se clicar novamente no botão voltamos ao Momento 1.

O funcionamento é idêntico ao componente CheckBox, o problema é que tenho que fazer isto usando a figura do cadeado.

É simples, mas não sei como fazer o botão.

Por favor, ajudem-me.

Obrigado


Tenil

Tenil

Responder

Posts

19/04/2004

Chambioso

Eu fiz uma coisa parecida com isso.
Usei um speedbutton, ele tem a propiedade dwon.
Voçê pode controlar no evento onclick mudando a propiedade dwon e a figura.

Espero que tenha te ajudado.!!!!


Responder

Gostei + 0

20/04/2004

Rafael.valler

Tenta:

Coloca um ImageList com os Glyphs dos dois cadeados.

//No OnClick do Botão:

If speedbutton1.tag = 0 then
Begin
speedbutton1.down:= True;
speedbutton1.Glyph := nil;
ImageList1.GetBitmap(0,speedbutton1.Glyph);
Edit1.ReadyOnly:=false;
speedbutton1.tag := 1;
End
Else
Begin
speedbutton1.down:= False;
speedbutton1.Glyph := nil;
ImageList1.GetBitmap(1,speedbutton1.Glyph);
Edit1.ReadyOnly:= True;
speedbutton1.tag := 0;
End;[code:1:ed7581c7b3][/code:1:ed7581c7b3]


Responder

Gostei + 0

20/04/2004

Tenil

[b:5ed4164b15]chambioso[/b:5ed4164b15],
o problema é que tenho apenas 1 botão, essa propriedade só funciona quando temos mais de um. Fica funcionando igual aos RadioButtons.

[b:5ed4164b15]rafael.valler[/b:5ed4164b15],
funcionou legal. Só não funcionou o speedbutton1.down:= False; pq, como disse ao chambioso, só tenho um botão na tela.

Se alguém souber de algum componente que faça isso automaticamente, por favor me diga.

Obrigado a todos.

Eis o código:
  // Tag = 0, o cadeado está fechado
  if SpeedButton1.Tag = 0 then
  begin
    SpeedButton1.Glyph := nil;
    ImageList1.GetBitmap(1, SpeedButton1.Glyph);
    SpeedButton1.Tag   := 1;
    EdtNome.Enabled    := True;
    EdtNome.SetFocus;
  end
  else // Tag = 1, o cadeado está aberto
  begin
    SpeedButton1.Glyph := nil;
    ImageList1.GetBitmap(0, SpeedButton1.Glyph);
    SpeedButton1.Tag   := 0;
    EdtNome.Enabled    := False;
  end;



Responder

Gostei + 0

20/04/2004

Marco Salles

Mude a propiedade [b:4a91c0bdaf]GroupIndex[/b:4a91c0bdaf] do SpeedButton1 Para ´um´ em tempo de projeto...Ainda em tempo de projeto selecione a Propiedade [b:4a91c0bdaf]AllowAllUp[/b:4a91c0bdaf] Para[b:4a91c0bdaf] true[/b:4a91c0bdaf]...[b:4a91c0bdaf]Pode deixar [/b:4a91c0bdaf]a Propriedade [b:4a91c0bdaf]Down[/b:4a91c0bdaf] em False
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
If speedbutton1.tag = 0 then
Begin
speedbutton1.Glyph := nil;
ImageList1.GetBitmap(0,speedbutton1.Glyph);
Edit1.ReadOnly:=false;
speedbutton1.tag := 1;
End
Else
Begin
speedbutton1.Glyph := nil;
ImageList1.GetBitmap(1,speedbutton1.Glyph);
Edit1.ReadOnly:= True;
speedbutton1.tag := 0;
End;
end;



Responder

Gostei + 0

20/04/2004

Bacalhau

Parece que a melhor solução é com um speedbutton. O interessante destes botões é que mudam entre down := true e down := false, de cada vez que o clicamos.

Então vamos aproveitar este efeito de ´liga-desliga´. No evento ´onclick´ poderiamos por uma coisa mais ou menos assim.

if sppedbutton1.down = true
then speedbutton1.glyph.picture.loadfromfile(<nome do cadeado aberto>)
else speedbutton1.glyph.picture.loadfromfile(<nome do cadeado fechado>)

edit1.readonly := not edit1.readonly;

Abraço
bacalhau


Responder

Gostei + 0

20/04/2004

Marco Salles

Mude a propiedade [b:da631ccd80]GroupIndex [/b:da631ccd80]do SpeedButton1 Para ´um´ em [b:da631ccd80]tempo de projeto[/b:da631ccd80]...Ainda em tempo de projeto selecione a Propiedade [b:da631ccd80]AllowAllUp Para true[/b:da631ccd80]...[b:da631ccd80]Pode deixar a Propriedade Down em False [/b:da631ccd80]

P:S:Se Deixar [b:da631ccd80]Down[/b:da631ccd80] em true inicialmente se tem a sensação do botão pressionado, se deixar down em false inicialmente o botão fica com a sensação de [b:da631ccd80]não[/b:da631ccd80] estar pressionado...Isto so Funciona com a Propiedade
[b:da631ccd80]GroupIndex[/b:da631ccd80] <>0 (No Caso Igual a 1) e Cetando a Propiedade [b:da631ccd80]AllowAllUp [/b:da631ccd80] inicialmente em [b:da631ccd80]True[/b:da631ccd80]....
procedure TForm1.SpeedButton1Click(Sender: TObject); 
begin 
If speedbutton1.tag = 0 then 
  Begin 
    speedbutton1.Glyph := nil; 
    ImageList1.GetBitmap(0,speedbutton1.Glyph); 
    Edit1.ReadOnly:=false; 
     speedbutton1.tag := 1; 
  end 
Else 
  Begin 
    speedbutton1.Glyph := nil; 
    ImageList1.GetBitmap(1,speedbutton1.Glyph); 
    Edit1.ReadOnly:= True; 
    speedbutton1.tag := 0; 
  end; 
end; 



Responder

Gostei + 0

26/04/2004

Tenil

Marco Salles, funcionou.

Valeu mano.


Responder

Gostei + 0

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

Aceitar