1. Tải bản cài đặt AutoIT mới nhất

    Chào Khách. Nếu bạn mới tham gia và chưa cài đặt AutoIT.
    Vui lòng vào topic trên để tải bản AutoIT mới nhất nhé
    Dismiss Notice
  2. Quy định và nội quy

    Chào Khách. Vui lòng đọc kỹ nội quy và quy định của diễn đàn
    Để tránh bị ban một cách đáng tiếc nhé!
    Dismiss Notice
  3. Hướng dẫn chèn mã AutoIT trong diễn đàn

    Chào Khách. Vui lòng xem qua bài viết này
    Để biết cách chèn mã AutoIT trong diễn đàn bạn nhé :)
    Dismiss Notice

Hướng dẫn Code siêu đơn giản dùng Button để ngắt vòng lặp hoặc thoát GUI khi GUI đang bị đơ trong vòng lặp

Thảo luận trong 'Hướng dẫn - bài tập căn bản' bắt đầu bởi Huân Hoàng, 24/10/17.

  1. Huân Hoàng

    Huân Hoàng Super Moderator Thành viên BQT Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    566
    Đã được thích:
    1,049
    Thấy nhiều thým hay hỏi làm sao để GUI thoát vòng lặp bằng cách nhấn vào một nút, hoặc khi GUI đang bị đơ trong vòng lặp thì không tắt GUI được. Nay iêm chia sẻ một trong những cách khá đơn giản và dễ hiểu, hy vọng sẽ ít nhiều giúp được mấy thým:

    Mã (AutoIt):
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>

    $hGUI = GUICreate("Test", 100, 100)
    $hButton1 = GUICtrlCreateButton("Chạy vòng lặp", 10, 10, 80, 30)
    $hButton2 = GUICtrlCreateButton("Ngắt vòng lặp", 10, 50, 80, 30)
    GUISetState()

    #Region Định nghĩa và gán các Button muốn dùng để ngắt vòng lặp
        $Interrupt = 0
        GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND_BUTTON")
        Func _WM_COMMAND_BUTTON($hWnd, $Msg, $wParam, $lParam)
            Switch BitAND($wParam, 0x0000FFFF)
                Case $hButton2
                    $Interrupt = 1
                    ;Case $hButtonX
                    ;    .....
            EndSwitch
            Return 'GUI_RUNDEFMSG'
        EndFunc
    #EndRegion

    #Region Tắt GUI khi vẫn còn đang chạy vòng lặp
        GUIRegisterMsg($WM_SYSCOMMAND, "_WM_COMMAND_CLOSEBUTTON")
        Func _WM_COMMAND_CLOSEBUTTON($hWnd, $Msg, $wParam, $lParam)
            If BitAND($wParam, 0x0000FFFF) = 0xF060 Then Exit
            Return 'GUI_RUNDEFMSG'
        EndFunc
    #EndRegion


    While Sleep(10)
        Switch GUIGetMsg()
            Case -3
                Exit
            Case $hButton1
                $Interrupt = 0
                Do
                    ConsoleWrite("Dang Loop: " & Random() & @CRLF)
                    Sleep(100)
                Until $Interrupt <> 0
                ConsoleWrite("!Loop bi ngat boi Button2" & @CRLF)
        EndSwitch
    WEnd
     
    Tungtata thích bài này.

Chia sẻ trang này

Đang tải...