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 Administrator Thành viên BQT Administrator Super Moderator
    • 93/113

    Tham gia ngày:
    29/9/15
    Bài viết:
    642
    Đã được thích:
    1,181
    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.
  2. #Rainy# Hoàng Vũ IT

    #Rainy# Hoàng Vũ IT Hoàng Vũ IT Moderator
    • 43/45

    Tham gia ngày:
    21/11/16
    Bài viết:
    404
    Đã được thích:
    122
    _WM_COMMAND_BUTTON($hWnd, $Msg, $wParam, $lParam)
    các thông số của hàm này được truyền 1 cách tự động đúng k a. Vậy làm sao để biết nó truyền như nào ạ
     
  3. hoanghuy

    hoanghuy Thành viên
    • 8/11

    Tham gia ngày:
    1/12/18
    Bài viết:
    50
    Đã được thích:
    4
    cái #Region và #EndRegion để làm gì vậy anh ?
     
  4. yutijang

    yutijang Thành viên năng động
    • 28/34

    Tham gia ngày:
    1/7/18
    Bài viết:
    110
    Đã được thích:
    61
    Theo file help thì nó dùng để "đóng khung" 1 khối code, nhằm phục vụ chủ yếu cho việc "mở rộng/thu gọn" các khối code trong trình biên tập SciTE.
    #Region mở đầu và #EndRegion kết thúc một khối code, bấm dấu [+]/[-] bên trái #Region để mở rộng/thu gọn.
     

Chia sẻ trang này

Đang tải...