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

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

Ответить
Настройки темы
png или ico вместо обычной кнопки,как реализовать?

Ветеран


Автор проектов


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


Конфигурация

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


Изменения
Автор: Vsirf
Дата: 22-02-2012
Описание: 1660807-1.png
Здраствуйте...
1.Как вместо кнопки закрыть , поставить свои 3 изображения, таким образом, что бы при наведении и нажатии изображение изменялось?
2.Как вместо кнопки запуск , установить свое изображение формата png , таким же образом как и в пункте 1 ?

Код

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

_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\1660807-1.png')
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_Shutdown()

$hForm = GUICreate('Здраствуйте', 620, 460, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
_WinAPI_UpdateLayeredWindowEx($hForm, -1, -1, $hBitmap, 255)
GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
GUISetState()

$iPos = WinGetPos($hForm)
$hChild = GUICreate('', 620, 460, $iPos[0], $iPos[1], $WS_POPUP, $WS_EX_LAYERED, $hForm)
GUISetBkColor(0xFF00DC)
$iButton = GUICtrlCreateButton('Закрыть', 568, 2, 50, 20)
$iButton1 = GUICtrlCreateButton('Запуск', 40, 68, 50, 20)
_WinAPI_SetLayeredWindowAttributes($hChild, 0xFF00DC, 255)
GUIRegisterMsg($WM_MOVE, 'WM_MOVE')
GUISetState()

While 1
    Switch GUIGetMsg()
        Case -3, $iButton
            Exit
		EndSwitch
		
		    Switch GUIGetMsg()
      Case $iButton1
         ShellExecute('drv\Ex.exe')
    EndSwitch
WEnd

Func WM_MOVE($hWnd, $iMsg, $wParam, $lParam)
    Switch $hWnd
        Case $hForm
            $iPos = _WinAPI_GetPosFromRect(_WinAPI_GetWindowRect($hWnd))
            WinMove($hChild, '', $iPos[0], $iPos[1])
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc

Func WM_NCHITTEST($hWnd, $iMsg, $wParam, $lParam)
    Switch $hWnd
        Case $hForm
            Switch _WinAPI_DefWindowProc($hWnd, $iMsg, $wParam, $lParam)
                Case $HTCLIENT
                    Return $HTCAPTION
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc


изображение( фон)

1660807-1.png

Спасибо за внимание

Отправлено: 20:15, 22-02-2012

 

Аватара для ferget

Разный


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

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


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

Отправлено: 20:45, 22-02-2012 | #2



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

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


Аватара для AZJIO

Старожил


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

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


Vsirf, вот, только у меня при активности кнопки картинка исчезает.

читать дальше »
Код: Выделить весь код
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiButton.au3>
#include <GuiImageList.au3>

$Gui=GUICreate('пример', 300, 220, -1, -1, BitOr($WS_BORDER, $WS_POPUP, $WS_SYSMENU))
; GUICreate('пример', 300, 220)

; =====================================
$hImage1 = _GUIImageList_Create(16, 16, 5, 3)
_GUIImageList_AddIcon($hImage1, "shell32.dll", 27)
_GUIImageList_AddIcon($hImage1, "shell32.dll", 112)
_GUIImageList_AddIcon($hImage1, "shell32.dll", 25)

$Button = GUICtrlCreateButton("", 300-27, 2, 25, 25)
_GUICtrlButton_SetImageList(-1, $hImage1, 1, 4)
; =====================================
$hImageList = _GUIImageList_Create(66, 91, 5)
_GDIPlus_Startup()
_Image(@ScriptDir & '\Image1.png')
_Image(@ScriptDir & '\Image2.png')
_Image(@ScriptDir & '\Image3.png')
_GDIPlus_Shutdown()
; =====================================
$Button1 = GUICtrlCreateButton("", 10, 50, 80, 100)
_GUICtrlButton_SetImageList(-1, $hImageList, 1)

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $Button1
            MsgBox(0, 'Сообщение', 'е')
        Case $GUI_EVENT_CLOSE, $Button
            ExitLoop
    EndSwitch
WEnd


Func _Image($Path)
    $h_Image = _GDIPlus_BitmapCreateFromFile($Path)
    $h_Bitmap =_GDIPlus_BitmapCreateHBITMAPFromBitmap($h_Image)
    _GUIImageList_Add($hImageList, $h_Bitmap)
    _GDIPlus_ImageDispose($h_Image)
    _WinAPI_DeleteObject($h_Bitmap)
EndFunc


читать дальше »
Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiButton.au3>

$Gui=GUICreate("Тест", 300, 220, -1, -1, BitOr($WS_BORDER, $WS_POPUP, $WS_SYSMENU))

$btn1 = GUICtrlCreateButton("", 300-23, 2, 21, 21, $BS_ICON)
GUICtrlSetImage($btn1, "shell32.dll", -28, 0)
$btn2 = GUICtrlCreateButton("", 115, 66, 40, 40, $BS_ICON)
GUICtrlSetImage($btn2, "shell32.dll", -162)

GUISetState()

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

While 1
    Switch GUIGetMsg()
        Case $btn2
            MsgBox(0, 'Сообщение', 'е')
        Case $GUI_EVENT_CLOSE, $btn1
            ExitLoop
    EndSwitch
WEnd

Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
    
    #forceref $hWnd, $Msg, $wParam
    Local Const $BCN_HOTITEMCHANGE = -1249
    Local $tNMBHOTITEM = DllStructCreate("hwnd hWndFrom;int IDFrom;int Code;dword dwFlags", $lParam)
    Local $nNotifyCode = DllStructGetData($tNMBHOTITEM, "Code")
    Local $nID = DllStructGetData($tNMBHOTITEM, "IDFrom")
    Local $hCtrl = DllStructGetData($tNMBHOTITEM, "hWndFrom")
    Local $dwFlags = DllStructGetData($tNMBHOTITEM, "dwFlags")
    
    Switch $nNotifyCode
        Case $BCN_HOTITEMCHANGE ; Win XP and Above
            If BitAND($dwFlags, 0x10) = 0x10 Then
                Switch $nID
                    Case $btn1
                        GUICtrlSetImage($btn1, "shell32.dll", -113, 0)
                    Case $btn2
                        GUICtrlSetImage($btn2, "shell32.dll", -195)
                EndSwitch
            ElseIf BitAND($dwFlags, 0x20) = 0x20 Then
                Switch $nID
                    Case $btn1
                        GUICtrlSetImage($btn1, "shell32.dll", -28, 0)
                    Case $btn2
                        GUICtrlSetImage($btn2, "shell32.dll", -162)
                EndSwitch
            EndIf
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc

Последний раз редактировалось AZJIO, 24-02-2012 в 15:30.

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

Отправлено: 15:07, 24-02-2012 | #3


Ветеран


Автор проектов


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

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


Цитата ferget:
посмотрите в справке GUICtrlSetImage »
Все перечитал, но как сделать что бы картинка менялась при наведении и нажатии?

Цитата AZJIO:
вот, только у меня при активности кнопки картинка исчезает. »
надо что бы возвращалась в начальное состояние

может попробовать с помощью GUICtrlOnHover ?

Отправлено: 17:01, 24-02-2012 | #4


Аватара для madmasles

Ветеран


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

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


Цитата AZJIO:
только у меня при активности кнопки картинка исчезает. »
Чтобы нормально работало, в ImageList должно быть не менее пяти иконок(картинок), а не три, как в Вашем примере.
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:26, 25-02-2012 | #5


Ветеран


Автор проектов


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

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


Цитата madmasles:
Чтобы нормально работало, в ImageList должно быть не менее пяти иконок(картинок), а не три, как в Вашем примере. »
madmasles, сделал,но изображение только на одной кнопке,на второй не отображается

читать дальше »
Код: Выделить весь код
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiButton.au3>
#include <GuiImageList.au3>

GUICreate('Добро пожаловать', 600, 300)
GUICtrlCreatePic(@ScriptDir & '\Resources\gfxinstall.jpg', 0, 0, 600, 300)
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetState()

$hImageList = _GUIImageList_Create(35, 22, 5)
_GDIPlus_Startup()
_Image(@ScriptDir & '\Resources\png\1.png')
_Image(@ScriptDir & '\Resources\png\2.png')
_Image(@ScriptDir & '\Resources\png\3.png')
_Image(@ScriptDir & '\Resources\png\4.png')
_Image(@ScriptDir & '\Resources\png\5.png')
_GDIPlus_Shutdown()

$Button1 = GUICtrlCreateButton("", 10, 50, 35, 22)
_GUICtrlButton_SetImageList(-1, $hImageList, 1)
; =====================================
$hImageList1 = _GUIImageList_Create(35, 22, 5)
_GDIPlus_Startup()
_Image(@ScriptDir & '\Resources\png\1.png')
_Image(@ScriptDir & '\Resources\png\2.png')
_Image(@ScriptDir & '\Resources\png\3.png')
_Image(@ScriptDir & '\Resources\png\4.png')
_Image(@ScriptDir & '\Resources\png\5.png')
_GDIPlus_Shutdown()

$Button2 = GUICtrlCreateButton("", 10, 150, 35, 22)
_GUICtrlButton_SetImageList(-1, $hImageList1, 1)
GUISetState()

While 1
	    Switch GUIGetMsg()
        Case -3, $Button1
            Exit
		EndSwitch
		
		Switch GUIGetMsg()
        Case -3, $Button2
            Exit
		EndSwitch
		
	WEnd


Func _Image($Path)
    $h_Image = _GDIPlus_BitmapCreateFromFile($Path)
    $h_Bitmap =_GDIPlus_BitmapCreateHBITMAPFromBitmap($h_Image)
    _GUIImageList_Add($hImageList, $h_Bitmap)
    _GDIPlus_ImageDispose($h_Image)
    _WinAPI_DeleteObject($h_Bitmap)
EndFunc


и еще,как кнопку сделать прозрачной,что бы отображалась лиш картинка?

Отправлено: 15:01, 25-02-2012 | #6


Ветеран


Автор проектов


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

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




madmasles, AZJIO, ferget, Почти решил вопрос...
AZJIO, Вот таким образом кнопка не пропадает :

читать дальше »
Код: Выделить весь код
   $hImageList = _GUIImageList_Create(35, 22, 5)
_GDIPlus_Startup()
_Image(@ScriptDir & '\Resources\png\1.png', $hImageList)
_Image(@ScriptDir & '\Resources\png\2.png', $hImageList)
_Image(@ScriptDir & '\Resources\png\3.png', $hImageList)
_Image(@ScriptDir & '\Resources\png\4.png', $hImageList)
_Image(@ScriptDir & '\Resources\png\5.png', $hImageList)
_GDIPlus_Shutdown()


Вот так изображение отображается на всех кнопках:
читать дальше »
Код: Выделить весь код
Func _Image($Path, ByRef $newImage)
    $h_Image = _GDIPlus_BitmapCreateFromFile($Path)
    $h_Bitmap =_GDIPlus_BitmapCreateHBITMAPFromBitmap($h_Image)
    _GUIImageList_Add($newImage, $h_Bitmap)
    _GDIPlus_ImageDispose($h_Image)
    _WinAPI_DeleteObject($h_Bitmap)
EndFunc


Теперь следующий вопрос:
Это все хорошо работает если фон JPG изображение в обычном окне ,но, все же как сделать кнопку прозрачной( что бы отображалось лишь изображение ),и как это все сделать если фон - png изображение,и на нем кнопки с png изображениями ?

Код и изображение в шапке темы...

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

Последний раз редактировалось Vsirf, 25-02-2012 в 16:13.


Отправлено: 16:06, 25-02-2012 | #7


Аватара для madmasles

Ветеран


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

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


Vsirf,
Попробуйте, например, так.
Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $aIcon[3][5] = [[0, -3, -2, -5],[0, -4, -2, -3],[0, -5, -2, -4]], _
        $aText[3] = ['Minimize', 'MsgBox', 'Exit']

$hGui = GUICreate('Test', 200, 100, -1, -1, $WS_POPUP, $WS_EX_DLGMODALFRAME)
GUICtrlCreateLabel('Таскать можно', 0, 0, 140, 22, -1, $GUI_WS_EX_PARENTDRAG)
GUICtrlCreateLabel('', 0, 22, 200, 2, -1, $WS_EX_STATICEDGE)
For $i = 0 To 2
    $aIcon[$i][0] = GUICtrlCreateIcon('', 0, 140 + $i * 20, 3, 16, 16)
    GUICtrlSetCursor(-1, 0)
    GUICtrlSetTip(-1, $aText[$i])
Next
GUISetState()

While 1
    _ChangeImage()
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE, $aIcon[2][0]
            Exit
        Case $aIcon[0][0]
            GUISetState(@SW_MINIMIZE)
        Case $aIcon[1][0]
            MsgBox(64, 'Info', '2 Icon click', 0, $hGui)
    EndSwitch
WEnd

Func _ChangeImage()
    Local $s_IconFile = @SystemDir & '\user32.dll'
    Local $a_Cursor = GUIGetCursorInfo()
    If @error Then Return
    For $i = 0 To 2
        If $a_Cursor[4] = $aIcon[$i][0] Then
            If $a_Cursor[2] Then
                If $aIcon[$i][4] <> 1 Then
                    GUICtrlSetImage($aIcon[$i][0], $s_IconFile, $aIcon[$i][1])
                    $aIcon[$i][4] = 1
                    ConsoleWrite($i + 1 & ' Icon click' & @LF)
                EndIf
            Else
                If $aIcon[$i][4] <> 2 Then
                    GUICtrlSetImage($aIcon[$i][0], $s_IconFile, $aIcon[$i][2])
                    $aIcon[$i][4] = 2
                EndIf
            EndIf
        Else
            If $aIcon[$i][4] <> 3 Then
                GUICtrlSetImage($aIcon[$i][0], $s_IconFile, $aIcon[$i][3])
                $aIcon[$i][4] = 3
            EndIf
        EndIf
    Next
EndFunc   ;==>_ChangeImage

Последний раз редактировалось madmasles, 25-02-2012 в 20:53.

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

Отправлено: 20:40, 25-02-2012 | #8


Ветеран


Автор проектов


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

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


madmasles, мне надо с png изображениями , и фон png изображение

с иконками я неумею работать

Отправлено: 23:16, 25-02-2012 | #9


Аватара для madmasles

Ветеран


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

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


Цитата Vsirf:
мне надо с png изображениями »
Посмотрите здесь: Поддержка иконок и изображений, содержащих прозрачность (Alpha канал)
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:31, 26-02-2012 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Обои и Значки - Иконки в форматах PNG и ICO и другие ресурсы из Windows 7 (Обновлено) prokazzza Оформление Windows XP 100 29-07-2018 21:42
AutoExtract 16x16.ico; 32x32.ico; .... from file semiono Автоматическая установка приложений 1 08-10-2010 14:43
[решено] Как из формата PNG сделать формат ICO assch AutoIt 10 28-07-2010 19:20
Иконки PNG и ICO sergeikom Microsoft Windows Vista 0 13-05-2007 12:52
Ноут с обычной клавой? Мечта или реальность? warezhka84 Хочу все знать 11 15-03-2007 16:27




 
Переход