この記事では、例を使用して、Delphi を使用してピンボール効果に似たボールの衝撃を実現する方法を説明します。 「スタート」ボタンをクリックすると、フォーム内の緑色のボールが打ち続けられ、左右に動き、その大きさが変化し続けます。 「停止」ボタンをクリックするとボールを停止します。マウスを使用して右下の調整コントロールをドラッグし、ボールの速度を調整します。
ここでは主に、Timer コントロール、Panel コントロール、TrackBar コントロール、SpinEdit コントロール、Shape コントロール、Button コントロールを使用してそれを実現します。 Delphi のタイマー コントロールに焦点を当てています。プログラムの実行中は、コントロールは表示されず、直接操作することはできません。 Timer コントロールは、定期的に OnTimer() イベントを自動的にトリガーします。この例では、これを使用してボール移動イベントをトリガーします。
設計思想: このプログラムによって解決される主な問題は、ボールの動きと、その動作中のボールの速度とサイズをどのように制御するかです。 Timer コントロールの OnTimer() イベントを使用してボールの動きを制御し、TrackBar コントロールと SpinEdit コントロールを使用してボールの動きの速度を調整します。ボールは Shape コントロールによって生成されます。
1つ。新築:
(1) Delphi 6.0 プログラムを起動します。 [ファイル] メニューの [新規] コマンドを選択し、ポップアップ サブメニューから [アプリケーション] オプションを選択すると、新しいプロジェクトの Form1 ウィンドウが表示されます。
(2) 「ファイル」メニューの「名前を付けてプロジェクトを保存」を選択すると、「Unit1 に名前を付けて保存」ダイアログが表示されます。 「保存する場所」リストボックスで、ウィンドウファイルを保存するディレクトリ名を選択し、「ファイル名」編集ボックスにファイル名を入力し、ここに「Unit1」と入力して、「保存」ボタンをクリックします。上記のオプションを保存します。
(3) 前の手順を実行すると、「名前を付けてプロジェクトを保存」ダイアログボックスが表示されます。 [保存する場所] リスト ボックスで、プロジェクトを保存する必要があるディレクトリ名を選択します。 [ファイル名] 編集ボックスでは、手順 (2) と同じディレクトリを選択するのが最適です。プロジェクトのソース コードを保存するには、ここに「Project1」を入力し、「保存」ボタンをクリックして上記のオプションを保存します。
二。いくつかのパラメータ設定:
(1) Unit1 ウィンドウをアクティブにし、「プロパティ」パネルでフォームの Caption プロパティを「Moving Sphere」に、Color プロパティを「clMoneyGreen」に設定します。
(2) 「標準」ページで「パネル」オプションを選択し、フォームにパネル コントロールを追加し、適切なサイズと位置を調整して、「プロパティ」パネルでコントロールの Name プロパティを「Panel1」に設定し、BevelInner "bvLowered" "、BevelOuter は "blNone"、BorderStyle は "bsSingle" に設定され、Color プロパティは "clSkyBlue" に設定されます。
(3) 「システム」ページで「タイマー」オプションを選択し、フォームにタイマー コントロールを追加し、オブジェクト インスペクター パネルでその Interval プロパティを 1 に、Name プロパティを「Timer1」に設定します。
(4) 「追加」ページで「形状」オプションを選択し、フォームのPanel1に形状コントロールを追加し、「プロパティ」パネルでその「ヒントを表示」プロパティを「True」に設定し、「ヒント」プロパティを「スポーツ球」に設定します。 Brush.Color プロパティは ClLime で、その Shape プロパティは「slCircle」に設定されています。
(5) [標準] ページで [ボタン] オプションを選択し、フォームに 3 つのボタン コントロールを追加し、適切なサイズと位置を調整します。 「プロパティ」パネルでキャプションのプロパティをそれぞれ「開始」、「停止」、「終了」に設定します。
(6) Win 32 ページで TrackBar オプションを選択し、TrackBar コントロールをフォームに追加し、適切なサイズと位置を調整します。 [プロパティ] パネルで適切なプロパティを設定します。
(7) サンプルで SpinEdit オプションを選択し、SpinEdit コントロールをフォームに追加し、適切なサイズと位置を調整します。 [プロパティ] パネルで適切なプロパティを設定します。
3. コード分析:
(1) ボールが往復する機能を実現するには、整数 I というグローバル変数を設定する必要があります。I の初期値は 1 です。 I=1の場合、ボールは左に移動し、パネルの左の壁に当たるとI値は2になります。このときボールは右に移動し、パネルの右の壁に当たるとI値は2になります。 、I 値は再び 1 になります。このように、I値の変化によりボールの前後運動が実現されます。コードのこの部分は OnTimer イベント内にあります。
procedure TForm1.Timer1Timer(Sender: TObject);beginTimer1.interval:=trackbar1.position; //タイマー コントロールのトリガー時間間隔を設定します if i=1 then //ボールは左に移動 beginifshape1.left>0 thenbeginshape1 .left: =shape1.left-10; //ボールの位置を変更しますshape1.Width:=(shape1.Width+1)mod 70; //ボールが配置されている長方形の幅を変更します。shape1.Height:=(shape1.Height+1)mod 70 //ボールが配置されている長方形の高さを変更します。endelsei:=2;ボールを右端に;i=2 の場合、beginifshape1.left<(panel1.Width-shape1.Width-5) thenbeginshape1.left:=shape1.left+10; //ボールの位置を変更しますshape1.Width:=(shape1.Width+1)mod 70;//ボールが配置されている長方形の幅を変更しますshape1.Height:=(shape1.Height+1)mod 70 ;/ /ボールが配置されている長方形の高さを変更しますendelsei:=1;end;end;
(2) 「開始」ボタンと「停止」ボタンは、ボールが動くかどうかを制御します。実際には、タイマーが機能するかどうかを制御します。
procedure TForm1.Button1Click(Sender: TObject);beginTimer1.interval:=trackbar1.position; //タイマー コントロールのトリガー間隔を設定します Timer1.Enabled:=true; //ボールが動き始めますend;procedure TForm1.Button2Click(Sender) : TObject);beginTimer1.Enabled:=False //ボールの動きが止まるend;
(3) TrackBar と SpinEdit の 2 つのコントロールは、ボールの動きの速度を制御します。対応するコードは次のとおりです。
process TForm1.SpinEdit1Change(Sender: TObject);begintrackbar1.position:=spinEdit1.Value; //移動速度を変更しますend;procedure TForm1.TrackBar1Change(Sender: TObject);beginspinEdit1.value:=trackbar1.Position; //トラックバーを変更しますvalue SpinEdit コントロールに変更を通知します。send;
4. Delphi ピンボールの完全なコードは次のとおりです。
ユニット Unit1;インターフェイスは Windows、メッセージ、SysUtils、クラス、グラフィックス、コントロール、フォーム、ダイアログ、ExtCtrls、ComCtrls、StdCtrls、Spin を使用;typeTForm1 = class(TForm)Panel1: TPanel;Button1: TButton;Button2: TButton;TrackBar1: TTrackBar;Timer1 : TTimer;形状 1: TShape;SpinEdit1: TSpinEdit;Button3: TButton;プロシージャ Timer1Timer(Sender: TObject);プロシージャ Button1Click(Sender: TObject);プロシージャ Button2Click(Sender: TObject);プロシージャ SpinEdit1Change(Sender: TObject);プロシージャ TrackBar1Change(Sender: TObject);プロシージャ Button3Click(送信者: TObject);private{ プライベート宣言 }public{ パブリック宣言 }end;varForm1: TForm1;i:integer;implementation{$R *.DFM}procedure TForm1.Timer1Timer(Sender: TObject);beginTimer1.interval:=trackbar1.position; //タイマー コントロールのトリガー時間間隔を設定します if i=1 then //ボールは左に移動します beginif Shape1.left>0 thenbeginshape1.left:=shape1.left-10; //ボールの位置を変更しますshape1.Width:=(shape1.Width+1)mod 70;//ボールが配置されている長方形の幅を変更しますshape1.Height := (shape1.Height+1)mod 70;//ボールが配置されている長方形の高さを変更しますendelsei:=2 //ボールは右端に移動します;if i=2 thenbeginif shape1.left<(panel1.Width-shape1.Width-5) thenbeginshape1.left:=shape1.left+10; //ボールの位置を変更しますshape1.Width:=(shape1.Width+1)mod / /ボールが配置されている長方形の幅を変更しますshape1.Height:=(shape1.Height+1)mod 70;//ボールが配置されている長方形の高さを変更しますendelsei:=1;end;end;procedure TForm1.Button1Click(Sender: TObject);beginTimer1.interval:=trackbar1.position; //トリガー時間間隔を設定します。タイマー コントロール Timer1 .Enabled:=true; //ボールが動き始めるend;procedure TForm1.Button2Click(Sender: TObject);beginTimer1.Enabled:=False; //ボールの動きが停止end;procedure TForm1.SpinEdit1Change(Sender: TObject);begintrackbar1.position:=spinEdit1.Value //移動速度を変更end;procedure TForm1.TrackBar1Change(Sender : TObject);beginspinEdit1.value:=trackbar1.Position; //SpinEdit コントロールにトラックバーの値の変更を通知しますend;procedure TForm1.Button3Click(Sender: TObject);beginclose; //Exitend;initializationi:=1;end.