Автор Тема: Поддержка иконок и изображений, содержащих прозрачность (Alpha канал)  (Прочитано 37275 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2693
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
AutoIt: 3.3.0.0
Версия: 1.8

Категория: Управление элементами GUI

Описание: Как известно, AutoIt не поддерживает никаких форматов графических файлов кроме BMP, JPG и GIF (без анимации), что ни есть хорошо. Поэтому я написал библиотеку, которая исправляет это. UDF содержит всего 3 (но очень ползные) основные функции, которыми очень легко пользоваться. Все возможности этой библиотеки хорошо отображает приведенные ниже примеры. От себя лишь хочу сказать, что функция _SetImage() поддерживает все форматы графических файлов, которые, собственно, поддерживает Windows. Так же в UDF присутствуют несколько дополнительных функций для работы непосредственно с хендлами (HICON и HBITMAP).

Пример(ы): (составлен для AutoIt 3.3.0.0)
(нажмите для показа/скрытия)

Файлы: AU3

Скриншот:


Источник: Icons UDF (оффициальный форум)
Автор: Yashied
« Последнее редактирование: Июнь 08, 2015, 22:32:35 от Garrett, Причина: Проверка и исправление битых ссылок »


Думай, прежде чем говорить.

Русское сообщество AutoIt


Оффлайн f4llen [?]

  • Осваивающий
  • **
  • Сообщений: 160
  • Репутация: 40
  • Олл фо ЛулзЪ
    • Награды
выкладывай новую версию!
Leet Chat - программа для общения в локальной сети

Не оказываю тех. поддержку через форум - для этого есть ЛСД и Асекью

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379

  • Автор темы
  • Репутация: 2693
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Обновил библиотеку до версии 1.8.

Список изменений (с 1.5 до 1.8):

  • Добавлен режим для снижения мерцаний при смене изображений/иконок, особенно заметно в Windows XP (см. пример 6).
  • Добавлено много недокументированных (внутренних) функций (см. примеры 5, 6, 7), так же переименованы все предыдущие внутренние функции.
  • Добавлена возможность удаления изображения/ионки из контрола, причем размеры контрола сохраняются (если возможно).
  • Добавлено несколько новых примеров.
  • Обеспечена совместимость с библиотекой GUICtrlSetOnHover от CreatoR'а.
  • Улучшена производительность всех функций.
  • Изменены заголовки для основных функций (см. описания внутри библиотеки).
  • Полностью переписан код библиотеки.
  • Исправлена ошибка в функции _SetCombineBkIcon(), связанная с определением цвета окна, если оно является невидимым.
  • Исправлено несколько внутренних ошибок.
« Последнее редактирование: Март 16, 2010, 23:49:23 от Yashied »

Оффлайн ynbIpb [?]

  • Скриптер
  • ****
  • Сообщений: 392
  • Репутация: 109
  • Пол: Мужской
    • Награды
Отличная UDF!
Хочу приспособить её использование для создания собственного скина окна из PNG файлов (так как в PNG можно варьировать уровень прозрачности)
В итоге не могу добиться чтобы бэкграунд окна был абсолютно прозрачным.
Получается вот что:

Игрался со стилями, не помогает.
Код: AutoIt [Выделить]
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Icons.au3>

$sPngLeft = @ScriptDir & "\Left.png"
$sPngCenter = @ScriptDir & "\Center.png"
$sPngRight = @ScriptDir & "\Right.png"
$sPngTitle = @ScriptDir & "\Title.png"
$Form1 = GUICreate("Form1", 500, 400, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
$Pic1 = GUICtrlCreatePic("", 0, 0, 32, 38)
$Pic2 = GUICtrlCreatePic("", 186, 0, 128, 38)
$Pic3 = GUICtrlCreatePic("", 468, 0, 32, 38)
$Pic4 = GUICtrlCreatePic("", 32, 0, 154, 38)
$Pic5 = GUICtrlCreatePic("", 314, 0, 154, 38)

_SetImage($Pic1, $sPngLeft)
_SetImage($Pic2, $sPngCenter)
_SetImage($Pic3, $sPngRight)
_SetImage($Pic4, $sPngTitle)
_SetImage($Pic5, $sPngTitle)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

    EndSwitch
WEnd

Вычитал, что нужно добавить  в код следущее:
GUISetBkColor (0xFF00FF, $Form1)
_WinAPI_SetLayeredWindowAttributes($Form1, 0xFF00FF, 255)

Тоесть задать уникальный цвет бэкгроунду и сделать его прозрачным.
В результате фон стал прозрачным, но проявился другой баг: там где в PNG файле прозрачность плавно переходит от менее прозрачного к абсолютному проявляется тот самый уникальный цвет.
Как быть?

« Последнее редактирование: Август 02, 2011, 13:53:35 от ynbIpb »

Русское сообщество AutoIt


Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790
  • Репутация: 2313
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
ynbIpb,
Посмотрите этот и этот примеры Yashied`a.

Оффлайн ynbIpb [?]

  • Скриптер
  • ****
  • Сообщений: 392
  • Репутация: 109
  • Пол: Мужской
    • Награды
Спасибо за примеры, но это всётаки немного не то.
Мне необходимо составить свой скин именно из кусочков контролов Pic
Так как мне необходимо менять размер окна и скин будет растягиваться в некоторых местах.
В частности элемент $Pic4 и $Pic5

Оффлайн ynbIpb [?]

  • Скриптер
  • ****
  • Сообщений: 392
  • Репутация: 109
  • Пол: Мужской
    • Награды
UP!
Хочу использовать функцию _SetHImage, для установки картинок на контролы.
Там есть такой параметр : $hBitmap  - The handle to a bitmap (HBitmap).
Как мне создать такой  $hBitmap, если моё изображение формата *.BMP хранится в бинароном виде, типа: Binary ("0x00...") в самом коде скрипта.
Спасибо.

Оффлайн StepanSkvortsov [?]

  • Новичок
  • *
  • Сообщений: 9
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
А можно как то скачать удфку не с оф.форума? А то что как то не могу никак пройти антироботную проверку, что бы зарегистрироваться на буржуйском форуме AutoIt'а... :(

Русское сообщество AutoIt


Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790
  • Репутация: 2313
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
StepanSkvortsov,
ПредупреждениеЗа нарушение общих правил (пункт В.8):
Цитировать
Так как эта конференция называется "Русское сообщество AutoIt", язык общения на ней - Русский. Названия фирм или программных продуктов, аббревиатуры и т.д. должны быть написаны так, как они пишутся в оригинале, например не следует писать УСБ вместо USB. На форуме крайне не рекомендуется намеренно искажать русский язык и использовать "сетевой жаргон" на подобии "Аффтар выпей йадау!".


С уважением, ваш Глобальный модератор.

Оффлайн mmsgeorge [?]

  • Новичок
  • *
  • Сообщений: 96
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Yashied
а как сделать, чтобы меньше мигала картинка при перемещении , добавлял $WS_CLIPCHILDREN + $WS_CLIPSIBLINGS, но тогда частично пропадает прозрачность, за то все плавно)

Оффлайн Stalevar [?]

  • Новичок
  • *
  • Сообщений: 29
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Выдает ошибку
"C:\Program Files (x86)\AutoIt3\Include\Icons.au3"(625,28) : warning: $ghGDIPDll: possibly used before declaration.

$Ret = DllCall($ghGDIPDll, 'int', 'GdipCreateBitmapFromHICON', 'ptr', $hIcon, 'ptr*', 0)

Код: AutoIt [Выделить]
#Region
#AutoIt3Wrapper_Res_File_Add=CrashXP.bmp, 2, 200
#EndRegion

#Include <Icons.au3>
#Include <WinAPIEx.au3>

GUICreate("MyProg", 640, 480)
$Pic = GUICtrlCreatePic("", 0, 0, 640, 480)
$hInstance = _WinAPI_GetModuleHandle(0)
$hBitmap = _WinAPI_LoadBitmap($hInstance, 200)
_SetHImage($Pic, $hBitmap)
_WinAPI_DeleteObject($hBitmap)
GUISetState()

Do
Until GUIGetMsg() = -3
 


Оффлайн Alofa [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1108
  • Репутация: 155
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
"C:\Program Files (x86)\AutoIt3\Include\Icons.au3"(625,28) : warning: $ghGDIPDll: possibly used before declaration.

http://autoit-script.ru/index.php?topic=17384.0

Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
12 Ответов
7760 Просмотров
Последний ответ Ноябрь 15, 2009, 17:32:25
от gregaz
40 Ответов
12467 Просмотров
Последний ответ Октябрь 26, 2010, 23:20:25
от Yashied
0 Ответов
1998 Просмотров
Последний ответ Май 26, 2011, 13:40:45
от shm_alex
4 Ответов
2729 Просмотров
Последний ответ Март 24, 2012, 03:25:29
от Viktor1703
3 Ответов
3677 Просмотров
Последний ответ Апрель 10, 2013, 11:49:48
от Renz
3 Ответов
1938 Просмотров
Последний ответ Май 19, 2013, 23:51:40
от sngr
6 Ответов
3294 Просмотров
Последний ответ Июнь 06, 2013, 16:47:49
от _Lexa98_
0 Ответов
1245 Просмотров
Последний ответ Март 18, 2014, 15:49:00
от IMStrelcov
8 Ответов
1829 Просмотров
Последний ответ Ноябрь 23, 2014, 20:48:03
от max1300
11 Ответов
2000 Просмотров
Последний ответ Июнь 03, 2015, 13:01:53
от Yashied