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

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

Ответить
Настройки темы
[решено] Отображение картинки без каких либо дополнит окон, кнопок, бордюров...

Аватара для sashadeg

Старожил


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

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


Нашел в стандартных примерах нечто похожее(показывает пример использования "ползунка" в аутоите)

Вот путь к примеру:

C:\Program Files\AutoIt3\Examples\GUI\Advanced\AlphaBlend.au3

Помогите, пожалуйста.

Отправлено: 13:31, 02-05-2009

 

Аватара для proxy

Старожил


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

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


еще пример на gui с картинкой:
Код: Выделить весь код
#include <GUIConstants.au3>
#include <WindowsConstants.au3>

$Main_Gui = GUICreate("Transparent Pic Demo", 345, 0, -1, -1, $WS_POPUP)
$Pic_Gui = GUICreate("", 345, 232, 10, 75, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $Main_Gui)

GUICtrlCreatePic(@SystemDir & "\oobe\images\monitor.gif", 0, 0, 0, 0, -1, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetState(-1, $GUI_DISABLE)

GUICtrlCreateInput('test', 50, 75, 50, 20)

GUISetState(@SW_SHOW, $Pic_Gui)
GUISetState(@SW_SHOW, $Main_Gui)

While GUIGetMsg() <> $GUI_EVENT_CLOSE
WEnd
Цитата:
Чтобы появлялось плавно надо в - Step - поставить не 1 а 0.1
и сделать это в таймере, что бы например, если кликнуть на картинку,
тут же бы открывалось окно программы, а не происходило ожидание завершения анимации ..)

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Отправлено: 04:34, 16-07-2009 | #11



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

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


Новый участник


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

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


Изображения
Тип файла: png 1.png
(17.1 Kb, 24 просмотров)

Код: Выделить весь код
;~ #include <GUIConstants.au3>
;~ -------------------------------------------------------
; Description   :
; Written by    : Alex Pougach
; Date          : 22/12/2008
;
; With help of Igal Bravshtein and Creat0R
; --------------------------------------------------------

#include-once

; Transp_PNG( $temp , x , y),$temp = "E:\VBA\AutoIt\GUI\2.png"
; $temp- Doroga k file
; x - прозрачность
; y- плавность перхода

#NoTrayIcon
#include <GDIPlus.au3>
#include <GuiComboBox.au3>
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <ButtonConstants.au3>
#include <WinAPI.au3>

Global Const $WM_LBUTTONDOWN = 0x0201
Global Const $WM_LBUTTONUP = 0x0202
Global Const $ULW_ALPHA = 2
Global Const $AC_SRC_ALPHA = 1
Global $launchDir = @DesktopDir, $GUI

Global $iExitLoop = False

Func Transp_PNG($temp, $iOpacity = 255, $EnableFade = True)
    If $iOpacity < 0 Then $iOpacity = 0
    If $iOpacity > 255 Then $iOpacity = 255

    ; Load PNG file as GDI bitmap
    _GDIPlus_Startup()
    $pngSrc = $temp
    $hImage = _GDIPlus_ImageLoadFromFile($pngSrc)

    ; Extract image width and height from PNG
    $width = _GDIPlus_ImageGetWidth($hImage)
    $height = _GDIPlus_ImageGetHeight($hImage)

    ; Create layered window

    $GUI = GUICreate("", $width, $height, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
    WinSetOnTop($GUI, "", 1)

    GUIRegisterMsg($WM_LBUTTONDOWN, "WM_LBUTTONDOWN")
    GUIRegisterMsg($WM_LBUTTONUP, "WM_LBUTTONUP")
    GUIRegisterMsg($WM_WINDOWPOSCHANGED, "WM_WINDOWPOSCHANGED")

    GUISetState()

    If $EnableFade Then
        ;fade in png background
        For $i = 0 To $iOpacity Step 1
            SetBitmap($GUI, $hImage, $i)
        Next
    Else
        SetBitmap($GUI, $hImage, $iOpacity)
    EndIf

    ; set default button for Enter key activation - renders outside GUI window
    $BtnExit = GUICtrlCreateButton("Exit", $width, $height, 10, 10, $BS_DEFPUSHBUTTON)

    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE, $BtnExit
                ExitLoop
        EndSwitch

        If $iExitLoop Then ExitLoop
    WEnd

    If $EnableFade Then
        ;fade out png background
        For $i = $iOpacity To 0 Step -1
            SetBitmap($GUI, $hImage, $i)
        Next
    Else
        SetBitmap($GUI, $hImage, 0)
    EndIf
EndFunc   ;==>Transp_PNG

; Handle the WM_LBUTTONDOWN for the layered window so it can be dragged by clicking anywhere on the image.
Func WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    If BitAND(WinGetState($hWnd), 32) Then Return $GUI_RUNDEFMSG
    DllCall("user32.dll", "long", "SendMessage", "hwnd", $hWnd, "int", $WM_SYSCOMMAND, "int", 0xF009, "int", 0)
EndFunc   ;==>WM_LBUTTONDOWN

Func WM_LBUTTONUP($hWnd, $iMsg, $wParam, $lParam)
    $iExitLoop = True
EndFunc   ;==>WM_LBUTTONUP

Func WM_WINDOWPOSCHANGED($hWnd, $iMsg, $wParam, $lParam)
    $iExitLoop = False
EndFunc   ;==>WM_WINDOWPOSCHANGED

; SetBitMap
Func SetBitmap($hGUI, $hImage, $iOpacity)
    Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend

    $hScrDC = _WinAPI_GetDC(0)
    $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
    DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha", $iOpacity)
    DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
    _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
    _WinAPI_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
EndFunc   ;==>SetBitmap

Отправлено: 17:30, 16-07-2009 | #12


Пользователь


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

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


Очень хороший пример плавного появления картинки . Да простит меня автор я подправил только значение Step в функции
Для более плавного появления картинки. Интересно что пример работает с проблемным форматом - png -
Вопрос к знатокам а можно ли этот пример как то упростить? например вместо - png - поставить - gif - или какими-другими способами , или нельзя?


Код: Выделить весь код
#NoTrayIcon
#include <GDIPlus.au3>
#include <GuiComboBox.au3>
#include <File.au3>
#include <Misc.au3>
#include <Array.au3>
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <ButtonConstants.au3>
#include <WinAPI.au3>
Global Const $AC_SRC_ALPHA = 1;, $ULW_ALPHA = 2
Global $launchDir = @DesktopDir, $GUI
Global $hUser32DllOpen = DllOpen("User32.dll")
$temp = "2.png"
Transp_PNG($temp)
Func Transp_PNG($temp, $iOpacity = 255, $EnableFade = True)
If $iOpacity < 0 Then $iOpacity = 0
If $iOpacity > 255 Then $iOpacity = 255
; Load PNG file as GDI bitmap
_GDIPlus_Startup()
$pngSrc = $temp
$hImage = _GDIPlus_ImageLoadFromFile($pngSrc)
; Extract image width and height from PNG
$width = _GDIPlus_ImageGetWidth($hImage)
$height = _GDIPlus_ImageGetHeight($hImage)
; Create layered window
$GUI = GUICreate("lod3n launcher", $width, $height, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
GUISetState()
WinSetOnTop($GUI, "", 1)
If $EnableFade Then
;fade in png background
For $i = 0 To $iOpacity Step 0.1
SetBitmap($GUI, $hImage, $i)
Next
Else
SetBitmap($GUI, $hImage, $iOpacity)
EndIf
; set default button for Enter key activation - renders outside GUI window
$BtnExit = GUICtrlCreateButton("Exit", $width, $height, 10, 10, $BS_DEFPUSHBUTTON)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $BtnExit
ExitLoop
EndSwitch
If _IsPressed(01, $hUser32DllOpen) Then ExitLoop
WEnd
If $EnableFade Then
;fade out png background
For $i = $iOpacity To 0 Step -0.1
SetBitmap($GUI, $hImage, $i)
Next
Else
SetBitmap($GUI, $hImage, 0)
EndIf
CancelPressed()
EndFunc ;==>Transp_PNG
Func CancelPressed()
DllClose($hUser32DllOpen)
Exit
EndFunc
; Handle the WM_NCHITTEST for the layered window so it can be dragged by clicking anywhere on the image.
Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
Switch $iMsg
Case $WM_NCHITTEST
If $hWnd = $GUI Then Return $HTCAPTION
EndSwitch
EndFunc ;==>WM_NCHITTEST
; SetBitMap
Func SetBitmap($hGUI, $hImage, $iOpacity)
Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
$hScrDC = _WinAPI_GetDC(0)
$hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
$hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
$tSize = DllStructCreate($tagSIZE)
$pSize = DllStructGetPtr($tSize)
DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
$tSource = DllStructCreate($tagPOINT)
$pSource = DllStructGetPtr($tSource)
$tBlend = DllStructCreate($tagBLENDFUNCTION)
$pBlend = DllStructGetPtr($tBlend)
DllStructSetData($tBlend, "Alpha", $iOpacity)
DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
_WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
_WinAPI_ReleaseDC(0, $hScrDC)
_WinAPI_SelectObject($hMemDC, $hOld)
_WinAPI_DeleteObject($hBitmap)
_WinAPI_DeleteDC($hMemDC)
EndFunc ;==>SetBitmap

Последний раз редактировалось assch, 23-04-2012 в 01:40.


Отправлено: 23:01, 17-07-2009 | #13


Пользователь


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

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


Вот ещё один немного упрощённый пример картинки без видимости самого окна.

Не подскажете, а как сделать определённую прозрачность самой картинки не окна а именно картинки.
Выше было написано что с помощью функции SetBitMap , а кроме этого больше ни как?
Не функцию динамического появления , а просто чтобы картинка стояла с определённой прозрачностью.
И не знает ли кто почему картинка с форматом - png - в этом примере работать не хотит.


Код: Выделить весь код
#include <GUIConstants.au3>
#include <WindowsConstants.au3>

$pic = GUICreate("", 68, 71, -1, -1, $WS_POPUP, $WS_EX_LAYERED)

GUICtrlCreatePic("merlin.gif", 0, 0, 68, 71, -1, $GUI_WS_EX_PARENTDRAG)

GUISetState()

While GUIGetMsg() <> $GUI_EVENT_CLOSE
WEnd

Последний раз редактировалось assch, 23-04-2012 в 01:40.


Отправлено: 02:50, 18-07-2009 | #14


Аватара для proxy

Старожил


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

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


Цитата assch:
Не подскажете, а как сделать определённую прозрачность самой картинки не окна а именно картинки.
Выше было написано что с помощью функции SetBitMap , а кроме этого больше ни как?
Не функцию динамического появления , а просто чтобы картинка стояла с определённой прозрачностью. »
Ответ ооооооочень близко - над головой, глянь выше

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Отправлено: 04:11, 18-07-2009 | #15


Пользователь


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

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


Подредактировал код от beve кажется получилось плавное появление картинки.
файл - 2.png - находится чуть по выше.



Код: Выделить весь код
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <GDIPlus.au3>

Global $opacity = 0

$gui = GUICreate("Transparent", 0, 0, -1, -1, $WS_POPUP , $WS_EX_LAYERED)
_GDIPlus_Startup ()
$image = _GDIPlus_ImageLoadFromFile ("2.png")
SetBitMap ($gui , $image, $opacity)

GUISetState()

For $i = 0 To 255 Step 5
        SetBitmap ($gui, $image, $i)
        Sleep (30)
Next

Func SetBitmap($gui, $image, $opacity)
        $hScrDC = _WinAPI_GetDC (0)
        $hMemDC = _WinAPI_CreateCompatibleDC ($hScrDC)
        $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap ($image)
        $hOld = _WinAPI_SelectObject ($hMemDC, $hBitmap)
        $tSize = DllStructCreate ($tagSIZE)
        $pSize = DllStructGetPtr ($tSize )
        DllStructSetData ($tSize, "X", _GDIPlus_ImageGetWidth ($image))
        DllStructSetData ($tSize, "Y", _GDIPlus_ImageGetHeight ($image))
        $tSource = DllStructCreate ($tagPOINT)
        $pSource = DllStructGetPtr ($tSource)
        $tBlend = DllStructCreate ($tagBLENDFUNCTION)
        $pBlend = DllStructGetPtr ($tBlend)
        DllStructSetData ($tBlend, "Alpha" , $opacity)
        DllStructSetData ($tBlend, "Format", 1)
        _WinAPI_UpdateLayeredWindow ($gui, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
        _WinAPI_ReleaseDC (0, $hScrDC)
        _WinAPI_SelectObject ($hMemDC, $hOld)
        _WinAPI_DeleteObject ($hBitmap)
        _WinAPI_DeleteDC ($hMemDC)
EndFunc

While GUIGetMsg () <> $GUI_EVENT_CLOSE
WEnd

Последний раз редактировалось assch, 18-07-2009 в 18:41.


Отправлено: 07:11, 18-07-2009 | #16


Аватара для beve

Старожил


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

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


assch, не забывай обрамлять код в твоих постах тегами [code][/codе].

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.

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

Отправлено: 11:31, 18-07-2009 | #17


Пользователь


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

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


Большое спасибо за подсказки. Я просто ещё не разобрался как это делается. Попробую исправить.

Не подскажете а как сделать чтобы код был цветным?

Последний раз редактировалось assch, 18-07-2009 в 18:46.


Отправлено: 15:18, 18-07-2009 | #18


Аватара для beve

Старожил


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

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


Цитата assch:
Не подскажете а как сделать чтобы код был цветным? »
Au3ToPost

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.

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

Отправлено: 16:42, 18-07-2009 | #19


Пользователь


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

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


а как сделать что бы картинка появлялась в центре экрана, а задний фон становился полупрозрачным?

Отправлено: 16:11, 04-08-2009 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - [решено] Отображение окон программ в усеченном виде baltiec Microsoft Windows 2000/XP 9 23-07-2016 18:18
Драйвер - Некорректное отображение текстур, окон steips Microsoft Windows Vista 0 12-01-2010 15:14
какой BIOS лучше на мамку ASUS P5B-VM 1004 либо 0901 либо 0504 либо 0405 либо 0307 paljch Материнские платы и память 1 12-11-2009 23:27
При переустановке XP комп влюбое время стал вырубаться, без каких либой сообщений collman Непонятные проблемы с Железом 11 07-10-2009 09:58
Комп сам уходит в перезагрузку без каких либо объективных причин MXMX Непонятные проблемы с Железом 45 07-06-2008 14:18




 
Переход