Автор Тема: выполнение двух операций одновременно  (Прочитано 291 раз)

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

Оффлайн SealAlbinos [?]

  • Новичок
  • *
  • Сообщений: 28
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.2.8.1
Здравствуйте, возможно ли совершать какие либо операции, пока идет постоянная смена картинок для формы?
 
Код: AutoIt [Выделить]
 
#Include <GDIPlus.au3>
#Include <WinAPIEx.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global Const $SC_DRAGMOVE = 0xF012
_GDIPlus_Startup()

$hPng = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\')
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hPng)
$hParent = GUICreate('', 798, 424, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
_WinAPI_UpdateLayeredWindowEx($hParent, -1, -1, $hBitmap, 255, 1)
_GDIPlus_ImageDispose($hPng)
_GDIPlus_Shutdown()
$hForm = GUICreate('', 560, 130, -1, -1, $WS_POPUP, -1, $hParent)
GUICtrlCreatePic(@TempDir & '\', 0, 0, 779, 407)
GUICtrlSetState(-1, $GUI_DISABLE)

$Checkbox1 = GUICtrlCreateCheckbox("", 200, 10, 16, 17)
GUICheckBoxSetColor($Checkbox1,0x000000,$GUI_BKCOLOR_TRANSPARENT )
$Checkbox1_ = GUICtrlCreateLabel("Summoner", 217, 12, 60, 17)

GUIRegisterMsg($WM_MOVE, 'WM_MOVE')
GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
WM_MOVE($hParent, $WM_MOVE, 0, 0)
GUISetState(@SW_SHOW, $hParent)
GUISetState(@SW_SHOW, $hForm)
_GDIPlus_Startup()

AdlibRegister(_Animation)

While 1
   Switch GUIGetMsg()
      Case $GUI_EVENT_CLOSE
         Exit
         Case $Checkbox1_
            ControlClick($hForm,"",$Checkbox1)
   EndSwitch
WEnd

Func _Animation()
   For $i=0000 To 350
      If StringLen($i) = 1 Then
         $q = "000" & $i
      ElseIf StringLen($i) = 2 Then
         $q = "00" & $i
      ElseIf StringLen($i) = 3 Then
         $q = "0" & $i
      EndIf
      Sleep(1)
      _GUISetPng($hParent, @ScriptDir & "\Png\1-" & $q & ".png")
      ConsoleWrite(@ScriptDir & "\Png\1-" & $q & ".png" & @CRLF)
   Next
EndFunc

Func _GUISetPng($hWnd, $sBGFile)
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile($sBGFile)
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    _WinAPI_UpdateLayeredWindowEx($hWnd, -1, -1, $hBitmap, 255, 1)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
EndFunc

Func WM_MOVE($hWnd, $iMsg, $wParam, $lParam)
    Switch $hWnd
        Case $hParent
            Local $Pos = WinGetPos($hParent)
            If IsArray($Pos) Then
                WinMove($hForm, '', $Pos[0] + 5, $Pos[1] + 5)
            EndIf
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc
Func WM_NCHITTEST($hWnd, $iMsg, $wParam, $lParam)
    Switch $hWnd
        Case $hForm
            _SendMessage($hParent, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
        Case $hParent
            Return $HTCAPTION
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc
Func GUICheckBoxSetColor(ByRef $CtrlID,$iColor,$iBkColor="0xF1EDED")
    $CtrlHWnd = $CtrlID
    If Not IsHWnd($CtrlHWnd) Then $CtrlHWnd = GUICtrlGetHandle($CtrlID)
    $aParent = DllCall("user32.dll", "hwnd", "GetParent", "hwnd", $CtrlHWnd)
    $aCPos = ControlGetPos($aParent[0],"",$CtrlID)
    $sOldT = GUICtrlRead($CtrlID,1)
    GUICtrlDelete($CtrlID)
    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 0)
    $CtrlID = GUICtrlCreateCheckbox($sOldT,$aCPos[0],$aCPos[1],$aCPos[2],$aCPos[3])
    GUICtrlSetColor(-1,$iColor)
    GUICtrlSetBkColor(-1,$iBkColor)
    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 7)
EndFunc
 


архив изображений: https://yadi.sk/d/iPpJXQrXidS70w

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

выполнение двух операций одновременно
« Отправлен: Сентябрь 16, 2018, 17:22:28 »

Помечен как лучший ответ пользователем SealAlbinos Отправлен Сентябрь 17, 2018, 12:47:03

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2797
  • Репутация: 472
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: выполнение двух операций одновременно
« Ответ #1, Отправлен: Сентябрь 17, 2018, 11:28:46 »
как пример. подставь свои пути

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

Библиотека Icons.au3. Для моего примера именно этот вариант библиотеки. В ней сделана маленькая правка функции _SetImage
(нажмите для показа/скрытия)
Были времена, когда солнце было ярче, трава зеленее, а водка сорокоградуснее

Оффлайн SealAlbinos [?]

  • Новичок
  • *
  • Сообщений: 28

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.2.8.1
Re: выполнение двух операций одновременно
« Ответ #2, Отправлен: Сентябрь 17, 2018, 12:46:58 »
как пример. подставь свои пути

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

Библиотека Icons.au3. Для моего примера именно этот вариант библиотеки. В ней сделана маленькая правка функции _SetImage
(нажмите для показа/скрытия)

Ваш способ идеально работает, но сильно страдает качество картинки, но занесений функций в WM_COMMAND решило все проблемы.
как выглядит в вашем варианте и в основном: https://www.youtube.com/watch?v=jUbj2WMZT7U
« Последнее редактирование: Сентябрь 17, 2018, 13:51:50 от SealAlbinos »

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2797
  • Репутация: 472
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: выполнение двух операций одновременно
« Ответ #3, Отправлен: Сентябрь 17, 2018, 14:19:41 »
Качество зависит от размера картинки. Используется размер области Pic.подгони размер этого элемента под размер картинок и будет ок. Я немного переделал твой код, так как он слегка хаотичен. Ну а там твое решение. :)

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

Re: выполнение двух операций одновременно
« Ответ #3 Отправлен: Сентябрь 17, 2018, 14:19:41 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
4 Ответов
2927 Просмотров
Последний ответ Август 19, 2011, 14:43:06
от Centrinar
11 Ответов
4993 Просмотров
Последний ответ Сентябрь 05, 2011, 15:27:07
от agikon
9 Ответов
4139 Просмотров
Последний ответ Август 18, 2013, 06:34:36
от Redcut
0 Ответов
1231 Просмотров
Последний ответ Август 14, 2013, 06:53:09
от madmasles
2 Ответов
1629 Просмотров
Последний ответ Ноябрь 21, 2013, 05:37:33
от Redcut
3 Ответов
1079 Просмотров
Последний ответ Август 25, 2014, 12:04:19
от madmasles
5 Ответов
1830 Просмотров
Последний ответ Декабрь 02, 2014, 02:19:18
от madmasles
26 Ответов
4655 Просмотров
Последний ответ Декабрь 28, 2015, 10:12:25
от Yashied
5 Ответов
2193 Просмотров
Последний ответ Январь 11, 2016, 00:11:43
от eus_deus
15 Ответов
1381 Просмотров
Последний ответ Октябрь 09, 2017, 21:54:32
от RipVanWinkel