Есть у меня такая прога на AutoIt3 (ещё), попробовал переписать на PureBasic.
Вариант на WinAPI пока не получился. Пробовал на CanvasGadget, но отсутствует прозрачность.
Может мне надо получить файл с помощью GdipLoadImageFromFile, а не CatchImage?
EnableExplicit
UsePNGImageDecoder()
Global ID, i, w, h, hGUI
;- DataSection
DataSection
p1:
IncludeBinary "images" + #PS$ + "1.png"
p2:
IncludeBinary "images" + #PS$ + "2.png"
p3:
IncludeBinary "images" + #PS$ + "3.png"
p4:
IncludeBinary "images" + #PS$ + "4.png"
p5:
IncludeBinary "images" + #PS$ + "5.png"
p6:
IncludeBinary "images" + #PS$ + "6.png"
p7:
IncludeBinary "images" + #PS$ + "7.png"
p8:
IncludeBinary "images" + #PS$ + "8.png"
p9:
IncludeBinary "images" + #PS$ + "9.png"
p10:
IncludeBinary "images" + #PS$ + "10.png"
p11:
IncludeBinary "images" + #PS$ + "11.png"
p12:
IncludeBinary "images" + #PS$ + "12.png"
p13:
IncludeBinary "images" + #PS$ + "13.png"
p14:
IncludeBinary "images" + #PS$ + "14.png"
p15:
IncludeBinary "images" + #PS$ + "15.png"
p16:
IncludeBinary "images" + #PS$ + "16.png"
p17:
IncludeBinary "images" + #PS$ + "17.png"
p18:
IncludeBinary "images" + #PS$ + "18.png"
p19:
IncludeBinary "images" + #PS$ + "19.png"
p20:
IncludeBinary "images" + #PS$ + "20.png"
p21:
IncludeBinary "images" + #PS$ + "21.png"
p22:
IncludeBinary "images" + #PS$ + "22.png"
p23:
IncludeBinary "images" + #PS$ + "23.png"
p24:
IncludeBinary "images" + #PS$ + "24.png"
p25:
IncludeBinary "images" + #PS$ + "25.png"
p26:
IncludeBinary "images" + #PS$ + "26.png"
p27:
IncludeBinary "images" + #PS$ + "27.png"
p28:
IncludeBinary "images" + #PS$ + "28.png"
p29:
IncludeBinary "images" + #PS$ + "29.png"
p30:
IncludeBinary "images" + #PS$ + "30.png"
p31:
IncludeBinary "images" + #PS$ + "31.png"
p32:
IncludeBinary "images" + #PS$ + "32.png"
p33:
IncludeBinary "images" + #PS$ + "33.png"
p34:
IncludeBinary "images" + #PS$ + "34.png"
p35:
IncludeBinary "images" + #PS$ + "35.png"
p36:
IncludeBinary "images" + #PS$ + "36.png"
p37:
IncludeBinary "images" + #PS$ + "37.png"
p38:
IncludeBinary "images" + #PS$ + "38.png"
p39:
IncludeBinary "images" + #PS$ + "39.png"
p40:
IncludeBinary "images" + #PS$ + "40.png"
p41:
IncludeBinary "images" + #PS$ + "41.png"
EndDataSection
CatchImage(1, ?p1)
CatchImage(2, ?p2)
CatchImage(3, ?p3)
CatchImage(4, ?p4)
CatchImage(5, ?p5)
CatchImage(6, ?p6)
CatchImage(7, ?p7)
CatchImage(8, ?p8)
CatchImage(9, ?p9)
CatchImage(10, ?p10)
CatchImage(11, ?p11)
CatchImage(12, ?p12)
CatchImage(13, ?p13)
CatchImage(14, ?p14)
CatchImage(15, ?p15)
CatchImage(16, ?p16)
CatchImage(17, ?p17)
CatchImage(18, ?p18)
CatchImage(19, ?p19)
CatchImage(20, ?p20)
CatchImage(21, ?p21)
CatchImage(22, ?p22)
CatchImage(23, ?p23)
CatchImage(24, ?p24)
CatchImage(25, ?p25)
CatchImage(26, ?p26)
CatchImage(27, ?p27)
CatchImage(28, ?p28)
CatchImage(29, ?p29)
CatchImage(30, ?p30)
CatchImage(31, ?p31)
CatchImage(32, ?p32)
CatchImage(33, ?p33)
CatchImage(34, ?p34)
CatchImage(35, ?p35)
CatchImage(36, ?p36)
CatchImage(37, ?p37)
CatchImage(38, ?p38)
CatchImage(39, ?p39)
CatchImage(40, ?p40)
CatchImage(41, ?p41)
; ESC=Quit
Procedure Quit()
End
EndProcedure
;Mouse
; выход по клику мыши
; GUIRegisterMsg(WM_LBUTTONUP, "Quit")
; GUIRegisterMsg(WM_RBUTTONUP, "Quit")
;где размещено gui окно на робочем столе, там будет и рисунок
Procedure image(Left, Top, id_Image)
Protected hGUI
ID + 1
ImageGadget(ID, Left, Top, 100, 100, ImageID(id_Image))
Delay(50)
; плавное появление цветка из прозрачного в непрозрачный.
; Opacity = 255
; OpenLibrary(0, "GDIPlus.dll")
; For i = 0 To Opacity Step 10
; SetBitmap(hGUI, ImageID(id_Image), 255)
; Delay(10)
; Next
; CloseLibrary(0)
EndProcedure
ExamineDesktops()
w = DesktopWidth(0)
h = DesktopHeight(0)
#BackColor2 = $d6d5d4
hGUI = OpenWindow(0, 0, 0, w, h, "", #WS_POPUP)
SetWindowLongPtr_(hGUI, #GWL_EXSTYLE,
GetWindowLongPtr_(hGUI, #GWL_EXSTYLE) | #WS_EX_TOPMOST | #WS_EX_LAYERED | #WS_EX_TOOLWINDOW)
SetWindowColor(0, #BackColor2)
; SetGadgetColor(#lg, #PB_Gadget_BackColor, #BackColor2)
SetLayeredWindowAttributes_(hGUI, #BackColor2, 0, 1)
For i = 1 To 150
image(Random(w - 100), Random(h - 100), Random(41, 1))
WindowEvent()
Next
Define x
Repeat
x + 1
If x > 100
End
EndIf
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
CloseWindow(0)
End
EndSelect
ForEver
Procedure SetBitmap(hGUI, hImage, iOpacity)
Protected hDC, hMemDC, hBitmap, hOld, Size.POINT, Source.POINT, Blend.BLENDFUNCTION
hDC = GetDC_(0)
hMemDC = CreateCompatibleDC_(hDC)
hBitmap = CallCFunction(0 , "GdipCreateHBITMAPFromBitmap", hImage, 0, $FF000000)
If hBitmap
; Debug hBitmap
hOld = SelectObject_(hMemDC, hBitmap)
; Size\x = GdipGetImageWidth(hImage)
; Size\y = GdipGetImageHeight(hImage)
Size\x = 100
Size\y = 100
Blend\SourceConstantAlpha = iOpacity
Blend\AlphaFormat = 1
Debug UpdateLayeredWindow_(ID, hDC, 0, Size, hMemDC, Source, 0, Blend, #ULW_ALPHA)
; UpdateLayeredWindow_(ID, hDC, 0, @Size, hMemDC, @Source, 0, @Blend, #ULW_ALPHA)
SelectObject_(hMemDC, hOld)
DeleteObject_(hBitmap)
EndIf
ReleaseDC_(0, hDC)
DeleteDC_(hMemDC)
EndProcedure
Отредактировано AZJIO (06.05.2025 02:44:55)