Что нового

удаление старого PNG перед присвоением нового

running-frag

why me?
Сообщения
441
Репутация
60
есть код
Код:
Func _setPngImage($_picHandle, $_fileName)
	Local $_pngPath = @ScriptDir &"\"& $_fileName
	Local $STM_SETIMAGE = 0x172
						;GUICtrlSetData ($_picHandle, "") вот тут как надо затереть тот что есть уже там
						
						_GDIPlus_Startup()
    Local $hImage = 	_GDIPlus_ImageLoadFromFile ($_pngPath)
    Local $hBitmap = 	_GDIPlus_BitmapCreateHBITMAPFromBitmap ($hImage)
						
						_WinAPI_DeleteObject (GUICtrlSendMsg ($_picHandle, $STM_SETIMAGE, $IMAGE_BITMAP, $hBitmap))
						_WinAPI_DeleteObject ($hBitmap)
						_GDIPlus_ImageDispose ($hImage)
						_GDIPlus_Shutdown()
EndFunc


Как он работает в душе не .... знаю. Ну как, на уровне догадок то я понимаю.

Так вот, когда код выполняется больше одного раза, в GUI мы имеем эффект "наложения" картинок. Картинки я использую одинаковые, только внутренние их цвета разные. Заметил этот "эффект" благодаря краям, они становятся слишком чёткими (хотя они размытые, градиент). Так вот собственно вопрос, как затереть уже "существующий PNG" для дальнейшей прорисовки другого PNG файла.


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

PS: Скрипт взят отсюда http://autoit-script.ru/index.php/topic,7765.msg52922/topicseen.html#msg52922 .


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

и снова я как то поспешил, блииииииин :-X

решается вызовом перед прорисовкой
Код:
GUICtrlSetImage ($_picHandle, "")
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Обновляй окно картинки с помощью

Код:
_WinAPI_InvalidateRect(GUICtrlGetHandle($_picHandle))


после каждого вызова _setPngImage().
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Yashied
При перерисовки изображения, изображение накладывается на другое.
Но если увести окно за пределы и показать, то старое изображение убирается.
По пробовал:
Код:
_WinAPI_RedrawWindow(GUICtrlGetHandle($Pic1))

Не получилось.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
С минимальным мерцанием.

Код:
$hCtrl = GUICtrlGetHandle($Pic)
$Pos = ControlGetPos('', '', $hCtrl)
If Not @Error Then
	_WinAPI_InvalidateRect(_WinAPI_GetParent($hCtrl), _WinAPI_CreateRectEx($Pos[0], $Pos[1], $Pos[2], $Pos[3]))
EndIf
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Yashied
У меня этот код не обновляет, а замазывает дальше...


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

Ой, я ошибся :-[


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

Когда я поставил обновления картинки в бесконечный цикл получилось что картинка которая запихивается в ...Icon() Почти не мигает.
2112.80664483709.png


Немного протестировал получилось что если изменять разные картинки в ...Pic() То моргания нет :smile:
7572.92924655078.png
 
Верх