Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Imagem correndo no form


Eder

Pergunta

Ola...procurei no forum e não achei nada .....sei que uma vez aprendi a fazer num curso que fiz a muito tempo, mas não me lembro mais...

precisaria fazer uma imagem ficar se movendo na tela......tipo um carrinho que entra no canto esquerdo do form e vai até o direito e depois volte de novo, repetindo o processo....

tentei fazer com imagem1.left dando o valor a ela...num timer, mas não ficou legal.

alguém tem um exemplinho?

Grato

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0
precisaria fazer uma imagem ficar se movendo na tela......tipo um carrinho que entra no canto esquerdo do form e vai até o direito e depois volte de novo, repetindo o processo....

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  for i := 8 to 544 do begin
    sleep(50);
    Image1.Left := i;
    Image1.Refresh;
  end;
end;

OBS: quando o for terminar voce recomeça o processo novamente

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Eder, como os colegas praticamente resolveram a questão vou deixar um exemplo que uso, neste exemplo a imagem vai até a borda do Form e volta.

...
var
  Form1: TForm1;
   x: Integer = 1; 

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 Timer1.Interval := 10;
 Form1.DoubleBuffered:=True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
    Image1.Left:=Image1.Left + x;
    if Image1.Left>ClientWidth - Image1.Width-1 then
      begin
        x := x * -1;
             end;
    if Image1.Left<1 then
      begin
        x := x * -1;
      end;
  end;
end.

Como você disse que é para um carro, neste caso ele vai voltar de ré, para resolver isso basta você repetir o código para a segunda imagem com o carro invertido deixando-a invisível, assim quando a imagem1 chegar a borda direita do Form ela some e a imagem2 aparece e quando a imagem 2 chegar na borda esquerda ela some e a imagem1 reaparece sucessivamente.

Boa sorte.

Link para o comentário
Compartilhar em outros sites

  • 0
Como você disse que é para um carro, neste caso ele vai voltar de ré, para resolver isso basta você repetir o código para a segunda imagem com o carro invertido deixando-a invisível, assim quando a imagem1 chegar a borda direita do Form ela some e a imagem2 aparece e quando a imagem 2 chegar na borda esquerda ela some e a imagem1 reaparece sucessivamente.

Aleksander, dá para utilizar a mesma imagem. Basta fazer um flip horizontal da mesma. O procedimento é o mesmo: ao atingir a margem direita ou esquerda é só inverter a imagem - veja como

with Image1.Picture.Bitmap do
  Canvas.CopyRect(Canvas.ClipRect, Canvas, Rect(Width-1, 0, -1, Height));

O código é só este para as duas situações.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Ola..pessoal.

muito Grato pelas ajudas...

Gostei muito da dica do Aleksander

porém......seguinte..

notei que o carrinho sai da esquerda e vai até a direita...e depois como o Aleksander menciona...ele volta de ré...

não teria como ele sair da esquerda e quando chegar na margem direita, ele ir tipo sumindo.....pois senão acho que fica meio esquisito, pois como quando na diteira que ele bica a margem direito, e some rapidinho.......

Teria como fazer assim??

valeu...pessoal

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Como você disse que é para um carro, neste caso ele vai voltar de ré, para resolver isso basta você repetir o código para a segunda imagem com o carro invertido deixando-a invisível, assim quando a imagem1 chegar a borda direita do Form ela some e a imagem2 aparece e quando a imagem 2 chegar na borda esquerda ela some e a imagem1 reaparece sucessivamente.

Aleksander, dá para utilizar a mesma imagem. Basta fazer um flip horizontal da mesma. O procedimento é o mesmo: ao atingir a margem direita ou esquerda é só inverter a imagem - veja como

with Image1.Picture.Bitmap do
  Canvas.CopyRect(Canvas.ClipRect, Canvas, Rect(Width-1, 0, -1, Height));
O código é só este para as duas situações. Abraços
Micheus, perfeito!! Abraço
Ola..pessoal. muito Grato pelas ajudas... Gostei muito da dica do Aleksander porém......seguinte.. notei que o carrinho sai da esquerda e vai até a direita...e depois como o Aleksander menciona...ele volta de ré... não teria como ele sair da esquerda e quando chegar na margem direita, ele ir tipo sumindo.....pois senão acho que fica meio esquisito, pois como quando na diteira que ele bica a margem direito, e some rapidinho....... Teria como fazer assim?? valeu...pessoal abraço
Eder, o colega Micheus resolveu o problema do carro voltar de ré, você vai achar muito interessante, assim que a imagem toca a borda do Form ela é invertida, use uma imagem .BMP.
...
var
  Form1: TForm1;
   x: Integer = 1; 

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Interval := 10;
Form1.DoubleBuffered:=True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
    Image1.Left:=Image1.Left + x;
    if Image1.Left>ClientWidth - Image1.Width-1 then
      begin
        x := x * -1;
    with Image1.Picture.Bitmap do
    Canvas.CopyRect(Canvas.ClipRect, Canvas, Rect(Width-1, 0, -1, Height));
             end;
    if Image1.Left<1 then
      begin
        x := x * -1;
   with Image1.Picture.Bitmap do
   Canvas.CopyRect(Canvas.ClipRect, Canvas, Rect(Width-1, 0, -1, Height));
      end;
  end;
end.

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Ola..carinha...beleza?

testei....e a imagem...e ela não inverte e volta novamente...simplismente ela quando bate na borda direita....some...não aparecendo mais... :blush:

é isto mesmo??

Grato

Editado por Eder
Link para o comentário
Compartilhar em outros sites

  • 0
Ola..carinha...beleza?

testei....e a imagem...e ela não inverte e volta novamente...simplismente ela quando bate na borda direita....some...não aparecendo mais... :blush:

é isto mesmo??

Grato

Eder, se você usar imagem com extensão JPG acontecerá isso que você relatou, use imagem com extensão BMP, por exemplo nomedaimagem.bmp.

No entanto, vou deixar outro código onde a imagem não bate e volta, ela some na direita e reaparece na esquerda, como neste código não há inversão pode usar imagem JPG ou BMP.

Se não desejar que a barra de Scroll horizontal apareça no Form quando a imagem tocar na borda direita, na propriedade do Form basta deixar HorzScrollBar | Visible como False.

var
  Form1: TForm1;
  x: Integer = 1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 Timer1.Interval := 10;
 Form1.DoubleBuffered:=True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
    image1.Left:=image1.Left + x;
    if image1.Left>ClientWidth then
    image1.Left:=ClientWidth - (ClientWidth + Image1.Width);
   end;
end.

Boa sorte.

Link para o comentário
Compartilhar em outros sites

  • 0

Eder, se você usar imagem com extensão JPG acontecerá isso que você relatou, use imagem com extensão BMP, por exemplo nomedaimagem.bmp.

R.: beleza..desculpa não havia me tocado..

No entanto, vou deixar outro código onde a imagem não bate e volta, ela some na direita e reaparece na esquerda, como neste código não há inversão pode usar imagem JPG ou BMP.

Se não desejar que a barra de Scroll horizontal apareça no Form quando a imagem tocar na borda direita, na propriedade do Form basta deixar HorzScrollBar | Visible como False.

R.: Beleza..Carinha isto mesmo que eu precisava.

Grande abraço...

:D

valeu

Link para o comentário
Compartilhar em outros sites

  • 0

Olá pessoal, bom dia. Estou montando uma aplicação e tem algo que preciso e seria bem parecido com o que vocês estão discutindo aqui. Seria o seguinte, preciso que repita a imagem uma a baixo da outra, é uma aplicação para celular, então preciso que repita essas imagens onde o nome da imagem vem de um banco de dados Mysql, o loop da imagem eu já tenho, agora preciso saber somente como faria para o quadro ir se repetindo um abaixo do outro. Desde já agradeço. Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

Gostaria de deixar o código que já tenho aqui para verem se podem me ajudar. E desculpe por reabrir algo que está resolvido. Grato

 

procedure TForm1.Button1Click(Sender: TObject);
var
  STRM: Tmemorystream;
  HTTP: TIdHTTP;
  nome, link, img2: string;
begin
query.Close;
query.SQL.Clear;
query.SQL.Add('select * from dados');
query.Open;

while not query.Eof do
begin
nome := query.FieldByName('img').AsString;
  link := 'http://www.techmach.2fh.co/imagens/' + nome;
  label1.Text := link;
  Memo1.Lines.Add(query.FieldByName('img').Value);
  query.Next;
    end;

  HTTP := TIdHTTP.Create(nil);
  STRM := Tmemorystream.Create;
  try
    HTTP.Get (link, STRM);
    STRM.Position := 0;
    img.Bitmap.LoadFromStream(STRM);
    except
  end;
  STRM.Free;
  end;

end.

 

Da forma em que está ele coloca na mesma timage e eu preciso que ele vá criando uma abaixo da outra.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...