Что нового

Возможно ли получить в MsgBox вид картинки

bulldog5293

Знающий
Сообщения
172
Репутация
10
у меня по адрессу С:\test.gif картинка, можно ли вывести её изображение в MsgBox
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Нет, в стандартный MsgBox() нельзя. Но ты можешь создать собственный, см. GUICreate().
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
bulldog5293
Можно с помощью функции SplashImageOn()...
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
10
Не месага, но тоже работает превосходно, тока что проверил


Добавлено:
Сообщение автоматически объединено:

А есть ли что ни будь на подобе SplashImageOn(), а то первую картинку открывает, а вторую нет
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
bulldog5293
Мне кажется, проблема связана с тем, что вторая картинка не является GIF-файлом, она имеет структуру PNG, а PNG-формат не поддерживается функцией SplashImageOn()...


Добавлено:
Сообщение автоматически объединено:

Функция GUICtrlCreatePic() тоже не поддерживает формат PNG...
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
10
И что мне остаётся делать если с форматом PNG и мне и нужно будет работать?
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
bulldog5293
Есть такая библиотека GDI+, но я в ней не силен...
Она подключается так:
Код:
#include <GDIPlus.au3>



Добавлено:
Сообщение автоматически объединено:

Кстати, в файле UDFs3.chm (в комплекте AutoIt) есть описание этой библиотеки, правда, на английском языке...


Добавлено:
Сообщение автоматически объединено:

Вот этот скрипт работает:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#Include <WinAPI.au3>

Global $hGUI, $hImage, $hGraphic, $hImage1

; Create GUI
$hGUI = GUICreate("Show PNG", 250, 250)

; Load PNG image
_GDIPlus_StartUp()
$hImage   = _GDIPlus_ImageLoadFromFile("Captcha1.gif")
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")
GUISetState()

; Loop until user exits
do
until GUIGetMsg() = $GUI_EVENT_CLOSE

; Clean up resources
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_ShutDown()

; Draw PNG image
Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)
    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_UPDATENOW)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)
    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_VALIDATE)
    Return $GUI_RUNDEFMSG
EndFunc

Хотя я не представляю, как... :smile:
Это пример из справки...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
bulldog5293 сказал(а):
И что мне остаётся делать если с форматом PNG и мне и нужно будет работать?

Поискать на нашем форуме решение этой проблемы.

Icons.au3
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
10
Как бы обработка действий, но не пойму за что отвечает "shell32.dll"
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
bulldog5293
Я думаю, в данном случае "shell32.dll" используется как хранилище иконок (значков)...
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
10
В гугле я нашёл что GDI+ может использовать связку ntoskrnl.exe hal.dll >> ntdll.dll \ _ kernel32.dll user32.dll gdi32.dll, и то что писать его нада на СИ, нужно ли мне будет для этого переписывать код Си на AutoIT или нет?


Добавлено:
Сообщение автоматически объединено:

GDI+ учить не нада, спасибо Yashied за наводку, всё есть в скриптах автоита :IL_AutoIt_1: каво интересует вот скрипт
Код:
#include <GuiConstantsEx.au3>
#include <GDIPlus.au3>
#include <ScreenCapture.au3>

Opt('MustDeclareVars', 1)

_Main()

Func _Main()
	Local $hGUI1, $hImage, $hGraphic1

	; Capture top left corner of the screen
		; Create a GUI for the zoomed image
	$hGUI1 = GUICreate("Zoomed", 400, 300, 0, 400)
	GUISetState()

	; Initialize GDI+ library and load image
	_GDIPlus_Startup ()
	$hImage = _GDIPlus_ImageLoadFromFile ("c:\Captcha.gif")

	; Draw 2x zoomed image
	$hGraphic1 = _GDIPlus_GraphicsCreateFromHWND ($hGUI1)
	_GDIPlus_GraphicsDrawImageRectRect ($hGraphic1, $hImage, 0, 0, 200, 200, 0, 0, 400, 300)

	; Release resources
	_GDIPlus_GraphicsDispose ($hGraphic1)
	_GDIPlus_ImageDispose ($hImage)
	_GDIPlus_Shutdown ()

	; Clean up screen shot file
		; Loop until user exits
	Do
	Until GUIGetMsg() = $GUI_EVENT_CLOSE


EndFunc   ;==>_Main
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
bulldog5293 сказал(а):
В гугле я нашёл что GDI+ может использовать связку ntoskrnl.exe hal.dll >> ntdll.dll \ _ kernel32.dll user32.dll gdi32.dll, и то что писать его нада на СИ, нужно ли мне будет для этого переписывать код Си на AutoIT или нет?

Стоп! Причем здесь GDI+, ntoskrnl.exe, hal.dll, ntdll.dll и т.д? Все, что тебе нужно, это написать собственный GUI средствами AutoIt.

Код:
#NoTrayIcon

#Include <GUIConstantsEx.au3>
#Include <StaticConstants.au3>
#Include <Icons.au3>

$sText = 'AutoIt v3 - это язык для написания сценариев, напоминающий BASIC и предназначенный для автоматизации ' & _
         'Windows GUI (графического интерфейса пользователя MS Windows). Его возможности - это методы симуляций ' & _
		 'нажатий комбинаций клавиш клавиатуры и мыши, функции управления окнами и его визуальными элементами. ' & _
		 'Решение, явно предлагаемое средствами AutoIt v3, его сценарием, обычно невозможно достичь коротким и ' & _
		 'понятным кодом какого-либо языка.'

$hForm = GUICreate('AutoIt3', 460, 200)
$ButtonExit = GUICtrlCreateButton('OK', 195, 166, 70, 23)
GUICtrlSetState(-1, BitOR($GUI_DEFBUTTON, $GUI_FOCUS))
GUICtrlCreateLabel($sText, 150, 14, 296, 132)
GUICtrlSetFont(-1, 8.5, 400, 0, 'MS Shell Dlg')
$Pic = GUICtrlCreatePic('', 15, 15, 120, 120)
GUICtrlSetCursor($Pic, 0)
$ButtonSet = GUICtrlCreateButton('Set Image', 28, 142, 94, 20)
GUISetState()

While 1
	$Msg = GUIGetMsg()
	Switch $Msg
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $Pic
			ShellExecute('http://autoit-script.ru')
		Case $ButtonSet
			InetGet('http://autoit-script.ru/avatars/AutoIt_Avatars/AutoIt New Gray Avatar.png', @TempDir & '\~AutoIt3.png')
			_SetImage($Pic, @TempDir & '\~AutoIt3.png')
			FileDelete(@TempDir & '\~AutoIt3.png')
		Case $ButtonExit
			ExitLoop
	EndSwitch
WEnd


Icons.au3
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
10
Большое спс, но при проверке этого скрипта он выводит ошибку
Код:
_SetImage($Pic, @TempDir & '\~AutoIt3.png')
^ ERROR

С чем это связанно?
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
bulldog5293
А можно узнать продолжение после слова ERROR?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
bulldog5293 сказал(а):
С чем это связанно?

Скачай UDF по ссылке, что я тебе дал и положи его в папку, где лежит скрипт, или в "...\AutoIt3\Include".
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Yashied
Я пробовал без библиотеки...
Ошибка другая:
[box title=TitleBox]
#Include <Icons.au3>
Error opening the file
[/box]
 
Автор
B

bulldog5293

Знающий
Сообщения
172
Репутация
10
Он почему то вообще ссылается на ошибку в #Include <Icons.au3>, а после того как удаляю для проверки ссылается на ошибку в $tBMI = DllStructCreate($tagBITMAPINFO) и открывает WinAPI.au3. Для меня это мистика какая то
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
bulldog5293
Я скачал файл Icons.au3, скопировал текст скрипта и сохранил в файл 123.au3 в ту же папку, что и Icons.au3, и все получилось...
Если ты проделал то же самое, и не получилось, то очень вероятно, что некоторые библиотеки AutoIt повреждены или отсутствуют... Проверь, пожалуйста...
 
Верх