- Сообщения
- 5,379
- Репутация
- 2,724
AutoIt: 3.3.6.1
Версия: 1.0
Категория: Окна и диалоги
Описание: После того, как я опубликовал iKey и iSwitcher, многие спрашивают меня, как создать такие всплывающие картинки... И вот наконец-то у меня дошли руки до написания этого "движка" в виде отдельного UDF. Данная библиотека позволяет создавать всплывающие окна на основе ваших изображений (прозрачность также поддерживается). Пользоваться ей очень просто: создаем или загружаем из файла bitmap, а затем отображаем его на экране с помощью функции _Popup_Show() из представленной библиотеки (см. пример). Запустите нижеприведенный пример и нажмите SHIFT+1 или SHIFT+2 (несколько раз)... Все необходимые картинки включены в архив. Наличие GDI+ функций в этом примере необходимо только для создания надписи с текущем временем на изображении ("Image1.png"), непосредственно для работы UDF GDI+ не требуется.
Пример:
Скриншот:
Источник:
Pop-ups UDF (оффициальный форум)
Pop-ups UDF (Русское сообщество AutoIt)
Автор: Yashied
Версия: 1.0
Категория: Окна и диалоги
Описание: После того, как я опубликовал iKey и iSwitcher, многие спрашивают меня, как создать такие всплывающие картинки... И вот наконец-то у меня дошли руки до написания этого "движка" в виде отдельного UDF. Данная библиотека позволяет создавать всплывающие окна на основе ваших изображений (прозрачность также поддерживается). Пользоваться ей очень просто: создаем или загружаем из файла bitmap, а затем отображаем его на экране с помощью функции _Popup_Show() из представленной библиотеки (см. пример). Запустите нижеприведенный пример и нажмите SHIFT+1 или SHIFT+2 (несколько раз)... Все необходимые картинки включены в архив. Наличие GDI+ функций в этом примере необходимо только для создания надписи с текущем временем на изображении ("Image1.png"), непосредственно для работы UDF GDI+ не требуется.
Пример:
Код:
#Include <GDIPlus.au3>
#Include <Pop-ups.au3>
Opt('MustDeclareVars', 1)
Opt('TrayAutoPause', 0)
_GDIPlus_Startup()
Global $hImage1 = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\Image1.png'), $hImage2 = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\Image2.png')
Global $hPopup1 = _Popup_Register(), $hPopup2 = _Popup_Register()
HotKeySet('+1', '_Popup1') ; SHIFT+1
HotKeySet('+2', '_Popup2') ; SHIFT+2
While 1
Sleep(1000)
WEnd
_GDIPlus_Shutdown()
Func _Popup1()
Local $hGraphic, $hArea, $hBitmap, $hFamily, $hFont, $hFormat, $hBrush, $tLayout, $aData
Local $Text = StringFormat('%01d:%02d', @HOUR, @MIN)
; Draw current time (xx:xx) on "Image1.png" and create bitmap
$hArea = _GDIPlus_BitmapCloneArea($hImage1, 0, 0, 133, 133, $GDIP_PXF32ARGB)
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hArea)
$hFamily = _GDIPlus_FontFamilyCreate('Tahoma')
$hFont = _GDIPlus_FontCreate($hFamily, 38, 0, 2)
$tLayout = _GDIPlus_RectFCreate(0, 0, 0, 0)
$hFormat = _GDIPlus_StringFormatCreate()
$hBrush = _GDIPlus_BrushCreateSolid(0xC0FFFFFF)
_GDIPlus_GraphicsSetTextRenderingHint($hGraphic, 3)
$aData = _GDIPlus_GraphicsMeasureString($hGraphic, $Text, $hFont, $tLayout, $hFormat)
$tLayout = $aData[0]
DllStructSetData($tLayout, 1, (133 - DllStructGetData($tLayout, 3)) / 2)
DllStructSetData($tLayout, 2, (133 - DllStructGetData($tLayout, 4)) / 2)
_GDIPlus_GraphicsDrawStringEx($hGraphic, $Text, $hFont, $aData[0], $hFormat, $hBrush)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hArea)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_FontDispose($hFont)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_ImageDispose($hArea)
; Show pop-up image
_Popup_Show($hPopup1, $hBitmap, 1)
EndFunc ;==>_Popup1
Func _Popup2()
; Show or hide pop-up image ("Image2.png")
If Not _Popup_IsActive($hPopup2) Then
_Popup_Show($hPopup2, _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage2), 1, @DesktopWidth - 90, @DesktopHeight - 110, -1)
Else
_Popup_Hide($hPopup2)
EndIf
EndFunc ;==>_Popup2
#Region GDI+ Functions
Func _GDIPlus_GraphicsSetTextRenderingHint($hGraphics, $iTextRenderingHint)
Local $aResult = DllCall($ghGDIPDll, 'uint', 'GdipSetTextRenderingHint', 'ptr', $hGraphics, 'int', $iTextRenderingHint)
If @error Then
Return SetError(1, 0, 0)
Else
If $aResult[0] Then
Return SetError($aResult[0], 0, 0)
EndIf
EndIf
Return 1
EndFunc ;==>_GDIPlus_GraphicsSetTextRenderingHint
#EndRegion GDI+ Functions
Скриншот:
Источник:
Pop-ups UDF (оффициальный форум)
Pop-ups UDF (Русское сообщество AutoIt)
Автор: Yashied