Есть у меня такая прога на 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)