Chào các bạn.
Một vấn đề mà các bạn hay gặp phải khi thực hiện lập trình giao diện GUI là trao đổi dữ liệu giữa các hàm Callback hay của chính hàm Callback đó. Ví dụ: bạn làm sao biết hàm Callback này chạy được bao nhiêu lần ?? Nếu bạn muốn thực hiện một điều gì đó khi hàm này chạy đến lần thứ 2 thì làm sao ?? Nếu muốn lấy kết quả của một hàm Callback khác thì làm sao ??
Giải pháp tất nhiên là phải ghi vào một nơi mà có thể truy suất bất kì lúc nào trong các hàm Callback.
Ngày xưa, lúc mới lập trình GUI mình có nghĩ đến dùng cách ghi dữ liệu cùa biến nhớ, data vào một file .mat rồi dùng các lệnh load, save để đọc và ghi vào file này. Tuy nhiên, vấn đề vớ vẩn hay gặp là khi bạn ghi liên tục khối dữ liệu lớn thì file này sẽ bị hỏng và báo rằng không đọc, ghi được. Bó tay luôn, hic hic.
Đọc đến cấu trúc handles thấy quả thật đây là giải pháp Pro nhất rồi. Không còn gặp trục trặc khi trao đổi dữ liệu nữa. Chi tiết xin các bạn xem tham khảo [1] rất là đầy đủ.
handles là một cấu trúc mà các trường của nó chính là các handle của các điều khiển trong GUIDE. Chúng ta vẫn dùng cấu trúc này để thiết lập các thuộc tính của các điều khiển trong GUI.
Thêm các trường vào cấu trúc Handles
Cấu trúc handles chính là tham số của tất cả các hàm Callback. Để thêm một trường vào trong cấu trúc handles chúng ta làm theo 2 bước sau:
- Gán một giá trị vào trường mới của handles. Ví dụ:
handles.number_errors = 0;
đã thêm trường number_errors vào cấu trúc handles và khởi tạo với giá trị 0. Chú ý: nên khởi tạo một trường mới của handles trong hàm OpenFcn của GUI để trường này luôn được tạo khi GUI chạy và khi đó tất cả các hàm Callback đều truy nhập được vào trường đã khởi tạo này.
- Dùng lệnh sau đây để lưu dữ liệu:
guidata(hObject,handles)
trong đó hObject là handles của thành phần mà đang gọi hàm callback. hObject là tham số luôn luôn có ở các hàm Callback, được tự động tạo bởi GUIDE.
Cập nhật GUI Data trong M-file tạo bởi GUIDE
Khi đã tạo ra một trường mới trong handles thì bây giờ chúng ta truy nhập và cập nhật giá trị của nó như thế nào ??
Ở bên trên chúng ta đã tạo ra một trường với tên là number_errors. Bây giờ chúng ta sẽ gán một giá trị khác cho nó và lưu dữ liệu vào. Tất nhiên phải làm theo như sau:
- Thay đổi giá trị của trường number_errors thành 10.
handles.number_errors = 10;
- Lưu lại cấu trúc handles với lệnh sau:
guidata(hObject,handles)
trong đó hObject là biến của hàm Callback chính là handle của chính điều khiển gọi hàm Callback đó. Nếu bạn không ghi dữ liệu handles vào GUIDATA thì sẽ bị mất mà ngay. Nó sẽ vẫn lưu giá trị cũ thôi.
Lấy giá trị từ cấu trúc handles
Tất nhiên để lấy một giá trị từ một trường của handles, chúng ta làm như sau:
a = handles.number_errors;
Quá đơn giản phải không ke ke.
Xem thêm về GUIDATA tại tham khảo [2].
Các bạn có thể xem thêm về Application Data, tức là tạo một cấu trúc tương tự như handles. Cách này mở rộng hơn không nhất thiết phải cho các figure.
Tham khảo
[1] Mathwors Corp, Mechanisms for Managing Data
[2] Mathworks Corp, GUI Data
Popularity: 2% [?]
Các bài viết liên quan:
- Tổng quan về hàm Callback trong lập trình GUI Sau khi các bạn tạo cái giao diện đã xong thì đến phần lập trình rất quan trọng, chính là lập trình các hành vi của các điều khiển để đáp ứng lại các sự kiện như nhấn phím, kéo thanh trượt, khi chọn menu, … đó chính là các hàm Callback (giống như các [...]...
- Hiển thị Led 7 thanh trên GUI Matlab Chào các bạn. Mình cũng đang làm cái giao diện cho đồ án tốt nghiệp và có tìm kiếm source Matlab cho Led7 thanh và tìm được một project rất hay. Từ đó, có thể nhúng vào trong GUI của mình. Các bạn có thể xem Project đó tại đây. Demo cái hình trông cho hoành tráng he [...]...
- Cách học Matlab hiệu quả Chào các bạn. Mình có ý định viết một vài Tutorial để học Matlab nhưng qua tìm hiểu và search thì có một số link rất là hay. Do đó, mình chỉ xin trình bày một số nguồn tham khảo dành cho các bạn mà mình thấy là hay. 1. Matlab Help Cái này thì không thể thiếu [...]...
- Lập trình giao diện GUI trong Matlab (Phần 1) Mình viết bài này để tổng hợp lại các hướng dẫn về thiết kế giao diện GUI trong Matlab để các bạn dễ dàng thực hiện. Phần mềm: Matlab R2007a Bài đầu tiên mình sẽ giới thiệu các bạn giao diện GUI. 1. Mở phần mềm Matlab, gõ lệnh sau vào cửa sổ Command >> guide Trong cửa sổ GUIDE [...]...
- Vẽ đồ thị trong Matlab Mình đang làm đồ án về đề tài giao tiếp máy tính và vđk qua công com, mình có 1 thắc mắc mong được các bạn chỉ giáo: khi dữ liệu được truyền vào máy tính thì có sự kiện BytesAvailable, mình viết hàm serial_Callback() để đọc dữ liệu này như sau: function serial_CallBack(obj,event) inval=fread(obj,1); t=clock; load data; set(handles.edit1,’string’,inval); axes(handles.axes1); plot(t(6),inval); Kết quả [...]...
- Lập trình giao tiếp RS232 qua Matlab Chào các bạn. Mình xin tổng hợp lại một số bài viết của mình về lập trình giao tiếp RS232 trên PC bằng phần mềm Matlab. I. Đối tượng Serial Object Việc giao tiếp này cũng rất dễ dàng thực hiện, không có gì là quá cao siêu cả. Mình đã giao tiếp thành công rùi. Để [...]...


{ 9 comments… read them below or add one }
em load được cái ảnh rùi, nhưng sao nó hiện luôn cả path của cái ảnh lên luôn vậy anh
xin lỗi anh, em hỏi lộn bên topic này. Em muốn xóa nhưng không biết cách xóa.Nên đành để vậy.Anh thông cảm lần sau em sẽ cẩn thận hơn.
em đã đọc phần hướng dẫn của matlab “image processing” nhưng em vẫn không hiểu anh cho em hỏi vấn đề này nha! em cảm ơn anh trước
[X,map]= imread(filename,fmt);
anh co the nói rõ cho em biết là X và map la dử liệu gì lệnh trên dùng cho việc đọc loại ảnh nào.
anh chỉ giúp em cách lấy giá trị của một màu trong một file ảnh được không? thank
em muon tao mot nut back .o phan thuoc tinh em chon control-callback:chuonhtrinhchinh
chu y:chuongtrinhchinh la chuong trinh em muon quay ve
nhung khi quay ve figure.chuongtrinhchinh tho van ton tai figure cua chuong trinh cu .anh co the giup em giai quyet bai toan nay khong
Chào em.
Cái đó không khó mấy đâu em. Điều em muốn có phải là muốn cho cái figure cũ tắt đi đúng không nào. Em có thể dùng lệnh:
Sau khi em gọi lệnh cho figure mới ra. Nhớ là lệnh gọi figure mới và delete nên cho vào trong hàm callback mặc định của nó thì hay hơn là config trong cửa sổ Property.
Cám ơn admin rất nhiều cề những bài viết này. Hi vọng anh tiếp tục viết những bài hướng dẫn cụ thể và trực quan như vầy nữa để mọi người có thể tham khảo và học tập.
Anh cho em hỏi dùng lệnh gọi một cái fig mới ra có fải là dùng lệnh call (fig.) ko anh? EM mới tìm hiểu về phần GUIDE này nên chưa rõ lắm mong anh chỉ giáo.
các bạn cho mình hỏi có cách nào để đánh chữ tiếng việt có dấu trong gui ko?
minh muon hoi la matlap co tuong thich voi cac phan mem khac khong???. vi du nhu phan mem tao web chang han. Vi minh dang duoc giao nhiem vu lap chuong trinh tinh toan cac may ki thuat sau do phai show no len sao cho gioing mot trang web. ma minh chi moi viet duoc chuong trinh tinh don thuan trong matlap. bac nao biet hay noi qua cho em voi????. Em cam ơn!!!!!!
Chào em.
Em load được cái ảnh gì hả em ??