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 [Solved] Giúp đỡ về active Child GUI

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

Trạng thái chủ đề:
Không mở trả lời sau này.
  1. QK_

    QK_ Thành viên mới
    • 1/6

    Tham gia ngày:
    6/1/16
    Bài viết:
    4
    Đã được thích:
    0
    Mọi người giúp tớ đoạn code này với :

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

    ;---------------------------------------------------
    Global $title = "Main"
    Global $BgColor = 0x000000
    Global $TextColor = 0xFFFFFF
    Global $FontName = "Segoe UI"
    Global $FontSide = 11
    ;---------------------------------------------------
    Global $FormMain            = GUICreate( $title, 1200, 650, -1, -1, BitOR($WS_SYSMENU, $WS_MINIMIZEBOX,$WS_MAXIMIZEBOX))

    Global $FormFile        = GUICtrlCreateMenu("&File")
        Global $Menu1   = GUICtrlCreateMenuItem("Form&1", $FormFile)
        Global $Menu2   = GUICtrlCreateMenuItem("Form&2", $FormFile)
        GUICtrlCreateMenuItem("", $FormFile, 4)
        Global $MenuExit        = GUICtrlCreateMenuItem("&Exit", $FormFile)

    Global $Form1       = GUICreate( "Form1", 800, 500, -1, -1, BitOR($WS_MINIMIZEBOX,$WS_MAXIMIZEBOX,$WS_BORDER,$WS_CAPTION,$WS_CHILD), -1, $FormMain)
        GUISetState(@SW_HIDE, $Form1)

    Global $Form2       = GUICreate( "Form2", 800, 500, -1, -1, BitOR($WS_MINIMIZEBOX,$WS_MAXIMIZEBOX,$WS_BORDER,$WS_CAPTION,$WS_CHILD), -1, $FormMain)
        GUISetState(@SW_HIDE, $Form2)

    GUISetState(@SW_SHOW, $FormMain)

    Global $MSG
    While 1
        $MSG = GUIGetMsg(1)
        Switch $MSG[1]
            Case $FormMain
                Switch $MSG[0]
                    Case $GUI_EVENT_CLOSE, $MenuExit
                        if MsgBox( 4, "MSG", "Quit ? ", 0, $FormMain) = 6 Then ExitLoop
                    Case $Menu1
                        Child_Show($Form1)
                    Case $Menu2
                        Child_Show($Form2)
                EndSwitch
            Case $Form1
                Switch $MSG[0]
                    Case $GUI_EVENT_CLOSE
                        GUISetState(@SW_HIDE, $Form1)
                EndSwitch
            Case $Form2
                Switch $MSG[0]
                    Case $GUI_EVENT_CLOSE
                        GUISetState(@SW_HIDE, $Form2)
                EndSwitch
        EndSwitch
    WEnd

    Func Child_Show($CID)
        Local $Status = WinGetState($CID)
        Switch $Status
            Case 5  ; Hiding
                GUISetState ( @SW_SHOW, $CID )
            Case 21 ; Hiding and MINIMIZED
                GUISetState ( @SW_SHOW , $CID )
            Case 37 ; Hiding and MAXIMIZED
                GUISetState ( @SW_SHOW , $CID )

            Case 7 ; Showing
                GUISetState ( @SW_SHOWNORMAL, $CID )
            Case 39 ; Showing and MAXIMIZED
                GUISetState ( @SW_RESTORE, $CID )
            Case 23 ; Showing and MINIMIZED
                GUISetState ( @SW_SHOWNORMAL, $CID )

            Case Else
        EndSwitch
    EndFunc
     
    Làm sao để khi click chuột vào Menu/Form1 ( Form1 đang ở trạng thái : Hide hoặc Minimize, Maximize, deactive) thì form1 được Restore trở về bình thường ở trạng thái Active .
    Form2 cũng tương tự.

    Đã thử các hàm Guisetstate, Winactivate, winsetontop cho các Gui child đều ko active được .
     
  2. Ut Em

    Ut Em Thành viên mới
    • 3/6

    Tham gia ngày:
    2/5/17
    Bài viết:
    5
    Đã được thích:
    1
    Bạn thử double click vào thành form1 hoặc 2 thử xem
     
    QK_ thích bài này.
  3. LVT491

    LVT491 Thành viên
    • 18/23

    Tham gia ngày:
    22/12/16
    Bài viết:
    46
    Đã được thích:
    26
    Kiểu này phải ko bạn

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

    ;---------------------------------------------------
    Global $title = "Main"
    Global $BgColor = 0x000000
    Global $TextColor = 0xFFFFFF
    Global $FontName = "Segoe UI"
    Global $FontSide = 11

    Global $F1_active = False
    Global $F2_active = False
    ;---------------------------------------------------
    Global $FormMain            = GUICreate( $title, 1200, 650, -1, -1, BitOR($WS_SYSMENU, $WS_MINIMIZEBOX,$WS_MAXIMIZEBOX))

    Global $FormFile        = GUICtrlCreateMenu("&File")
        Global $Menu1   = GUICtrlCreateMenuItem("Form&1", $FormFile)
        Global $Menu2   = GUICtrlCreateMenuItem("Form&2", $FormFile)
        GUICtrlCreateMenuItem("", $FormFile, 4)
        Global $MenuExit        = GUICtrlCreateMenuItem("&Exit", $FormFile)

    Global $Form1       = GUICreate( "Form1", 800, 500, 5, 5, BitOR($WS_MINIMIZEBOX,$WS_MAXIMIZEBOX,$WS_BORDER,$WS_CAPTION,$WS_CHILD), -1, $FormMain)
        GUISetState(@SW_HIDE, $Form1)

    Global $Form2       = GUICreate( "Form2", 800, 500, 10, 10, BitOR($WS_MINIMIZEBOX,$WS_MAXIMIZEBOX,$WS_BORDER,$WS_CAPTION,$WS_CHILD), -1, $FormMain)
        GUISetState(@SW_HIDE, $Form2)

    GUISetState(@SW_SHOW, $FormMain)

    Global $MSG
    While 1
        $MSG = GUIGetMsg(1)
        Switch $MSG[1]
            Case $FormMain
                Switch $MSG[0]
                    Case $GUI_EVENT_CLOSE, $MenuExit
                        if MsgBox( 4, "MSG", "Quit ? ", 0, $FormMain) = 6 Then ExitLoop
                    Case $Menu1
                        If Not $F1_active Then
                            GUISetState(@SW_SHOW, $Form1)
                            $F1_active = True
                        Else
                            GUISetState(@SW_RESTORE, $Form1)
                        EndIf
                        If $F2_active Then GUISetState(@SW_MINIMIZE, $Form2)
                    Case $Menu2
                        If Not $F2_active Then
                            GUISetState(@SW_SHOW, $Form2)
                            $F2_active = True
                        Else
                            GUISetState(@SW_RESTORE, $Form2)
                        EndIf
                        If $F1_active Then GUISetState(@SW_MINIMIZE, $Form1)
                EndSwitch
            Case $Form1
                Switch $MSG[0]
                    Case $GUI_EVENT_CLOSE
                        GUISetState(@SW_HIDE, $Form1)
                        $F1_active = False
                EndSwitch
            Case $Form2
                Switch $MSG[0]
                    Case $GUI_EVENT_CLOSE
                        GUISetState(@SW_HIDE, $Form2)
                        $F2_active = False
                EndSwitch
        EndSwitch
    WEnd
    #cs
    Func Child_Show($CID)
        Local $Status = WinGetState($CID)
        Switch $Status
            Case 5  ; Hiding
                GUISetState ( @SW_SHOW, $CID )
            Case 21 ; Hiding and MINIMIZED
                GUISetState ( @SW_SHOW , $CID )
            Case 37 ; Hiding and MAXIMIZED
                GUISetState ( @SW_SHOW , $CID )

            Case 7 ; Showing
                GUISetState ( @SW_SHOWNORMAL, $CID )
            Case 39 ; Showing and MAXIMIZED
                GUISetState ( @SW_RESTORE, $CID )
            Case 23 ; Showing and MINIMIZED
                GUISetState ( @SW_SHOWNORMAL, $CID )

            Case Else
        EndSwitch
    EndFunc
    #ce
     
    QK_ thích bài này.
  4. QK_

    QK_ Thành viên mới
    • 1/6

    Tham gia ngày:
    6/1/16
    Bài viết:
    4
    Đã được thích:
    0
    Cảm ơn bạn, ý tớ là các GUI child khác giữ nguyên trạng thái, Còn GUI mình cần thì active nó lên nếu như nó đang bị HIDE, Maximize, Minimize hoặc đang bị deactive (Vì đây chỉ là VD để mô tả , thực tế mình làm có rất nhiều Form child khoảng trên 20 cái)
     
    Chỉnh sửa cuối: 30/3/18
  5. QK_

    QK_ Thành viên mới
    • 1/6

    Tham gia ngày:
    6/1/16
    Bài viết:
    4
    Đã được thích:
    0
    Ai giúp tớ phát đi ⏳
     
  6. LVT491

    LVT491 Thành viên
    • 18/23

    Tham gia ngày:
    22/12/16
    Bài viết:
    46
    Đã được thích:
    26
    Như này đúng ý bạn chưa nhỉ

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

    ;---------------------------------------------------
    Global $title = "Main"
    Global $BgColor = 0x000000
    Global $TextColor = 0xFFFFFF
    Global $FontName = "Segoe UI"
    Global $FontSide = 11

    ;---------------------------------------------------
    Global $FormMain = GUICreate($title, 1200, 650, -1, -1, BitOR($WS_SYSMENU, $WS_MINIMIZEBOX, $WS_MAXIMIZEBOX))

    Global $FormFile = GUICtrlCreateMenu("&File")
    Global $Menu1 = GUICtrlCreateMenuItem("Form&1", $FormFile)
    Global $Menu2 = GUICtrlCreateMenuItem("Form&2", $FormFile)
    GUICtrlCreateMenuItem("", $FormFile, 4)
    Global $MenuExit = GUICtrlCreateMenuItem("&Exit", $FormFile)

    Global $Form1 = GUICreate("Form1", 800, 500, 5, 5, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_BORDER, $WS_CAPTION, $WS_CHILD), -1, $FormMain)

    Global $Form2 = GUICreate("Form2", 800, 500, 10, 10, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_BORDER, $WS_CAPTION, $WS_CHILD), -1, $FormMain)

    GUISetState(@SW_SHOW, $FormMain)

    Global $MSG
    While 1
        $MSG = GUIGetMsg(1)
        Switch $MSG[1]
            Case $FormMain
                Switch $MSG[0]
                    Case $GUI_EVENT_CLOSE, $MenuExit
                        If MsgBox(4, "MSG", "Quit ? ", 0, $FormMain) = 6 Then ExitLoop
                    Case $Menu1
                        GUISetState(@SW_SHOW, $Form1)
                        DllCall("user32.dll", "int", "SetParent", "hwnd", WinGetHandle($Form1), "hwnd", WinGetHandle($FormMain))
                    Case $Menu2
                        GUISetState(@SW_SHOW, $Form2)
                        DllCall("user32.dll", "int", "SetParent", "hwnd", WinGetHandle($Form2), "hwnd", WinGetHandle($FormMain))
                EndSwitch
            Case $Form1
                Switch $MSG[0]
                    Case $GUI_EVENT_CLOSE
                        GUISetState(@SW_HIDE, $Form1)
                EndSwitch
            Case $Form2
                Switch $MSG[0]
                    Case $GUI_EVENT_CLOSE
                        GUISetState(@SW_HIDE, $Form2)
                EndSwitch
        EndSwitch
    WEnd
     
     
    QK_ thích bài này.
  7. QK_

    QK_ Thành viên mới
    • 1/6

    Tham gia ngày:
    6/1/16
    Bài viết:
    4
    Đã được thích:
    0

    Chuẩn rồi đấy, cám ơn bạn LVT491 nhiều lắm
    Có vậy thôi mà mò mãi :D
     
Trạng thái chủ đề:
Không mở trả lời sau này.

Chia sẻ trang này

Đang tải...