บทความนี้ใช้ตัวอย่างเพื่ออธิบายวิธีการใช้ Delphi เพื่อให้เกิดการกระแทกของลูกบอล คล้ายกับเอฟเฟ็กต์พินบอล คลิกปุ่ม "เริ่ม" จากนั้นลูกบอลสีเขียวในแบบฟอร์มจะยังคงตีและเคลื่อนที่ไปทางซ้ายและขวา และขนาดของมันจะเปลี่ยนแปลงไปเรื่อย ๆ คลิกปุ่ม "หยุด" เพื่อหยุดลูกบอล ใช้เมาส์ลากตัวควบคุมการปรับที่มุมขวาล่างเพื่อปรับความเร็วของลูกบอล
ที่นี่เราใช้การควบคุมตัวจับเวลา การควบคุมแผงควบคุม การควบคุม TrackBar การควบคุม SpinEdit การควบคุมรูปร่าง และการควบคุมปุ่มเป็นหลักเพื่อให้บรรลุเป้าหมาย โฟกัสอยู่ที่การควบคุมตัวจับเวลาของ Delphi ขณะที่โปรแกรมกำลังทำงานอยู่ จะมองไม่เห็นส่วนควบคุมและไม่สามารถจัดการได้โดยตรง การควบคุมตัวจับเวลาจะทริกเกอร์เหตุการณ์ OnTimer() โดยอัตโนมัติตามช่วงเวลาปกติ ตัวอย่างนี้ใช้เพื่อกระตุ้นเหตุการณ์การเคลื่อนไหวของลูกบอล
แนวคิดการออกแบบ: ปัญหาหลักที่ต้องแก้ไขโดยโปรแกรมนี้คือการควบคุมการเคลื่อนที่ของลูกบอล ความเร็วและขนาดของลูกบอลในระหว่างการเคลื่อนที่ ใช้เหตุการณ์ OnTimer() ของตัวควบคุม Timer เพื่อควบคุมการเคลื่อนที่ของลูกบอล ใช้ตัวควบคุม TrackBar และตัวควบคุม SpinEdit เพื่อปรับความเร็วของการเคลื่อนที่ของลูกบอล ลูกบอลถูกสร้างขึ้นโดยการควบคุมรูปร่าง
หนึ่ง. การก่อสร้างใหม่:
(1) เริ่มโปรแกรม Delphi 6.0 เลือกคำสั่ง "ใหม่" ใต้เมนู "ไฟล์" เลือกตัวเลือกแอปพลิเคชันจากเมนูย่อยป๊อปอัป จากนั้นหน้าต่าง Form1 ของโครงการใหม่จะปรากฏขึ้น
(2) เลือกคำสั่ง "บันทึกโครงการเป็น" ใต้เมนู "ไฟล์" เพื่อเปิดกล่องโต้ตอบบันทึก Unit1 As ในกล่องรายการ "บันทึกใน" เลือกชื่อไดเร็กทอรีที่ต้องการจัดเก็บไฟล์หน้าต่าง กรอกชื่อไฟล์ในช่องแก้ไข "ชื่อไฟล์" กรอก "Unit1" ที่นี่ แล้วคลิกปุ่ม "บันทึก" เพื่อบันทึกตัวเลือกข้างต้น
(3) หลังจากดำเนินการขั้นตอนก่อนหน้าแล้ว กล่องโต้ตอบ "บันทึกโครงการเป็น" จะปรากฏขึ้น ในกล่องรายการ "บันทึกใน" ให้เลือกชื่อไดเรกทอรีที่ต้องการจัดเก็บโครงการ วิธีที่ดีที่สุดคือเลือกไดเรกทอรีเดียวกันกับในขั้นตอนที่ (2) ในช่องแก้ไข "ชื่อไฟล์" กรอกชื่อไฟล์ เพื่อบันทึกซอร์สโค้ดของโครงการ กรอก "Project1" ที่นี่แล้วคลิกปุ่ม "บันทึก" เพื่อบันทึกตัวเลือกข้างต้น
สอง. การตั้งค่าพารามิเตอร์บางอย่าง:
(1) เปิดใช้งานหน้าต่าง Unit1 ตั้งค่าคุณสมบัติคำบรรยายของแบบฟอร์มเป็น "Moving Sphere" และคุณสมบัติสีเป็น "clMoneyGreen" ในแผง "คุณสมบัติ"
(2) เลือกตัวเลือก Panel ในหน้า "Standard" เพิ่มแผงควบคุมในแบบฟอร์ม ปรับขนาดและตำแหน่งที่เหมาะสม และตั้งค่าคุณสมบัติ Name ของตัวควบคุมในแผง "Properties" เป็น "Panel1" และ BevelInner เป็น "bvLowered" ", BevelOuter คือ "blNone", BorderStyle ถูกตั้งค่าเป็น "bsSingle" และคุณสมบัติ Color ถูกตั้งค่าเป็น "clSkyBlue"
(3) เลือกตัวเลือก Timer บนหน้า "System" เพิ่มตัวควบคุม Timer ให้กับแบบฟอร์ม และตั้งค่าคุณสมบัติ Interval เป็น 1 และตั้งชื่อคุณสมบัติเป็น "Timer1" ในแผง Object Inspector
(4) เลือกตัวเลือกรูปร่างในหน้า "เพิ่มเติม" เพิ่มตัวควบคุมรูปร่างบน Panel1 ในแบบฟอร์ม ตั้งค่าคุณสมบัติ Show Hint เป็น "True" และคุณสมบัติ Hint เป็น "Sports Sphere" ในแผง "Properties" คุณสมบัติ Brush.Color คือ ClLime และคุณสมบัติรูปร่างถูกตั้งค่าเป็น "slCircle"
(5) เลือกตัวเลือกปุ่มบนหน้า "มาตรฐาน" เพิ่มปุ่มควบคุมสามปุ่มลงในแบบฟอร์ม และปรับขนาดและตำแหน่งที่เหมาะสม ตั้งค่าคุณสมบัติคำอธิบายภาพในแผง "คุณสมบัติ" เป็น "Start", "Stop" และ "Exit" ตามลำดับ
(6) เลือกตัวเลือก TrackBar บนหน้า Win 32 เพิ่มตัวควบคุม TrackBar ให้กับแบบฟอร์ม และปรับขนาดและตำแหน่งที่เหมาะสม ตั้งค่าคุณสมบัติที่เหมาะสมบนแผงคุณสมบัติ
(7) เลือกตัวเลือก SpinEdit บนตัวอย่าง เพิ่มตัวควบคุม SpinEdit ให้กับแบบฟอร์ม และปรับขนาดและตำแหน่งที่เหมาะสม ตั้งค่าคุณสมบัติที่เหมาะสมบนแผงคุณสมบัติ
3. การวิเคราะห์รหัส:
(1) เพื่อให้ทราบถึงการทำงานของลูกบอลที่เคลื่อนที่ไปมา จำเป็นต้องตั้งค่าตัวแปรร่วม ซึ่งก็คือจำนวนเต็ม I โดยค่าเริ่มต้นของ I คือ 1 เมื่อ I=1 ลูกบอลเคลื่อนที่ไปทางซ้าย และเมื่อกระทบผนังด้านซ้ายของแผง ค่า I จะกลายเป็น 2 ในเวลานี้ ลูกบอลเคลื่อนที่ไปทางขวา และเมื่อกระทบผนังด้านขวาของแผง ค่า I จะกลายเป็น 1 อีกครั้ง ด้วยวิธีนี้ การเปลี่ยนแปลงค่า I ทำให้การเคลื่อนที่ไปมาของลูกบอลเกิดขึ้นได้ โค้ดส่วนนี้อยู่ในเหตุการณ์ OnTimer:
ขั้นตอน TForm1.Timer1Timer(Sender: TObject);beginTimer1.interval:=trackbar1.position; // ตั้งค่าช่วงเวลาทริกเกอร์ของการควบคุม Timer ถ้า i=1 จากนั้น // ลูกบอลเคลื่อนที่ไปทางซ้าย beginningif shape1.left>0 แล้วเริ่มshape1 .left: =shape1.left-10; //เปลี่ยนตำแหน่งของลูกบอล shape1.Width:=(shape1.Width+1)mod 70; //เปลี่ยนความกว้างของสี่เหลี่ยมที่ลูกบอลอยู่ shape1.Height:=(shape1.Height+1)mod 70; //เปลี่ยนความสูงของสี่เหลี่ยมที่ลูกบอลอยู่ endelsei:=2; //ย้าย บอลไปทางขวาถ้า i=2 แล้วเริ่มต้นถ้า shape1.left<(panel1.Width-shape1.Width-5) จากนั้นเริ่มshape1.left:=shape1.left+10; //เปลี่ยนตำแหน่งของลูกบอล shape1.Width:=(shape1.Width+1)mod 70;//เปลี่ยนความกว้างของสี่เหลี่ยมที่ลูกบอลตั้งอยู่ shape1.Height:=(shape1.Height+1)mod 70 ;/ /เปลี่ยนความสูงของสี่เหลี่ยมที่ลูกบอลอยู่endelsei:=1;end;end;
(2) ปุ่ม "Start" และ "Stop" จะควบคุมว่าลูกบอลเคลื่อนที่หรือไม่ จริงๆ แล้วปุ่มเหล่านี้ควบคุมว่าตัวจับเวลาทำงานหรือไม่:
ขั้นตอน TForm1.Button1Click(Sender: TObject);beginTimer1.interval:=trackbar1.position; // ตั้งค่าช่วงเวลาทริกเกอร์ของการควบคุม Timer Timer1.Enabled:=true; // ลูกบอลเริ่มเคลื่อนที่; ขั้นตอน TForm1.Button2Click(Sender : TObject);beginTimer1.Enabled:=False; //ลูกบอลหยุดเคลื่อนที่
(3) ตัวควบคุมทั้งสองอย่าง TrackBar และ SpinEdit จะควบคุมความเร็วของการเคลื่อนที่ของลูกบอล รหัสที่เกี่ยวข้องมีดังนี้:
ขั้นตอน TForm1.SpinEdit1Change (ผู้ส่ง: TObject); beginspinEdit1.position: = trackbar1.Position; // เปลี่ยน Trackbar ค่า แจ้งการควบคุม SpinEdit ของการเปลี่ยนแปลงส่ง;
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 (ผู้ส่ง: TObject); ขั้นตอน Button1Click (ผู้ส่ง: TObject); ขั้นตอน Button2Click (ผู้ส่ง: TObject); ขั้นตอน SpinEdit1Change (ผู้ส่ง: TObject); ขั้นตอน TrackBar1Change (ผู้ส่ง: TObject); ขั้นตอน Button3Click(ผู้ส่ง: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;i:integer;implementation{$R *.DFM}ขั้นตอน TForm1.Timer1Timer(Sender: TObject);beginTimer1.interval:=trackbar1.position; //ตั้งค่าช่วงเวลาทริกเกอร์ของการควบคุมตัวจับเวลา ถ้า i=1 จากนั้น //ลูกบอลเคลื่อนที่ไปทางซ้าย beginningif shape1.left>0 จากนั้นเริ่มต้นshape1.left:=shape1.left-10; //เปลี่ยนตำแหน่งของลูกบอล shape1.Width:=(shape1.Width+1)mod 70;//เปลี่ยนความกว้างของสี่เหลี่ยมที่ลูกบอลอยู่ shape1.Height := (shape1.Height+1)mod 70;//เปลี่ยนความสูงของสี่เหลี่ยมที่ลูกบอลอยู่endelsei:=2; //ลูกบอลเคลื่อนที่ไปทางขวาสุด;ถ้า i=2 แล้วเริ่มต้นถ้า shape1.left<(panel1.Width-shape1.Width-5) จากนั้นเริ่มต้นshape1.left:=shape1.left+10; // เปลี่ยนตำแหน่งของลูกบอล shape1.Width:=(shape1.Width+1)mod 70; /เปลี่ยนความกว้างของสี่เหลี่ยมที่มีลูกบอลอยู่ shape1.Height:=(shape1.Height+1)mod 70;//เปลี่ยนความสูงของสี่เหลี่ยมที่ลูกบอลอยู่endelsei:=1;end;end;procedure TForm1.Button1Click(Sender: TObject);beginTimer1.interval:=trackbar1.position; //ตั้งค่าช่วงเวลาทริกเกอร์ของ การควบคุมตัวจับเวลา Timer1 .Enabled:=true; //ลูกบอลเริ่มเคลื่อนที่;ขั้นตอน TForm1.Button2Click(Sender: TObject);beginTimer1.Enabled:=False; //ลูกบอลหยุดเคลื่อนที่สิ้นสุด;ขั้นตอน TForm1.TrackBar1Change(Sender: TObject);beginspinEdit1.value:=trackbar1.Position; //แจ้งการควบคุม SpinEdit เกี่ยวกับการเปลี่ยนแปลงค่าของ Trackbarend;ขั้นตอน TForm1.Button3Click(Sender: TObject);beginclose; //Exitend;initializationi:=1;end.