Microsoft Word Bai 7 1 doc Trang 1 MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Bài thực hành số 7 1 Xây dựng chương trình ₫ồng hồ có giao diện truyền thống I Mục tiêu Giúp SV làm quen với cách thức viết code ₫ể hiể[.]
Trang MƠN : LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Bài thực hành số 7.1 : Xây dựng chương trình ₫ồng hồ có giao diện truyền thống I Mục tiêu : Giúp SV làm quen với cách thức viết code ₫ể hiển thị loại liệu cấu thành thông tin cần xuất : chuỗi văn bản, hình bitmap, hình ₫ồ họa tốn học II Nội dung : Viết code ₫ể hiển thị loại liệu : chuỗi văn bản, hình bitmap, hình ₫ồ họa tốn học quan sát kết ₫oạn code III Chuẩn ₫ầu : Sinh viên nắm vững lập trình thành thạo ₫oạn code ₫ể hiển thị loại liệu : chuỗi văn bản, hình bitmap, hình ₫ồ họa tốn học IV Qui trình : Dùng chương trình soạn thảo ₫ồ họa Paint, CorelDraw, Photoshop vẽ ảnh bitmap khung ₫ồng hồ, mặt ₫ồng hồ hình ₫ây cất lên file c:\Images\DonghoTho.bmp Chạy VS Net, chọn menu File.New.Project ₫ể hiển thị cửa sổ New Project Mở rộng mục Visual C# TreeView "Project Types", chọn mục Windows, chọn icon "Windows Forms Application" listbox "Templates" bên phải, thiết lập thư mục chứa Project listbox "Location", nhập tên Project vào textbox "Name:" (td Form_Dongho), click button OK ₫ể tạo Project theo thông số ₫ã khai báo Form ₫ầu tiên ứng dụng ₫ã hiển thị cửa sổ thiết kế, lúc form hoàn toàn trống, chưa chứa ₫ối tượng giao diện Chọn form ₫ể hiển thị cửa sổ Properties nó, duyệt tìm mục BackgroundImage, click button … bên phải ₫ển hiển thị cửa sổ “Select Resource”, ₫ánh dấu chọn RadioButton “Project Resource File”, Click button Import, duyệt tìm file chứa ảnh ₫ồng hồ chọn button Open ₫ể máy Trang import tài nguyên vào Project Xem kết hiển thị, ₫úng chọn button OK ₫ể máy import thực tài nguyên vào Project File ảnh ₫ược import vào Project ₫ược truy xuất theo ₫ường dẫn nội Form_Dongho.Resources.DonghoTho.bmp Chọn mục miêu tả ảnh vừa import ₫ể hiển thị cửa sổ Properties nó, thay ₫ổi trị thuộc tính Build Action = Embedded Resource Nếu kích thước ảnh nhỏ form ta thấy ảnh ₫ược hiển thị lặp lại theo chiều ngang dọc Hãy hiệu chỉnh thuộc tính BackgroundImageLayout = None ₫ể máy hiển thị ảnh lần vị trí trái Form Nếu cửa sổ ToolBox chưa hiển thị chi tiết, chọn menu View.Toolbox ₫ể hiển thị (thường nằm (Auto Hide) nằm góc phải cửa sổ ToolBox bên trái hình) Click chuột vào button ₫ể chuyển chế ₫ộ hiển thị thường trực Duyệt tìm phần tử Timer (trong nhóm Components hay nhóm All Window Forms), chọn nó, dời chuột vào form (ở vị trí ₫ược ₫ối tượng khơng ₫ược hiển thị) vẽ với kích thước tùy ý Hiệu chỉnh thuộc tính (Name) = myTimer, Interval = 1000 (1giây) Chọn ₫ối tượng myTimer, cửa sổ thuộc tính hiển thị, click icon ₫ể hiển thị danh sách kiện ₫ối tượng, ấn kép chuột vào comboBox bên phải kiện Tick ₫ể máy tạo tự ₫ộng hàm xử lý cho kiện Viết code cụ thể cho hàm sau : //hàm phục vụ Timer private void myTimer_Tick(object sender, EventArgs e) { myTimer.Stop(); //dừng ₫ếm timer this.Refresh(); //vẽ lại form theo hành } Ấn phải chuột vào mục Form1.cs cửa sổ Solution Explorer chọn option View Designer ₫ể hiển thị lại cửa sổ thiết kế Form Chọn Form, cửa sổ thuộc tính hiển thị, click icon ₫ể hiển thị danh sách kiện Form, duyệt tìm kiện Paint, ấn kép chuột vào comboBox bên phải kiện Paint ₫ể máy tạo tự ₫ộng hàm xử lý cho kiện Viết code cụ thể cho hàm sau : private void Form1_Paint(object sender, PaintEventArgs e) { //xác ₫ịnh ₫ối tượng mục tiêu Control control = (Control)sender; //thay ₫ổi kích thước form theo ảnh khung ₫ồng hồ control.ClientSize = new Size(bgimg.Width, bgimg.Height); //xác ₫ịnh ₫ối tượng graphics (₫ối tượng vẽ) ₫ối tượng Graphics g = e.Graphics; //vẽ bitmap miêu tả ₫ồng hồ chưa khai báo ảnh cho Form //g.DrawImage(bgimg, 0, 0); //₫ịnh nghĩa biến cần dùng Pen hPen; int x, y; double goc; //thiết lập tâm ₫ồng hồ xo = bgimg.Width / - 1; yo = xo + 33; //thiết lập bán kính cần lắc, kim giờ/phút/giây rh = bgimg.Width / - 49; rm = bgimg.Width / - 44; rs = bgimg.Width / - 40; //tạo Brush vẽ tâm ₫ồng hồ Brush hBrush = new SolidBrush(Color.FromArgb(177, 37, 156)); g.FillEllipse(hBrush, xo - 4, yo - 4,8,8); Trang //tạo pen ₫ể vẽ kim hPen = new Pen(Color.FromArgb(0, 0, 255), 3); DateTime now = DateTime.Now; //tính góc kim goc = 270 + 360 * (now.Hour + (double)now.Minute / 60) / 12; //₫ổi góc từ ₫ộ radian goc = goc * 3.1416 / 180; //xác ₫ịnh tọa ₫ộ ₫ỉnh thứ kim x = xo + (int)(rh * Math.Cos(goc)); y = yo + (int)(rh * Math.Sin(goc)); //vẽ kim g.DrawLine(hPen, xo, yo, x, y); //tạo pen ₫ể vẽ kim phút hPen = new Pen(Color.FromArgb(0, 255, 0), 2); //tính góc kim phút goc = 270 + 360 * now.Minute / 60; //₫ổi góc từ ₫ộ radian goc = goc * 3.1416 / 180; //xác ₫ịnh tọa ₫ộ ₫ỉnh thứ kim phút x = xo + (int)(rm * Math.Cos(goc)); y = yo + (int)(rm * Math.Sin(goc)); //vẽ kim phút g.DrawLine(hPen, xo, yo, x, y); //tạo pen ₫ể vẽ kim giây hPen = new Pen(Color.FromArgb(237, 5, 220), 1); //tính góc kim giây goc = 270 + 360 * now.Second / 60; //₫ổi góc từ ₫ộ radian goc = goc * 3.1416 / 180; //xác ₫ịnh tọa ₫ộ ₫ỉnh thứ kim giây x = xo + (int)(rs * Math.Cos(goc)); y = yo + (int)(rs * Math.Sin(goc)); //vẽ kim giây g.DrawLine(hPen, xo, yo, x, y); //tạo chuỗi miêu tả giờ/phút/giây hành String buf = String.Format("{0:d2}:{1:d2}:{2:d2}", now.Hour, now.Minute, now.Second); //tạo ₫ối tượng font chữ cần dùng Font myFont = new Font("Helvetica", 11); //tạo biến miêu tả chế ₫ộ canh xuất chuỗi StringFormat format1 = new StringFormat(StringFormatFlags.NoClip); format1.Alignment = StringAlignment.Center; //xuất chuỗi miêu tả giờ/phút/giây g.DrawString(buf, myFont, System.Drawing.Brushes.White,xo, bgimg.Height - 29, format1); //cho phép timer chạy tiếp myTimer.Start(); } 10 Tương tự bước 9, tạo hàm xử lý kiện Load cho Form viết code cho hàm sau : private void Form1_Load(object sender, EventArgs e) { //tạo ₫ối tượng quản lý assembly Trang System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly(); //tạo ₫ối tượng Stream miêu tả ảnh bitmap Stream myStream = myAssembly.GetManifestResourceStream("Form_Dongho.Resources.DonghoTho.bmp"); //tạo ₫ối tượng ảnh bitmap ₫ể dùng cần bgimg = new Bitmap(myStream); } 11 Dời cursor nhập liệu ₫ầu class Form1 viết lệnh ₫ịnh nghĩa thuộc tính cần dùng sau : //₫ịnh nghĩa biến cần dùng ₫ể quản lý Form Bitmap bgimg; //₫ịnh nghĩa biến chứa ảnh int xo, yo; //tọa ₫ộ tâm ₫ồng hồ int rh, rm, rs; //bán kính kim giờ/phút/giây 12 Thêm lệnh import namespace sau vào ₫ầu file : using System.IO; 13 Chọn menu Debug.Start Debugging ₫ể dịch chạy ứng dụng Xem kết ₫ánh giá kết Nếu tọa ₫ộ hay kích thước kim chuỗi chưa hiển thị ₫úng vị trí hiệu chỉnh lại giá trị cho tốt