Este artigo usa exemplos para descrever o método de uso do Delphi para obter o impacto de uma bola, semelhante ao efeito pinball. Clique no botão "Iniciar" e uma bola verde no formato continuará a bater e se mover para a esquerda e para a direita, e seu tamanho continuará mudando. Clique no botão "Parar" para parar a bola. Use o mouse para arrastar o controle de ajuste no canto inferior direito para ajustar a velocidade da bola.
Aqui usamos principalmente controle de temporizador, controle de painel, controle TrackBar, controle SpinEdit, controle de forma e controle de botão para alcançá-lo. O foco está no controle Timer do Delphi. Enquanto o programa está em execução, o controle não fica visível e não pode ser manipulado diretamente. O controle Timer aciona automaticamente o evento OnTimer() em intervalos regulares. Este exemplo o utiliza para acionar o evento de movimento da bola.
Idéia de design: O principal problema a ser resolvido por este programa é como controlar o movimento da bola e a velocidade e tamanho da bola durante o movimento. Use o evento OnTimer() do controle Timer para controlar o movimento da bola; use o controle TrackBar e o controle SpinEdit para ajustar a velocidade do movimento da bola. A bola é gerada pelo controle Shape.
um. Nova construção:
(1) Inicie o programa Delphi 6.0. Selecione o comando “Novo” no menu “Arquivo”, selecione a opção Aplicativo no submenu pop-up e a janela Form1 do novo projeto aparecerá.
(2) Selecione o comando "Salvar projeto como" no menu "Arquivo" para abrir a caixa de diálogo Salvar Unidade1 como. Na caixa de listagem "Salvar em", selecione o nome do diretório onde o arquivo da janela precisa ser armazenado; preencha o nome do arquivo na caixa de edição "Nome do arquivo", preencha "Unit1" aqui e clique no botão "Salvar". para salvar as opções acima.
(3) Após executar a etapa anterior, a caixa de diálogo "Salvar projeto como" aparecerá. Na caixa de listagem "Salvar em", selecione o nome do diretório onde o projeto precisa ser armazenado. É melhor selecionar o mesmo diretório da etapa (2); para salvar o código fonte do projeto Preencha aqui "Projeto1" e clique no botão "Salvar" para salvar as opções acima.
dois. Algumas configurações de parâmetros:
(1) Ative a janela Unit1, defina a propriedade Caption do formulário como "Moving Sphere" e a propriedade Color como "clMoneyGreen" no painel "Properties".
(2) Selecione a opção Painel na página "Padrão", adicione o controle Painel no formulário, ajuste seu tamanho e posição apropriados e defina a propriedade Nome do controle no painel "Propriedades" como "Panel1" e o BevelInner para "bvLowered" ", BevelOuter é "blNone", BorderStyle é definido como "bsSingle" e a propriedade Color é definida como "clSkyBlue".
(3) Selecione a opção Timer na página "Sistema", adicione um controle Timer ao formulário e defina sua propriedade Interval como 1 e a propriedade Name como "Timer1" no painel Object Inspector.
(4) Selecione a opção Shape na página "Additional", adicione um controle Shape no Panel1 do formulário, defina sua propriedade Show Hint como "True" e a propriedade Hint como "Sports Sphere" no painel "Properties". A propriedade Brush.Color é ClLime e sua propriedade Shape está definida como "slCircle".
(5) Selecione a opção Botão na página "Padrão", adicione três controles de botão ao formulário e ajuste seu tamanho e posição apropriados. Defina suas propriedades de legenda no painel “Propriedades” para “Iniciar”, “Parar” e “Sair”, respectivamente.
(6) Selecione a opção TrackBar na página Win 32, adicione o controle TrackBar ao formulário e ajuste seu tamanho e posição apropriados. Defina suas propriedades apropriadas no painel Propriedades.
(7) Selecione a opção SpinEdit em Samples, adicione o controle SpinEdit ao formulário e ajuste seu tamanho e posição apropriados. Defina suas propriedades apropriadas no painel Propriedades.
3. Análise de código:
(1) Para realizar a função da bola se movendo para frente e para trás, uma variável global precisa ser definida, ou seja, o inteiro I. O valor inicial de I é 1. Quando I=1, a bola se move para a esquerda, e quando atinge a parede esquerda do painel, o valor I passa a ser 2. Neste momento, a bola se move para a direita, e quando atinge a parede direita do painel , o valor I torna-se 1 novamente. Desta forma, através da mudança do valor I, o movimento para frente e para trás da bola é realizado. Esta parte do código está no evento OnTimer:
procedimento TForm1.Timer1Timer(Sender: TObject);beginTimer1.interval:=trackbar1.position; //Definir o intervalo de tempo de disparo do controle Timer se i=1 then //A bola se move para a esquerda startif shape1.left>0 thenbeginshape1 .left: =shape1.left-10; //Alterar a posição da bola shape1.Width:=(shape1.Width+1)mod 70; //Alterar a largura do retângulo onde a bola está localizada shape1.Height:=(shape1.Height+1)mod 70 //Alterar a altura do retângulo onde a bola está localizada endelsei:=2; bola para a extremidade direita; se i=2 então comece se shape1.left<(panel1.Width-shape1.Width-5) thenbeginshape1.left:=shape1.left+10; //Alterar a posição da bola shape1.Width:=(shape1.Width+1)mod 70;//Alterar a largura do retângulo onde a bola está localizada shape1.Height:=(shape1.Height+1)mod 70 ;/ /Altera a altura do retângulo onde a bola está localizadaendelsei:=1;end;end;
(2) Os botões “Iniciar” e “Parar” controlam se a bola se move. Na verdade, eles controlam se o cronômetro funciona:
procedimento TForm1.Button1Click(Sender: TObject);beginTimer1.interval:=trackbar1.position; //Definir o intervalo de disparo do controle Timer Timer1.Enabled:=true //A bola começa a se moverend;procedure TForm1.Button2Click(Sender; : TObject);beginTimer1.Enabled:=False; //A bola para de se moverend;
(3) Os dois controles TrackBar e SpinEdit controlam a velocidade do movimento da bola. Os códigos correspondentes são os seguintes:
procedimento TForm1.SpinEdit1Change(Sender: TObject);begintrackbar1.position:=spinEdit1.Value; //Alterar a velocidade do movimento;procedure TForm1.TrackBar1Change(Sender: TObject);beginspinEdit1.value:=trackbar1.Position; valor Notifica o controle SpinEdit sobre alterações;
4. O código completo do pinball Delphi é o seguinte:
unit Unit1;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ExtCtrls, ComCtrls, StdCtrls, Spin;typeTForm1 = class(TForm)Panel1: TPanel;Button1: TButton;Button2: TButton;TrackBar1: TTrackBar;Timer1 : TTimer;Forma1: TShape;SpinEdit1: TSpinEdit;Button3: TButton;procedimento Timer1Timer(Sender: TObject);procedimento Button1Click(Sender: TObject);procedimento Button2Click(Sender: TObject);procedimento SpinEdit1Change(Sender: TObject);procedimento TrackBar1Change(Sender: TObject); procedimento Button3Click(Remetente: TObject);private{ Declarações privadas }public{ Declarações públicas }end;varForm1: TForm1;i:integer;implementação{$R *.DFM}procedimento TForm1.Timer1Timer(Sender: TObject);beginTimer1.interval:=trackbar1.position; //Definir o intervalo de tempo de acionamento do controle Timer se i=1 então //A bola se move para a esquerda startif shape1.left>0 thenbeginshape1.left:=shape1.left-10; //Alterar a posição da bola shape1.Width:=(shape1.Width+1)mod 70;//Alterar a largura do retângulo onde a bola está localizada shape1.Height := (shape1.Height+1)mod 70;//Altera a altura do retângulo onde a bola está localizadaendelsei:=2;/A bola se move para a extremidade direita;if i=2 thenbeginif; shape1.left<(panel1.Width-shape1.Width-5) thenbeginshape1.left:=shape1.left+10 //Alterar a posição da bola shape1.Width:=(shape1.Width+1)mod 70; /Alterar a largura do retângulo onde a bola está localizada shape1.Height:=(shape1.Height+1)mod 70;//Altera a altura do retângulo onde a bola está localizadaendelsei:=1;end;end;procedure TForm1.Button1Click(Sender: TObject);beginTimer1.interval:=trackbar1.position; //Definir o intervalo de tempo de disparo de o controle do temporizador Timer1 .Enabled:=true //A bola começa a se moverend;procedure TForm1.Button2Click(Sender: TObject);beginTimer1.Enabled:=False; //A bola para de se moverend;procedure TForm1.SpinEdit1Change(Sender: TObject);begintrackbar1.position:=spinEdit1.Value //Altera a velocidade do movimentoend;procedure TForm1.TrackBar1Change(Sender : TObject);beginspinEdit1.value:=trackbar1.Position; //Notifica o controle SpinEdit sobre alterações no valor do Trackbarend;procedure TForm1.Button3Click(Sender: TObject);beginclose;