Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Зависание скрипта при _Hover_Func (http://forum.oszone.net/showthread.php?t=203012)

Centrinar 25-03-2011 16:20 1643730

Зависание скрипта при _Hover_Func
 
Вложений: 1
Код:

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include "GUICtrlOnHover.au3"
#Region Main form
$hMain_GUI = GUICreate("Главное окно", 300, 200)
$Label = GUICtrlCreateLabel("Настройки", 10, 170, 70, 20)
_GUICtrl_OnHoverRegister($Label, "_Hover_Func", "_Hover_Func")
$nExit_Btn = GUICtrlCreateButton("Выход", 90, 170, 70, 20)
GUISetState(@SW_SHOW, $hMain_GUI)
#EndRegion Main form

#Region Settings form
$hStngs_GUI = GUICreate("Настройки", 400, 200)
$nStngs_Ok_Btn = GUICtrlCreateButton("ОК", 10, 170, 80, 25)
$nStngs_Close_Btn = GUICtrlCreateButton("Закрыть", 310, 170, 80, 25)
#EndRegion Settings form



While 1
    $aMsg = GUIGetMsg(1) ;Расширенная обработка событий

    Switch $aMsg[0]
        Case $GUI_EVENT_CLOSE, $nExit_Btn, $nStngs_Close_Btn
            Switch $aMsg[1]
                Case $hMain_GUI  ;Событие поступило от главного окна - завершаем работу скрипта
                    Exit
                Case $hStngs_GUI ;Событие поступило от окна настроек - закрываем его
                    GUISetState(@SW_HIDE, $hStngs_GUI)
            EndSwitch
        Case $Label
            GUISetState(@SW_SHOW, $hStngs_GUI)
    EndSwitch
WEnd

Func _Hover_Func($iCtrlID, $iParam)
        Local $sConsole_Data = "Hovered"
       
        Local $sButton_Text = "Hover Button"
        Local $iLabel_Color = 0x00000FF
        Local $iLabel_FontAttrib = 4
        Local $iCheckBox_State = $GUI_CHECKED
        Local $sEdit_Data = "New Edit Data"
       
        If $iParam = 2 Then ;Indicates On *Leave* Hover process
                $sConsole_Data = "NOT Hovered"
               
                $sButton_Text = "Button"
                $iLabel_Color = 0x000000
                $iLabel_FontAttrib = 0
                $iCheckBox_State = $GUI_UNCHECKED
                $sEdit_Data = "Edit Data"
        EndIf
       
        Printf("Control " & $iCtrlID & " [Data: " & GUICtrlRead($iCtrlID, 1) & "] Is Now " & $sConsole_Data)
       
        Switch $iCtrlID
                Case $Button
                        If GUICtrlRead($iCtrlID) <> $sButton_Text Then GUICtrlSetData($iCtrlID, $sButton_Text)
                Case $Label
                        GUICtrlSetColor($iCtrlID, $iLabel_Color)
                        GUICtrlSetFont($iCtrlID, Default, Default, $iLabel_FontAttrib)
                Case $CheckBox
                        GUICtrlSetState($iCtrlID, $iCheckBox_State)
                Case $Edit
                        If GUICtrlRead($iCtrlID) <> $sEdit_Data Then GUICtrlSetData($iCtrlID, $sEdit_Data)
        EndSwitch
EndFunc

Func Printf($Str, $Line=@ScriptLineNumber)
        ConsoleWrite("!===========================================================" & @LF & _
                                "+======================================================" & @LF & _
                                "--> Script Line (" & $Line & "):" & @LF & "!" & @TAB & $Str & @LF & _
                                "+======================================================" & @LF)
EndFunc

Собственно сабж, скрипт просто виснет

Creat0R 25-03-2011 17:54 1643781

Вообще то сначала нужно проверять скрипт на ошибки синтаксиса, а потом писать что скрипт виснет.
Конечно он виснет, ошибка гинерируется внутри callback-функций, это один из (мелких я бы сказал) недостатков обработчика ошибок в AutoIt.

В скрипте проверяется $Button, $CheckBox и $Edit, которые нигде не объявлены.

Код:

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include "GUICtrlOnHover.au3"

#Region Main form
$hMain_GUI = GUICreate("Главное окно", 300, 200)
$Label = GUICtrlCreateLabel("Настройки", 10, 170, 55, 20)
GUICtrlSetFont($Label, 8.5, 400, 0)
_GUICtrl_OnHoverRegister($Label, "_Hover_Func", "_Hover_Func")
$nExit_Btn = GUICtrlCreateButton("Выход", 90, 170, 70, 20)
GUISetState(@SW_SHOW, $hMain_GUI)
#EndRegion Main form

#Region Settings form
$hStngs_GUI = GUICreate("Настройки", 400, 200)
$nStngs_Ok_Btn = GUICtrlCreateButton("ОК", 10, 170, 80, 25)
$nStngs_Close_Btn = GUICtrlCreateButton("Закрыть", 310, 170, 80, 25)
#EndRegion Settings form


While 1
    $aMsg = GUIGetMsg(1) ;Расширенная обработка событий

    Switch $aMsg[0]
        Case $GUI_EVENT_CLOSE, $nExit_Btn, $nStngs_Close_Btn
            Switch $aMsg[1]
                Case $hMain_GUI  ;Событие поступило от главного окна - завершаем работу скрипта
                    Exit
                Case $hStngs_GUI ;Событие поступило от окна настроек - закрываем его
                    GUISetState(@SW_HIDE, $hStngs_GUI)
            EndSwitch
        Case $Label
            GUISetState(@SW_SHOW, $hStngs_GUI)
    EndSwitch
WEnd

Func _Hover_Func($iCtrlID, $iParam)
    Local $sConsole_Data = "Hovered"
    Local $iLabel_Color = 0x00000FF
    Local $iLabel_FontAttrib = 4
    Local $iLabel_CursorID = 0

    If $iParam = 2 Then ;Indicates On *Leave* Hover process
        $sConsole_Data = "NOT Hovered"

        $iLabel_Color = 0x000000
        $iLabel_FontAttrib = 0
        $iLabel_CursorID = -1
    EndIf

    Printf("Control " & $iCtrlID & " [Data: " & GUICtrlRead($iCtrlID, 1) & "] Is Now " & $sConsole_Data)

    Switch $iCtrlID
        Case $Label
            GUICtrlSetColor($iCtrlID, $iLabel_Color)
            GUICtrlSetFont($iCtrlID, 8.5, 400, $iLabel_FontAttrib)
            GUICtrlSetCursor($iCtrlID, $iLabel_CursorID)
    EndSwitch
EndFunc

Func Printf($Str, $Line=@ScriptLineNumber)
    ConsoleWrite("!===========================================================" & @LF & _
                "+======================================================" & @LF & _
                "--> Script Line (" & $Line & "):" & @LF & "!" & @TAB & $Str & @LF & _
                "+======================================================" & @LF)
EndFunc


Creat0R 25-03-2011 18:13 1643802

Кстати, в данном случае наверное будет лучше использовать _GUICtrlHyperlink для ссылки, и возможностей больше.

madmasles 25-03-2011 18:53 1643830

Centrinar,
А что такое Засисание...
:laugh:

Centrinar 25-03-2011 20:25 1643880

Как сделать фон прозрачным GUISetBkColor ($iCtrlID, $GUI_BKCOLOR_TRANSPARENT) не помогает

madmasles 25-03-2011 20:51 1643904

Цитата:

Цитата Centrinar
Как сделать фон прозрачным »

Если я правильно Вас понял:
Код:

#include <GUIConstantsEx.au3>

$hGui = GUICreate('Test', 220, 100)
GUISetBkColor(0xE0FFFF)
$nSlider = GUICtrlCreateSlider(10, 10, 200, 20)
GUICtrlSetLimit(-1, 255, 55)
GUICtrlSetData($nSlider, 255)
GUISetState()

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $nSlider
            WinSetTrans($hGui, '', GUICtrlRead($nSlider))
    EndSwitch
WEnd

PS
Лучше было бы в новой теме вопрос задать.

Centrinar 25-03-2011 20:58 1643912

фон лайбла

Creat0R 25-03-2011 21:36 1643950

Цитата:

Цитата Centrinar
Как сделать фон прозрачным »

При чём тут эта тема?


Время: 17:44.

Время: 17:44.
© OSzone.net 2001-