Fórum Pressionando um botão #158592
08/05/2003
0
Por exemplo rolar um ScrollBox enquanto um determindado botão é pressionado, seria funcionar como um dos botões deste mesmo ScrollBox.
O problema é que quando utilizo o onMouseDown por exemplo ele fica em loop infinito...
O q posso fazer?
Grato
Thiago Morasi
Curtir tópico
+ 0Posts
08/05/2003
Marcelo.c
Gostei + 0
08/05/2003
Thiago Morasi
O mais simples seria se tivesse alguma propriedade no botão que indicasse o estado do próprio botão, por exemplo:
evento onMouseDown
begin
while botão.pressionado do
ScrollBox1.HorzScrollBar.Position:= ScrollBox1.HorzScrollBar.Position + 1;
end;
Não sei mais o q fazer...
Gostei + 0
08/05/2003
Okama
Gostei + 0
08/05/2003
Thiago Morasi
Gostei + 0
08/05/2003
Okama
E Teste a propriedade Down:
If SpeedButton1.Down = True then
<botão pressionado>
else
<Botão não pressionado>
Gostei + 0
08/05/2003
Thiago Morasi
while SpeedButton2.Down = true do
ScrollBox1.VertScrollBar.Position:= ScrollBox1.VertScrollBar.Position + 1;
E quando coloco este:
if SpeedButton2.Down = true then
ScrollBox1.VertScrollBar.Position:= ScrollBox1.VertScrollBar.Position + 1;
Tenho que ficar clicando várias vezes no botão para que o ScrollBox vá rolando...
Parece uma coisa simples mas tá me tirando a paciência...
Gostei + 0
08/05/2003
Okama
Se o botão estiver pressionado o Loop do ScrollBox será executado até encontrar o fim (ou começo) ou seja você não precisa testar se o botão está pressionado e sim verificar o fim do ScrollBox.
Ex: (em qualquer botão)
[b:c2498d3f95]Repeat[/b:c2498d3f95]
ScrollBox1.VertScrollBar.Position:= ScrollBox1.VertScrollBar.Position + 1;
[b:c2498d3f95]until[/b:c2498d3f95]
ScrollBox1.VertScrollBar.Position >= ScrollBox1.VertScrollBar.Range - ScrollBox1.ClientHeight;
Gostei + 0
08/05/2003
Thiago Morasi
Gostei + 0
08/05/2003
Okama
Consegui algo de forma idêntica:
Insira um componente timer e defina as propriedades:
Enabled := False;
Interval:= 10;
No evento Ontimer:
procedure TForm1.Timer1Timer(Sender: TObject);
[b:b30e2d8ccf]begin[/b:b30e2d8ccf]
ScrollBox1.VertScrollBar.Position:= ScrollBox1.VertScrollBar.Position + 1;
[b:b30e2d8ccf]end[/b:b30e2d8ccf];
Em qualquer botão nos Eventos OnMouseDown e OnMouseUP
[b:b30e2d8ccf]procedure[/b:b30e2d8ccf] TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
[b:b30e2d8ccf]begin[/b:b30e2d8ccf]
Timer1.Enabled := true;
[b:b30e2d8ccf]end[/b:b30e2d8ccf];
[b:b30e2d8ccf]
procedure [/b:b30e2d8ccf]TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
[b:b30e2d8ccf]begin[/b:b30e2d8ccf]
Timer1.Enabled := False;
[b:b30e2d8ccf]end[/b:b30e2d8ccf];
Para subir use outro botão com outro Timer e coloque no Evento OnTimer :
procedure TForm1.Timer2Timer(Sender: TObject);
[b:b30e2d8ccf]begin[/b:b30e2d8ccf]
ScrollBox1.VertScrollBar.Position:= ScrollBox1.VertScrollBar.Position - 1;
[b:b30e2d8ccf]end[/b:b30e2d8ccf];
Desculpe a confusão, hehe :lol:
Gostei + 0
08/05/2003
Thiago Morasi
Muito obrigado, já estava louco por causa disso...
Gostei + 0
08/05/2003
Werlon Goulart
Basta marcar no botao RXSpeedButton a opcao AllowTimer para True e qndo vc clicar e segurar o botao clicado o evento onclick se repete...
Tem ate como configurar o tempo entre o primeiro evento e os posteriores.
procedure TForm1.RxSpeedButton1Click(Sender: TObject);
begin
inc(i);
label1.Caption:=inttostr(i);
end;
Um Abraço
Werlon Goulart
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)