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ỏi đáp Sửa giúp mình đoạn code này (code liên quan đến Start, Pause, Resume)

Thảo luận trong 'Thảo luận chung - Hỏi đáp' bắt đầu bởi hoanghuy, 3/1/19.

  1. hoanghuy

    hoanghuy Thành viên
    • 8/11

    Tham gia ngày:
    1/12/18
    Bài viết:
    50
    Đã được thích:
    4
    Đây ạ, nó chỉ đến đoạn Pause thôi, ấn lần nữa thì không có gì xảy ra cả, em muốn ấn thêm 1 lần nữa thì nó sang hàm _resume()
    -------------------------------------------------------------
    Mã (AutoIt):
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $Form1=GUICreate("",100,100,-1,-1,$WS_POPUP)
    GUISetBKColor(0xFFFFFF,$Form1)
    $Button=GUICtrlCreateButton("Start",16,64,65,33)
    GUISetState(@SW_SHOW)
    $var=0

    While 1
       Switch GUIGetMsg()
         Case $GUI_EVENT_CLOSE
           Exit
        Case $Button
           _Pause()
           EndSwitch

    WEnd


    Func _Pause()
       GUICtrlSetData($Button,"Pause")
    Dim $var=150

    EndFunc

    Func _Resume()
       GUICtrlSetData($Button,"Resume")
    Dim $var=90


    EndFunc


    If ($var > 100) Then
       _Resume()
    If ($var < 100) Then
       _Pause()
    EndIf
    EndIf
     
     
  2. 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
    Trong diễn đàn đã có sẵn topic viết về vấn đề Pause/Resume rồi, hãy tự tìm đọc nó :)
    Thân!
     
    CanTrungSo1 and quochoa like this.
  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
    không phải, cái đó là có tooltip (thời gian), của tui không có
     
  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
    Tooltip để báo cho bạn biết rằng trạng thái script đang hoạt động hay đang tạm dừng. Đọc code đó để hiểu cách nó hoạt động rồi tự áp dụng vào code của bạn.
    Thân!
     
  5. hoanghuy

    hoanghuy Thành viên
    • 8/11

    Tham gia ngày:
    1/12/18
    Bài viết:
    50
    Đã được thích:
    4
    đây, do mình newbie thôi, mong bạn chỉ giúp mình
    Mã (AutoIt):
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
       $Form1=GUICreate("",355,211)
       $Group1=GUICtrlCreateGroup("",8,48,249,97)
       $BtnStart=GUICtrlCreateButton("Start",16,64,65,33)
       $LblFooter=GUICtrlCreateLabel("Thông tin chung",8,192,337,17)
       GUICtrlCreateGroup("",-99,-99,1,1)
       GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    Global $paused=False
    Global $i=0

    While 1
       Switch GUIGetMsg()
           Case $GUI_EVENT_CLOSE
               Exit
           Case $BtnStart
                BtnStart_Click()
       EndSwitch
    WEnd


    Func BtnStart_Click()
       GUICtrlSetData($BtnStart,"Pause")
       $paused=False
       While 1
           $i+=1
           ToolTip('Đang hoạt động, biến tăng: '&$i)
            iSleep(500)
       WEnd
    EndFunc


    Func BtnPause_Click()
       GUICtrlSetData($BtnStart,"Resume")
       $paused=True
       ToolTip('Đang tạm dừng')
       While 1
            iSleep(100)  -khúc này để làm gì ???
       WEnd
       ToolTip('')
    EndFunc


    Func iSleep($iDelay)        -mình không hiểu khúc này $iDelay
       $iBegin=TimerInit()
       While TimerDiff($iBegin)<$iDelay
           Switch GUIGetMsg()
               Case $GUI_EVENT_CLOSE
                   Exit
               Case $BtnStart
                   If $paused Then  -sao khúc này không có true false như này   (If $paused=true Then),  hoặc (If $paused=false Then)  
                        BtnStart_Click()
                   Else
                        BtnPause_Click()
                   EndIf
           EndSwitch
       WEnd
    EndFunc
     
  6. 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
    1. Bạn không hiểu bởi vì bạn đã không thực hiện bước "Đọc kỹ hướng dẫn sử dụng trước khi dùng".

    2. Vòng lặp While đầu tiên dùng để giữ cho GUI ở trạng thái luôn hiển, vì AutoIt là ngôn ngữ kịch bản nên nếu không có vòng lặp hay Sleep() thì code sẽ chạy từ trên xuống dưới và kết thúc trong vòng 30 giây.

    3. Vòng lặp While thứ 2 (-khúc này để làm gì ???) là để giữ trạng thái "Đang tạm dừng", để giữ nó cần có Sleep($iTime) (Ngừng script trong khoảng thời gian $iTime tính bằng miliseconds). Vì dùng Sleep() đơn thuần sẽ không tương tác tiếp được, nên tác giả dùng hàm iSleep($iDelay) bên dưới để tương tác ngắt vòng lặp.

    4. "-mình không hiểu khúc này $iDelay" $iDelay là thời gian tạm ngừng áp dụng cho việc đọc thời gian thực TimerDiff() trong vòng lặp While thứ 3 bên dưới. Nếu thời gian thực bắt đầu mỗi lần chạy Func iSleep() còn nhỏ hơn thời gian tạm ngừng $iDelay thì còn thực hiện vòng lặp While thứ 3. Ở vòng lặp While thứ 3 nếu thời gian thực lớn hơn hoặc bằng $iDelay thì thoát vòng lặp. Nhưng nó lại vướng vòng lặp While thứ 2, nên tiếp tục lặp với thời gian $iDelay. Cho đến khi điều kiện thoát là $paused = False bằng việc click vào nút $BtnStart 1 lần nữa.

    5. "-sao khúc này không có truefalse như này (If$paused=trueThen), hoặc (If$paused=falseThen)" bạn không hiểu là vì bạn không thực hiện điều 1. trong bài đăng này.
     
    CanTrungSo1 thích bài này.

Chia sẻ trang này

Đang tải...