Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] InputBox как назначить фоновую картинку?

Ответить
Настройки темы
[решено] InputBox как назначить фоновую картинку?

Аватара для Centrinar

Старожил


Сообщения: 247
Благодарности: 1

Профиль | Цитировать


Надо что бы в элементе InputBox была фоновая картинка. СПАСИБО

Отправлено: 13:45, 08-06-2010

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Вложения
Тип файла: zip XBox_Hook.zip
(4.3 Kb, 18 просмотров)

Можно построить из GUI, а можно использовать хук:

Код: Выделить весь код
Global $h_XBox_DLL, $h_XBox_Hook, $p_XBox_Proc, $h_XBox_Brush, $a_XBox_BttnTxts, $n_XBox_TxtColor, $s_XBox_BGFile, $s_XBox_IconFile

_XBox( _
    "MsgBox", _
    '64|"Modified MsgBox"|"This is a Modified MsgBox ' & @CRLF & 'With Font Color,Icon and Button Changes ' & @CRLF & 'On a New BackGround.."', _
    "Click Done!", _
    0x0000FF, _
    @ScriptDir & "\mac5.bmp", _
    @ScriptDir & "\crapper.ico")

_XBox( _
    "InputBox", _
    '"Modified InputBox"|"This is a Modified InputBox' & @CRLF & 'With Font Color,Icon and Button Changes' & @CRLF & 'On a New BackGround.."', _
    'Confirm|No way!', _
    0xBF0000, _
    @ScriptDir & "\mac5.bmp")

Func _XBoxHookProc($nCode, $wParam, $lParam)
    Local $RET = 0, $hBitmap = 0, $xWnd = 0

    If $nCode < 0 Then
        $RET = DllCall($h_XBox_DLL, "int", "CallNextHookEx", _
                "hwnd", $h_XBox_Hook, _
                "int", $nCode, _
                "int", $wParam, _
                "int", $lParam)

        Return $RET[0]
    EndIf

    Switch $nCode
        Case 5 ;5=HCBT_ACTIVATE
            $hBitmap = DllCall($h_XBox_DLL, "hwnd", "LoadImage", _
                    "hwnd", 0, _
                    "str", $s_XBox_IconFile, _
                    "int", 1, _  ;1=IMAGE_ICON
                    "int", 0, _
                    "int", 0, _
                    "int", 0x0010) ;0x0010=LR_LOADFROMFILE

            DllCall($h_XBox_DLL, "int", "SendDlgItemMessage", _
                    "hwnd", $wParam, _
                    "int", 20, _       ;Icon ID
                    "int", 0x0172, _   ;0x0172=STM_SETIMAGE
                    "int", 1, _        ;1=IMAGE_ICON
                    "int", $hBitmap[0])

            For $i = 1 To UBound($a_XBox_BttnTxts)-1
                If $a_XBox_BttnTxts[$i] <> "" Then
                        DllCall($h_XBox_DLL, "int", "SetDlgItemText", _
                            "hwnd", $wParam, _
                            "int", $i, _   ;Button ID
                            "str", $a_XBox_BttnTxts[$i])
                EndIf
            Next
        Case 3 ;3=HCBT_CREATEWND
            $xWnd = $wParam

            If $p_XBox_Proc = 0 And $xWnd <> 0 Then
                $CMBP = DllCallbackRegister("_XBoxModifyProc", "int", "hwnd;int;int;int")
                $p_XBox_Proc = DllCall($h_XBox_DLL, "int", "SetWindowLong", _
                        "hwnd", $xWnd, _
                        "int", -4, _     ;-4=GWL_WNDPROC
                        "int", DllCallbackGetPtr($CMBP))
            EndIf
        Case 4 ;4=HCBT_DESTROYWND
            If $wParam = $xWnd Then DllCall($h_XBox_DLL, "int", "SetWindowLong", _
                    "hwnd", $xWnd, _
                    "int", -4, _  ;-4=GWL_WNDPROC
                    "int", $p_XBox_Proc[0])
    EndSwitch
    Return
EndFunc

Func _XBox($sBox, $vParams, $vButton_Texts = -1, $nLabel_Color = -1, $sBackground_File = '', $sIcon_File = '')
    Dim $h_XBox_DLL = 0, $h_XBox_Hook = 0, $p_XBox_Proc = 0, $h_XBox_Brush = 0
    Dim $a_XBox_BttnTxts = 0, $n_XBox_TxtColor = 0, $s_XBox_BGFile = '', $s_XBox_IconFile = ''

    $h_XBox_DLL = DllOpen("user32.dll")

    Local $hProc = DllCallbackRegister("_XBoxHookProc", "int", "int;int;int")
    Local $TID = DllCall("Kernel32.dll", "int", "GetCurrentThreadId")

    $h_XBox_Hook = DllCall($h_XBox_DLL, "hwnd", "SetWindowsHookEx", _
            "int", 5, _   ;5=WH_CBT
            "ptr", DllCallbackGetPtr($hProc), _
            "hwnd", 0, _
            "dword", $TID[0])

    If $vButton_Texts <> -1 Then
        $a_XBox_BttnTxts = StringSplit($vButton_Texts, "|")
    EndIf

    If $nLabel_Color <> -1 Then
        $n_XBox_TxtColor = $nLabel_Color
    EndIf

    If $sBackground_File <> "" Then
        $s_XBox_BGFile = $sBackground_File
    EndIf

    If $sIcon_File <> "" Then
        $s_XBox_IconFile = $sIcon_File
    EndIf

    Local $aParams = StringSplit($vParams, "|")
    $vParams = ""

    For $i = 1 To $aParams[0]
        $vParams &= $aParams[$i]

        If $i < $aParams[0] Then
            $vParams &= ","
        EndIf
    Next

    Local $iRet = Execute($sBox & '(' & $vParams & ')')

    DllCall($h_XBox_DLL, "int", "UnhookWindowsHookEx", "hwnd", $h_XBox_Hook[0])
    DllCallbackFree($hProc)
    DllClose($h_XBox_DLL)

    Return $iRet
EndFunc

Func _XBoxModifyProc($hWnd, $uMsg, $wParam, $lParam)
    Local $hBitmap = 0, $RET = 0

    Switch $uMsg
        Case 272 ;WM_INITDIALOG
            If FileExists($s_XBox_BGFile) Then
                $hBitmap = DllCall($h_XBox_DLL, "hwnd", "LoadImage", _
                        "hwnd", 0, _
                        "str", $s_XBox_BGFile, _
                        "int", 0, _  ;0=IMAGE_BITMAP
                        "int", 0, _
                        "int", 0, _
                        "int", 0x0010) ;0x0010=LR_LOADFROMFILE
                $h_XBox_Brush = DllCall("gdi32.dll", "hwnd", "CreatePatternBrush", "hwnd", $hBitmap[0])
            EndIf
        Case 310, 312 ;310=WM_CTLCOLORDLG,312=WM_CTLCOLORSTATIC
            If $n_XBox_TxtColor <> 0 Then
                DllCall("gdi32.dll", "int", "SetBkMode", "hwnd", $wParam, "int", 1) ;1=TRANSPARENT
                DllCall("gdi32.dll", "int", "SetTextColor", "hwnd", $wParam, "int", _XBoxRGB2BGR($n_XBox_TxtColor))

                Return $h_XBox_Brush[0]
            EndIf
    EndSwitch

    $RET = DllCall($h_XBox_DLL, "int", "CallWindowProc", "hwnd", $p_XBox_Proc[0], "hwnd", $hWnd, "int", $uMsg, "int", $wParam, "int", $lParam)

    Return $RET[0]
EndFunc

Func _XBoxRGB2BGR($iColor)
    If IsInt($iColor) And ($iColor < 2 ^ 24) Then
        Local $iX = BitShift(BitAND($iColor, 0xFF0000), 16)
        Local $iY = BitAND($iColor, 0xFF00)
        Local $iZ = BitShift(BitAND($iColor, 0xFF), -16)
        Return BitOR($iX, $iY, $iZ)
    Else
        Return -1
    EndIf
EndFunc
Файл изображения и иконку прикрепил, поместить в папку со скриптом.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:14, 08-06-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


А нафик ? в обычное GUI окно никак ?

Отправлено: 19:14, 08-06-2010 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] InputBox как назначить фоновую картинку?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Как назначить букву DVD приводу с помощью Автоит подобно как CMD? Pozia AutoIt 14 15-01-2010 19:01
[решено] Как сделать, чтобы текст вводимый в InputBox пропечатался самостоятельно позже? sashadeg AutoIt 3 23-02-2009 10:58
Разное - [решено] Как назначить имя Администратор BlackboxeR Microsoft Windows 2000/XP 2 29-01-2008 11:07
Как сделать фоновую установку кодека DivX ? GRomV Автоматическая установка приложений 1 04-12-2007 11:18
сделать фоновую картинку в папке nemo555 Хочу все знать 2 24-09-2006 00:01




 
Переход