Callback là m ột h àm mà khi vi ết mi êu t ả h ành vi c ủa một th ành ph ần GUI xác định hoặc là c ủa chính GUI figure, điều khiển các h ành vi c ủa chúng bằng cách thực hiện một số h à[r]
(1)Giáo trình Matlab Thái Duy Quý
Trang 43 y = vy*t;
Tính thành phần vec tơ vận tốc hiển thị dùng quiver3: u = gradient(x);
v = gradient(y); w = gradient(z); scale = 0;
quiver3(x, y, z, u, v, w, scale) axis square
17. Kết chương
Trong chương này, sinh viên làm quen với số lệnh vẽđồ thị dựa liệu Chương giúp sinh viên làm quen với số lệnh vẽđồ thị 3D nâng cao
(2)Giáo trình Matlab Thái Duy Quý
Trang 44
CHƯƠNG LẬP TRÌNH GIAO DIỆN NGƯỜI DÙNG (GUI)
Chương hướng dẫn người dung lập trình cửa sổ, dạng lập trình giao diện người dùng thường thấy ngôn ngữ cấp cao
1. Cách thực
Mở phần mềm Matlab, gõ lệnh sau vào cửa sổ Command: >> guide
Cửa sổ GUIDE Quick Start sau:
Trong cửa sổ GUIDE Quick Start có nhiều lựa chọn theo khuôn mẫu sau:
Thẻ Create New GUI: Tạo hộp thoại GUI theo loại sau:
- Blank GUI (Default): Hộp thoại trống, khơng có điều khiển uicontrol - GUI with Uicontrols: Hộp thoại với vài uicontrol button,
- GUI with Axes and Menu: Hộp thoại với uicontrol axes button, menu để hiển thị đồ thị
- Modal Question Dialog: Hộp thoại đặt câu hỏi Yes, No
Thẻ Open Existing GUI: giúp người dùng mở project có sẵn tạo trước
(3)Giáo trình Matlab Thái Duy Quý
Trang 45
2. Lập trình giao diện với Blank GUI
Giao diện giống với chương trình lập trình giao diện Visual Basic, Visual C++, C# Di chuột qua biểu tượng bên trái thấy tên điều khiển
Sau sốđiều khiển thường dùng:
Push Button: Là nút bấm nút OK, Cancel mà ta bấm (tương tự Button
trong ngôn ngữ bậc cao)
Slider: Thanh trượt có trượt chạy
Radio Button: Chọn lựa điều kiện tập điều kiện
Check Box: Chọn lựa nhiều điều kiện tập điều kiện
Edit Text: Là ô cho người dung nhập văn
Static Text: Là ô hiễn thị văn người dùng
Pop-up Menu: Người dùng chọn đối tượng danh sách sổ xuống
List Box: Cho phép người dùng chọn đối tượng danh sách
Axes: Thực vẽ hệ trục tọa độ
Panel: Là dạng phân ô thành phần giao diện
Button Group: Nhóm button
ActiveX Control: Các Control người dung nhúng thêm vào
(4)Giáo trình Matlab Thái Duy Quý
Trang 46 Phía menu, trọng menu Tools có:
Run (Ctr + T): Chạy chương trình viết, báo lỗi chương trình chứa lỗi Để
chạy chương trình, hệ thống bắt buộc người dùng phải lưu lại ứng dụng
Align Object: dùng để xếp điều khiển lề cho đối tượng
Grid and Rulers: Hiễn thị lưới thước giao diện
Menu Editor: Tạo menu cho ứng dụng
Tab Order Editor: xếp thứ tự xuất chuột lên đối tượng nhấn phím
Tab lúc chạy ứng dụng
Gui Options: Một số lựa chọn cho giao diện GUI
Khi ta lưu lại (vào File\Save nhấn Ctrl + S) với tên (ví dụ: vidu), hệ thống đồng thời xuất hai cửa sổ cửa sổ soạn thảo cửa sổ thiết kế Trong thư mục vừa lưu có hai tập tin:
vidu.fig: Tập tin chứa giao diện chương trình, nơi cho người dung thiết kế cách kéo thảcác điều khiển để tạo ứng dụng
vidu.m: tập tin chứa mã thực thi cho chương trình hàm khởi tạo, hàm callback
3. Kéo thả và thiết lập thuộc tính cho điều khiển
Ví dụ: Thực chương trình cho người dùng nhập vào hai số, nhấn nút hiễn thị kết phép tính cộng số vừa nhập
Thực bước sau:
(5)Giáo trình Matlab Thái Duy Quý
Trang 47
Click đôivào Edit Text để xuất cửa sổ thuộc tính điều khiển sau:
Một số thuộc tính quan trọng Edit Box bao gồm:
Tag: tên điều khiển Dùng tên có thểthao tác đến thuộc tính đối tượng Ởđây ta đặt tên là: txtX
String: xâu kí tự lên Edit Box Có thểđể trống thiết lập
Tương tự, thay đổi thuộc tính tag Edit Box thứ thành txtY, Static Box tương tự thành txtKetQua
Với Push Button: thuộc tính tag đặt cmdCalculate, String đặt “ket qua”
4. Viết lệnh cho chương trình
Chương trình có tác dụng nhấn vào nút Push Button lên kết Static Box Vì phải viết vào hàm mà nhấn vào Push Button gọi Chính hàm Callback Điều khiển có hàm callback, giống hàm ngắt vi điều khiển
(6)Giáo trình Matlab Thái Duy Quý
Trang 48
Nhìn vào định nghĩa hàm Editor ta thấy là: hàm thực nhấn vào nút buttonCalculate
Hàm có số tham số:
hObject : handle điều khiển buttonCalculate
eventdata: dữ liệu kiện xẩy
handles: cấu trúc chứa tất điều khiển liệu người dùng, dùng để truy xuất điều khiển khác
Qua thuộc tính tag điều khiển ta truy suất đến thuộc tính string điều khiển txtX, txtY, txtKetQua lệnhget set
get(handles.tag_dieu_khien, 'ten thuoc tinh');
set(handles.tag_dieu_khien, 'ten_thuoc_tinh', gia_tri);
(7)Giáo trình Matlab Thái Duy Quý
Trang 49 Nhấn nút Run kiểm tra kết quả:
5. Các tính chất điều khiển GUIDE Matlab
Để cửa sổ tính chất Property Inspector điều khiển, có cách sau: Nhấn đúp chuột vào điều khiển
Chọn điều khiển vào menu View, chọn Property Inspector.
Chọn điều khiển nhấn vào biểu tượng Property Inspector, gần chỗ M-file editor
Khi đó, cửa sổ Property Inspector Khi nhấn vào điều khiển khác cửa sổ thông tin tương ứng cho điều khiển
Một vài tính chất chung điều khiển mà bạn nên ý: Tính chất (property) Giá trị (value) Mô tả
Enable on, inactive, off
Mặc định là: on
Xác định điều khiển hiển thị lên giao diện Đặt = off, điều khiển khơng xuất Max Mặc định Giá trị lớn nhất, tùy thuộc vào điều khiển
Min Mặc định Giá trị nhỏ nhất, tùy thuộc vào điều khiển
Position Vector gồm phần tử
(left, bottom, width, height)
Kích thước điều khiển vị trí tương đối
nó với điều khiển chứa
String Chuỗi hiển thị
Units Đơn vị đo lường dùng xác định vị trí
Value Vơ hướng vector Giá trị component, tùy thuộc vào
component
(8)Giáo trình Matlab Thái Duy Quý
Trang 50
6. Tổng quan hàm Callback lập trình GUI
Sau tạo giao diện xong phần lập trình quan trọng, lập trình hành vi điều khiển để đáp ứng lại kiện nhấn phím, kéo trượt, chọn menu, hàm Callback (giống hàm kiện ngôn ngữ khác)
a. Thế nào hàm Callback
Callback hàm mà viết miêu tả hành vi thành phần GUI xác định GUI figure, điều khiển hành vi chúng cách thực số hành động viết hàm, để đáp ứng lại kiện thành phần Cách lập trình thường gọi là: Lập trình lái kiện (event driven programming)
Ví dụ, bạn nhấn Button vẽ đồ thị, tính tổng, … Vậy nhấn phím hiển nhiên gọi hàm Callback nhấn phím Button đó, hàm Callback thực lệnh vẽ đồ thị, tính tổng, … tương ứng
b. Các loại hàm Callback
Mỗi thành phần có nhiều hàm Callback khác nhau, sau liệt kê loại hàm Callback điều khiển có hàm
Callback property Sự kiện xảy ra Thành phần có hàm
ButtonDownFcn Thực người dùng nhấn chuột lên pixels component figure Nếu component thuộc tính Enable phải on ( tất nhiên rùi )
Axes,figure,button group,panel,user interfacecontrols
Callback Hành động component, ví dụ thực thi người dùng click lên Push Button chọn thành phần menu
Contextmenu, menu,userinterface controls
CloseRequestFcn Thực thi trước figure đóng Figure CreateFcn Tạo thành phần.Nó dùng để
khởi tạo thành phần
(9)Giáo trình Matlab Thái Duy Quý
Trang 51
tạo Nó thực thi sau thành phần figure tạo, trước hiển thị lên giao diện người dùng
menu,panel,user interfacecontrols
DeleteFcn Xóa thành phần Nó dùng để thực hành động xóa bỏ trước component figure bị hủy bỏ
Axes,figure,button group,contextmenu, menu,panel,user interfacecontrols KeyPressFcn Thực thi người dùng nhấn
phím keyboard component figure hàm callback focus
Figure,userinterface controls
KeyReleaseFcn Thực thi người dùng nhả phím bấm figure focus
Figure
ResizeFcn Thực thi người dùng thay đổi kích thước panel, button group, figure với điều kiện thuộc tính
Resize figure = on
Buttongroup,figure, panel
SelectiononChangeFcn Thực thi người dùng lựa chọn nút Radio Button khác toggle button khác thành phần Button Group
Buttongroup
WindowButtonDownFcn Thực thi bạn nhấn chuột (trái phải) trỏ nằm vùng cửa sổ figure
Figure
WindowButtonMotionFcn Thực thi bạn di chuyển trỏ vùng cửa sổ figure
Figure
WindowButtonUpFcn Ban đầu bạn nhấn chuột (trái, phải) nhả phím hàm
(10)Giáo trình Matlab Thái Duy Quý
Trang 52 gọi
WindowScrollWheelFcn Thực thi nút cuộn chuột cuộn figure tầm focus
Figure
7. Chương trình Calculator
Có nhiều cách để tạo chương trình "Máy tính bấm tay" hay Calculator Ví dụ sau hướng dẫn tạo chương trình máy tính bấm tay đơn giản sử dụng kỹ thuật trùng "Callback" lập trình giao diện GUI
Sử dụng GUIDE, thiết kế giao diện chương trình sau:
Đặt thuộc tính cho đối tượng sau:
- Edit Text: Tag=edit1 (mặc định); FontSize=20; Enable=Inactive; HorizontalAligment=right; - Đặt thuộc tính Tag tất nút là: pushadd (ngoại trừ nút: "=" "%" "C") - Nút "=": Tag=pushequal
- Nút "%": Tag=pushpercent - Nút "C": Tag=pushclear