Học autoit căn bản về chế độ OnEvent
IndexIndex  TRANG CHỦTRANG CHỦ  CalendarCalendar  GalleryGallery  Trợ giúpTrợ giúp  Tìm kiếmTìm kiếm  Thành viênThành viên  NhómNhóm  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  
AutoIT Việt
CHÀO MỪNG BẠN ĐẾN VỚI
AUTOIT.FORUMVI.COM

AutoIT Việt


 
IndexIndex  TRANG CHỦTRANG CHỦ  CalendarCalendar  GalleryGallery  Trợ giúpTrợ giúp  Tìm kiếmTìm kiếm  Thành viênThành viên  NhómNhóm  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  
>> LIÊN MINH HUYỀN THOẠI (LOL) <<

Share | 
 

 Học autoit căn bản về chế độ OnEvent

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
Admin
Admin: Tổng Tư Lệnh
Admin: Tổng Tư Lệnh
avatar

Giới tính : Nam
Posts : 1503
Gia nhập ngày : 01/03/2012
Tuổi : 22
Đến từ Đến từ : Kon Tum
Nghề nghiệp/Sở thích Nghề nghiệp/Sở thích : Chém Gió/Spam

Tài Sản
Huân Chương: Xe đời mới


Bài gửiTiêu đề: Học autoit căn bản về chế độ OnEvent   Sun Mar 25, 2012 3:39 pm

CHẾ ĐỘ OnEvent



Trong chế độ OnEvent , việc xử lý các sự kiện xảy ra trên GUI không phải bằng cách dò xét liên tục bằng một vòng lặp khép kín nữa , mà thay vào đó là việc tạm dừng đoạn script và gọi một hàm đã được định nghĩa trước đó dành cho một sự kiện với một control tương ứng. Ví dụ như người dùng nhấp vào nút Button1 thì đoạn chương trình chính của bạn nhất thời sẽ ngưng lại để gọi hàm đã tạo trước đó dành cho Button1. Sau khi hàm đã hoàn tất công việc của nó thì đoạn chương trình chính của bạn sẽ chạy tiếp. Chế độ này tương tự như trong phương thức xử lý form của Visual Basic.

Khi một GUI đang thực thi, đoạn chương trình chính của bạn có thể làm bất cứ công việc gì , nhưng để tạo nên sự đơn giản cho các ví dụ , chúng ta sẽ tạo nên một vòng lặp While với khoảng dừng bên trong.

Theo mặc định , GUI luôn được xử lý theo chế độ vòng lặp thông điệp. Vì vậy để chuyển sang chế độ OnEvent ở đầu đoạn mã chúng ta phải sử dung Opt("GUIOnEventMode", 1).



Dạng OnEvent cơ bản

Dạng tổng quát có thể trình bày như sau :



While 1
Sleep(1000) ; khoảng dừng của vòng lặp
WEnd

Func Event1()
; Code to handle event goes here
EndFunc

Func Event2()
; Code to handle event goes here
EndFunc



GUI Events

Trong chế độ OnEvent , GUI của bạn sẽ phát ra các sự kiện sau :

- Control Event

- System Event



Cả hai loại sự kiện trên sẽ gọi một hàm do người viết chương trình thiết lập , hàm này có thể được chỉ định cho GUI (sử dụng hàm GUISetOnEvent) hoặc chỉ định xử lý cho control (sử dụng hàm GUICtrlSetOnEvent) . Nếu một sự kiện nào đó xảy ra mà AutoIt không tìm thấy hàm làm việc tương ứng thì nó sẽ bị bỏ qua. Bên trong hàm được gọi ta có thể sử dụng các macro khác nhau do AutoIt cung cấp để hỗ trợ việc xử lý các sự kiện



Macro
Chi tiết

@GUI_CTRLID
ID của control đang gửi thông điệp hoặc ID của sự kiện hệ thống

@GUI_WINHANDLE
Handle của GUI đã gửi đi thông điệp

@GUI_CTRLHANDLE
Handle của control đã gửi đi thông điệp (nếu có thể dùng được)


Chú ý : Bạn có thể sử dụng một hàm cho nhiều sự kiện , điều bạn cần làm trong trường hợp này là tạo ra các hành động khác nhau dựa trên macro @GUI_CTRLID . Ví dụ , bạn có thể đăng ký tất cả sự kiện hệ thống vào trong một hàm rồi tùy trường hợp mà viết lệnh.



Control Event

Khi bạn nhấp hoặc thay đổi một control thì một sự kiện được gửi đi . Sự kiện đó được gửi vào trong một hàm đã định nghĩa và đã được thiết lập trong GUICtrlSetOnEvent. Bên trong hàm này thì macro @GUI_CTRLID mang giá trị là controlID được trả về khi tạo bằng hàm GUICtrlCreate....



System Event

Các sự kiện hệ thống – ví dụ như close một gui – thì cũng được gởi đi theo cách tương tự như Control Event . Tuy nhiên sự kiện lại được gửi vào hàm được thiết lập trong GUISetOnEvent. Sự kiện hệ thống có thể mang những giá trị sau :



$GUI_EVENT_CLOSE
$GUI_EVENT_MINIMIZE
$GUI_EVENT_RESTORE
$GUI_EVENT_MAXIMIZE
$GUI_EVENT_PRIMARYDOWN
$GUI_EVENT_PRIMARYUP
$GUI_EVENT_SECONDARYDOWN
$GUI_EVENT_SECONDARYUP
$GUI_EVENT_MOUSEMOVE
$GUI_EVENT_RESIZED
$GUI_EVENT_DROPPED



Ví dụ

Chúng ta sẽ bắt đầu với chương trình hello world đơn giản sau :



#include

GUICreate("Hello World", 200, 100)
GUICtrlCreateLabel("Hello world! How are you?", 30, 10)
GUICtrlCreateButton("OK", 70, 50, 60)
GUISetState(@SW_SHOW)
Sleep(2000)



Sử dụng chế độ OnEvent , chúng ta sẽ viết lại để hoàn tất đoạn mã trên :



#include

Opt("GUIOnEventMode", 1) ; Change to OnEvent mode
$mainwindow = GUICreate("Hello World", 200, 100)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
GUICtrlCreateLabel("Hello world! How are you?", 30, 10)
$okbutton = GUICtrlCreateButton("OK", 70, 50, 60)
GUICtrlSetOnEvent($okbutton, "OKButton")
GUISetState(@SW_SHOW)

While 1
Sleep(1000) ; Idle around
WEnd

Func OKButton()
;Note: at this point @GUI_CTRLID would equal $okbutton,
;and @GUI_WINHANDLE would equal $mainwindow
MsgBox(0, "GUI Event", "You pressed OK!")
EndFunc

Func CLOSEClicked()
;Note: at this point @GUI_CTRLID would equal $GUI_EVENT_CLOSE,
;and @GUI_WINHANDLE would equal $mainwindow
MsgBox(0, "GUI Event", "You clicked CLOSE! Exiting...")
Exit
EndFunc



Như bạn thấy , nó rất đơn giản. Mặc dù chỉ là ví dụ cơ bản nhưng sẽ là cái nền để bạn tạo ra những cái hay hơn đấy.



Thao tác nâng cao và chế độ nhiều cứa sổ

Chúng ta cũng đã biết rằng các control ID là duy nhất , cho dù bạn có nhiều cửa sổ và nhiều control thì bạn vẫn có thể xử lý chúng theo định danh mà bạn đã chọn. Tuy nhiên vấn đề là xử lý như thế nào ?

Ở đây sẽ trình bày một ví dụ tương tự như ví dụ trên , nhưng có thêm một cửa sổ dummy nữa :



#include

Opt("GUIOnEventMode", 1) ; Change to OnEvent mode
$mainwindow = GUICreate("Hello World", 200, 100)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
GUICtrlCreateLabel("Hello world! How are you?", 30, 10)
$okbutton = GUICtrlCreateButton("OK", 70, 50, 60)
GUICtrlSetOnEvent($okbutton, "OKButton")

$dummywindow = GUICreate("Dummy window for testing ", 200, 100, 500, 200)

GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

GUISetState(@SW_SHOW, $dummywindow)

GUISwitch($mainwindow)
GUISetState(@SW_SHOW)

While 1
Sleep(1000) ; Idle around
WEnd

Func OKButton()
;Note: at this point @GUI_CTRLID would equal $okbutton
MsgBox(0, "GUI Event", "You pressed OK!")
EndFunc

Func CLOSEClicked()
;Note: at this point @GUI_CTRLID would equal $GUI_EVENT_CLOSE,
;@GUI_WINHANDLE will be either $mainwindow or $dummywindow
If @GUI_WINHANDLE = $mainwindow Then
MsgBox(0, "GUI Event", "You clicked CLOSE in the main window! Exiting...")
Exit
EndIf
EndFunc





Đầu tiên , có một sự thay đổi quan trọng là việc xuất hiện của hàm GUISwitch – khi một cửa-sổ-mới (new window) được tạo ra thì nó trở thành cửa sổ mặc định cho các thao tác của GUI trong tương lai (bao gồm việc tạo control). Trong ví dụ này , chúng ta muốn làm việc với của sổ chính "Hello world" , không phải cửa sổ dummy , nên phải switch về cửa sổ chính. Một vài hàm về GUI cho phép bạn sử dụng handle cửa sổ trong tham số để tự động chuyển sang GUI cần chứa control mà không cần phải dùng đến lệnh GUISwitch. Và chúng ta đã có một trường hợp trong đoạn code trên :

GUISetState(@SW_SHOW, $dummywindow)

Cũng xin nhắc là chúng ta sử dụng hàm OnEvent để điều khiển nút "close" cho cả hai cửa sổ và sau đó sử dụng macro @GUI_WINHANDLE để xét xem cửa sổ nào vừa gởi đi sự kiện. Chúng ta chỉ đóng GUI khi nút close được nhấn và thông điệp đó xuất phát từ cửa sổ chính (không phải dummy) . Nhưng bạn cũng có thể sử gán cho mỗi cửa sổ một hàm khác nhau để xử lý nếu bạn bạn thích.
Tài Sản của Admin
Tài Sản
Huân Chương: Xe đời mới







ĐỜI VÔ LỐI
Về Đầu Trang Go down
Xem lý lịch thành viên http://autoit.forumvi.com
leviettien2000
Học Viên
Học Viên
avatar

Posts : 1
Gia nhập ngày : 04/08/2014


Bài gửiTiêu đề: Re: Học autoit căn bản về chế độ OnEvent   Mon Aug 04, 2014 6:14 pm

aj có teamview dạy em autoit đi.
Tài Sản của leviettien2000
Về Đầu Trang Go down
Xem lý lịch thành viên
 

Học autoit căn bản về chế độ OnEvent

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
AutoIT Việt :: Học AuToIT Việt :: Trung Tâm AutoIT Việt-