Como manter um botão pressionado?
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
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
Curtidas 0
Respostas
Chambioso
19/04/2004
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.!!!!
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.!!!!
GOSTEI 0
Rafael.valler
19/04/2004
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]
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]
GOSTEI 0
Tenil
19/04/2004
[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:
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;
GOSTEI 0
Marco Salles
19/04/2004
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;
GOSTEI 0
Bacalhau
19/04/2004
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
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
GOSTEI 0
Marco Salles
19/04/2004
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]....
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;
GOSTEI 0
Tenil
19/04/2004
Marco Salles, funcionou.
Valeu mano.
Valeu mano.
GOSTEI 0