Что нового

Вставка картинки в определенном месте и определенного размера

SharkX58

Новичок
Сообщения
11
Репутация
0
Из примера в данном топике хотел попробовать вставить картинку, но что то не работает( Вылазит ошибка, можно посмотреть на скриншоте.

Код:
#Region
#AutoIt3Wrapper_Res_File_Add=C:\1\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
 

Вложения

  • ошибка.jpg
    ошибка.jpg
    16.8 КБ · Просмотры: 20

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $gui, $guiPos, $pic, $picPos

Example1()
Example2()

;----- Пример 1 ----
Func Example1()
    Local $n, $msg

    GUICreate("GUI с рисунком", 350, 300, -1, -1, $WS_SIZEBOX + $WS_SYSMENU) ; Создаёт окно в центре экрана

    GUISetBkColor(0xE0FFFF)
    $n = GUICtrlCreatePic(@ScriptDir & "\..\GUI\mslogo.jpg", 50, 50, 200, 50)

    GUISetState()

    ; Запускается цикл опроса GUI до тех пор пока окно не будет закрыто
    While 1
        $msg = GUIGetMsg()

        If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

    ; Изменяет размер элемента
    $n = GUICtrlSetPos($n, 50, 50, 200, 100)
    ; Запускается цикл опроса GUI до тех пор пока окно не будет закрыто
    While 1
        $msg = GUIGetMsg()

        If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

    GUIDelete()
EndFunc

;----- Пример 2
Func Example2()
    Local $msg

    $gui = GUICreate("Прозрачный", 200, 100)
    $pic = GUICreate("", 68, 71, 10, 20, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $gui)
    GUICtrlCreatePic(@ScriptDir & "\..\GUI\merlin.gif", 0, 0, 0, 0)

    GUISetState(@SW_SHOW, $pic)
    GUISetState(@SW_SHOW, $gui)

    HotKeySet("{ESC}", "Main")
    HotKeySet("{Left}", "Left")
    HotKeySet("{Right}", "Right")
    HotKeySet("{Down}", "Down")
    HotKeySet("{Up}", "Up")
    $picPos = WinGetPos($pic)
    $guiPos = WinGetPos($gui)

    Do
        $msg = GUIGetMsg()
    Until $msg = $GUI_EVENT_CLOSE

    HotKeySet("{ESC}")
    HotKeySet("{Left}")
    HotKeySet("{Right}")
    HotKeySet("{Down}")
    HotKeySet("{Up}")
EndFunc

Func Main()
    $guiPos = WinGetPos($gui)
    WinMove($gui, "", $guiPos[0] + 10, $guiPos[1] + 10)
EndFunc

Func Left()
    $picPos = WinGetPos($pic)
    WinMove($pic, "", $picPos[0] - 10, $picPos[1])
EndFunc

Func Right()
    $picPos = WinGetPos($pic)
    WinMove($pic, "", $picPos[0] + 10, $picPos[1])
EndFunc

Func Down()
    $picPos = WinGetPos($pic)
    WinMove($pic, "", $picPos[0], $picPos[1] + 10)
EndFunc

Func Up()
    $picPos = WinGetPos($pic)
    WinMove($pic, "", $picPos[0], $picPos[1] - 10)
EndFunc

;----- Пример 3, PNG, работа цикла от Zedna
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <WinAPI.au3>

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

; Создаёт GUI
$hGUI = GUICreate("PNG", 250, 250)

; Загружает рисунок PNG
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\..\GUI\Torus.png")
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

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

; Цикл ожидающий выхода
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

; Очищает от ресурсов
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()

; Рисует рисунок PNG
Func MY_WM_PAINT($hWnd, $msg, $wParam, $lParam)
    #forceref $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



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

А в твоем варианте, все переменные нужно заключить в global перед началом скрипта. Как в примере который я тебе скинул
 
Автор
S

SharkX58

Новичок
Сообщения
11
Репутация
0
Добавил, все равно так же ругается.

Код:
#Region
#AutoIt3Wrapper_Res_File_Add=C:\1\CrashXP.bmp, 2, 200
#EndRegion

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

Global $Pic, $hInstance, $hBitmap

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
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
SharkX58,
как называется Ваш скрипт, на котором возникает ошибка? (само название файла какое?)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
SharkX58,
Еще для AutoIt v3.3.12.0 в Icons.au3 надо заменить $ghGDIPDll на $__g_hGDIPDll или на 'gdiplus.dll'.
 
Автор
S

SharkX58

Новичок
Сообщения
11
Репутация
0
Немного понял. Код сохранен картинка.au3, скачал Icons.au3 рядом положил. Картинка вместе с этими файлами должна быть? В Icons.au3 заменил $ghGDIPDll на $__g_hGDIPDll.
В итоге получается вывод окошка пустого без картинки.
 
Верх