PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » Подарок


Подарок

Сообщений 1 страница 30 из 35

1

Скачать: upload.ee, yandex

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

0

2

с CatchImage случались косяки. Сейчас нормально рисуется

0

3

egons написал(а):

с CatchImage случались косяки

у меня ни разу не было. В AutoIt3 использовалась GdipLoadImageFromFile(), может там другой формат. Сам GdipCreateHBITMAPFromBitmap() собственно получить батмап из битмап, бред да? Но видимо указатель на битмап и дескриптор (объект) разные вещи. Поэтому я и сказал что через WinAPI c CatchImage у меня не сработало. Ну и хотелось бы кросплатформенный вариант. Пока появление сопровождается мигующими квадратами, в AutoIt3-версии такого нет. Но там я создавал много окон, а тут на одном окне рисую. На оф.форуме надо создавать тему, там народу полно сразу бы идею подхватили, но он толком не открывается, сделаешь вход в аккаунт и снова вылетел.

0

4

AZJIO написал(а):

Вариант на WinAPI пока не получился.

На первый взгляд работает.

AZJIO написал(а):

Но там я создавал много окон, а тут на одном окне рисую.

Почему тоже не было создано много окон?

0

5

Пётр написал(а):

Почему тоже не было создано много окон?

Не работает

Код:
EnableExplicit

UsePNGImageDecoder()

Global ID, i

;- 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


Procedure SetBitmap(ID, hImage, iOpacity)
	Protected hDC, hMemDC, hBitmap, hOld, Size.POINT, Source.POINT, Blend.BLENDFUNCTION, hImage2
	hDC = GetDC_(0)
	hMemDC = CreateCompatibleDC_(hDC)
; 	hImage2 = CallCFunction(0 , "GdipCreateBitmapFromFile", file, 0)
; 	hImage2 = CallCFunction(0 , "GdipGetImageGraphicsContext", hImage, 0)
	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



;где размещено gui окно на робочем столе, там будет и рисунок
Procedure image(Left, Top, id_Image)
	Protected hGUI, Opacity
	ID + 1
	hGUI = OpenWindow(ID, Left, Top, 100, 100, "", #WS_POPUP)
	SetWindowLongPtr_(hGUI, #GWL_EXSTYLE,
	                  GetWindowLongPtr_(hGUI, #GWL_EXSTYLE) | #WS_EX_TOPMOST | #WS_EX_LAYERED | #WS_EX_TOOLWINDOW)
	
#BackColor2 = $d6d5d4
SetWindowColor(ID, #BackColor2)
; SetLayeredWindowAttributes_(hGUI, #BackColor2, 0, 1)
	
	SetBitmap(hGUI, ImageID(id_Image), 255)
EndProcedure



ExamineDesktops()
OpenLibrary(0, "GDIPlus.dll")
For i = 1 To 150
	image(Random(DesktopWidth(0) - 100), Random(DesktopHeight(0) - 100), Random(41, 1))
Next
CloseLibrary(0)
Delay(2000)

0

6

Вот на CanvasGadget

Код:
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)


ExamineDesktops()
w = DesktopWidth(0)
h = DesktopHeight(0)

#BackColor2 = 0

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)
CanvasGadget(0, 0, 0, w, h)
SetGadgetColor(0, #PB_Gadget_BackColor, #BackColor2)
SetLayeredWindowAttributes_(hGUI, #BackColor2, 0, 1)


For i = 1 To 150
	If StartDrawing(CanvasOutput(0))
    DrawingMode(#PB_2DDrawing_Transparent)
    DrawImage(ImageID(Random(41, 1)), Random(w - 100), Random(h - 100))
    StopDrawing()
	EndIf
Next

Repeat
	Select WaitWindowEvent()
    Case #PB_Event_Gadget
    	Select EventGadget()
        Case 1
        	Debug 1
    	EndSelect
    Case #PB_Event_CloseWindow
    	CloseWindow(0)
    	End
	EndSelect
ForEver

0

7

Код:
EnableExplicit

UsePNGImageDecoder()

Define hGUI, w, h, Counter=0

;- 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)

Declare AddLayeredWindow(ID, x, y, Image)

ExamineDesktops()
w = DesktopWidth(0)
h = DesktopHeight(0)

hGUI = OpenWindow(0, 0, 0, 10, 10, "", #PB_Window_Invisible) ; Невидимое окно для таймера.
AddWindowTimer(0, 0, 500)

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Timer
      If EventTimer() = 0
        Counter+1
        If Counter<=41 ; Число картинок
          AddLayeredWindow(Counter, Random(w-ImageWidth(Counter), 0), Random(h-ImageHeight(Counter), 0), Counter)
        Else
          Break ; Завершение выполнения проги
        EndIf
      EndIf
    Case #PB_Event_CloseWindow
      Break
  EndSelect
ForEver

End


Procedure AddLayeredWindow(ID, x, y, Image)
  Protected WinNum, hGUI, hDC, pt2.Point, sz.Point, bf.BlendFunction
  
  WinNum = OpenWindow(ID, x, y, ImageWidth(Image), ImageHeight(Image), "", #PB_Window_Invisible|#PB_Window_BorderLess)
  
  If ID<>#PB_Any
    WinNum = ID
  EndIf
  
  hGUI = WindowID(WinNum)
  
  SetWindowLongPtr_(hGUI, #GWL_EXSTYLE,
                    GetWindowLongPtr_(hGUI, #GWL_EXSTYLE) | #WS_EX_TOPMOST | #WS_EX_LAYERED | #WS_EX_TOOLWINDOW)
  sz\x = ImageWidth(Image)
  sz\y = ImageHeight(Image)
  bf\BlendOp = #AC_SRC_OVER
  bf\BlendFlags = 0
  bf\SourceConstantAlpha = 255 ; общая прозрачность окна
  bf\AlphaFormat = #AC_SRC_ALPHA ; используем альфа-канал
  hDC = StartDrawing(ImageOutput(Image))
  UpdateLayeredWindow_(hGUI, 0, 0, @sz, hDC, @pt2, 0, @bf, #ULW_ALPHA)
  StopDrawing()
  
  HideWindow(WinNum, #False)
  ProcedureReturn WinNum
EndProcedure

0

8

Пётр
Спасибо!
Добавил события выхода кликами мыши. И сделал чтобы 150 картинок было.
#WS_EX_TOPMOST на работает, заменил на StickyWindow(ID, #True)

Код:
EnableExplicit

UsePNGImageDecoder()

Define hGUI, w, h, Counter, id_img

;- 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)

Declare AddLayeredWindow(x, y, Image)

Procedure WinCallback(hWnd, uMsg, wParam, lParam)
	If uMsg = #WM_RBUTTONUP Or uMsg = #WM_LBUTTONUP
    End
    EndIf
    ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

ExamineDesktops()
w = DesktopWidth(0)
h = DesktopHeight(0)

hGUI = OpenWindow(0, 0, 0, 10, 10, "", #PB_Window_Invisible) ; Невидимое окно для таймера.
AddWindowTimer(0, 0, 100)
SetWindowCallback(@WinCallback())

Repeat
	Select WaitWindowEvent()
    Case #PB_Event_Timer
    	If EventTimer() = 0
        Counter + 1
        If Counter <= 150 ; Число картинок
        	id_img = Random(41, 1)
        	AddLayeredWindow(Random(w - ImageWidth(id_img), 0), Random(h - ImageHeight(id_img), 0), id_img)
        Else
        	RemoveWindowTimer(0, 0)
        EndIf
    	EndIf
    Case #PB_Event_CloseWindow
    	Break
	EndSelect
ForEver

End


Procedure AddLayeredWindow(x, y, Image)
	Protected WinNum, hGUI, hDC, pt2.Point, sz.Point, bf.BlendFunction
	Static ID = 0
	ID + 1
	WinNum = OpenWindow(ID, x, y, ImageWidth(Image), ImageHeight(Image), "", #PB_Window_Invisible | #PB_Window_BorderLess)

	hGUI = WindowID(ID)

	SetWindowLongPtr_(hGUI, #GWL_EXSTYLE,
	                  GetWindowLongPtr_(hGUI, #GWL_EXSTYLE) | #WS_EX_LAYERED | #WS_EX_TOOLWINDOW)
	StickyWindow(ID, #True)
	sz\x = ImageWidth(Image)
	sz\y = ImageHeight(Image)
	bf\BlendOp = #AC_SRC_OVER
	bf\BlendFlags = 0
	bf\SourceConstantAlpha = 255 ; общая прозрачность окна
	bf\AlphaFormat = #AC_SRC_ALPHA ; используем альфа-канал
	hDC = StartDrawing(ImageOutput(Image))
	UpdateLayeredWindow_(hGUI, 0, 0, @sz, hDC, @pt2, 0, @bf, #ULW_ALPHA)
	StopDrawing()

	HideWindow(ID, #False)
	ProcedureReturn ID
EndProcedure

Отредактировано AZJIO (28.04.2025 17:24:47)

0

9

Можно было использовать событие #PB_Event_LeftClick

Код:
hGUI = OpenWindow(0, 0, 0, 10, 10, "", #PB_Window_Invisible) ; Невидимое окно для таймера.
AddWindowTimer(0, 0, 100)

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Timer
      If EventTimer() = 0
        Counter + 1
        If Counter <= 150 ; Число картинок
          id_img = Random(41, 1)
          AddLayeredWindow(Random(w - ImageWidth(id_img), 0), Random(h - ImageHeight(id_img), 0), id_img)
        Else
          RemoveWindowTimer(0, 0)
        EndIf
      EndIf
    Case #PB_Event_LeftClick ; Выход по клику левой кнопкой мыши.
      Break
    Case #PB_Event_CloseWindow
      Break
  EndSelect
ForEver

0

10

ЗдОрово !   :cool:

Пётр, AZJIO, небольшая недоработка замечена. Выходит из цикла только если по цветочку кликнуть.

0

11

Пар написал(а):

Выходит из цикла только если по цветочку кликнуть.

Можно нажать Alt+F4 в активном окне.

0

12

Пётр написал(а):

Можно нажать Alt+F4 в активном окне.

Пётр, ну это как бы ещё ладно...  думается, что каким-нибудь хуком на мышь решается...  не суть.
А вот эту требуху:

Код:
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)

никак не сократить ?
Ну, чтоб покомпактней запись была.
Номера-то подряд идут...  неужели никак в цикле нельзя перебрать ?  Как бы для адреса подставить переменную "?pi" ?

Отредактировано Пар (28.04.2025 20:20:14)

0

13

Пар написал(а):

никак не сократить ?

Картинки одинакового размера. Можно слепить из них один файл png, ну а потом (после одного Catchа) в цикле отGrabить.
Или даже через Frame выводить.

Отредактировано Andruk (28.04.2025 22:03:52)

0

14

Пар написал(а):

никак не сократить ?

Код:
p1:
IncludeBinary "images" + #PS$ + "1.png"

так писанины и строк меньше будет, ну и в контейнеры штук по 20-30 закрывать, зачем такая простыня, мазохисты

Код:
IncludePath "images" + #PS$
пробел между двоеточиями обязателен
p1: :IncludeBinary "1.png"
p2: :IncludeBinary "2.png"
....
p150: :IncludeBinary "150.png"
Пар написал(а):

неужели никак в цикле нельзя перебрать ?

можно и в цикле делать, но не набивать листинг, а картинки в циклах крутить
и не лень же писать было, CatchImage(XXXXXX),одно и тоже столько раз, бессмысленная простынь

0

15

newJS написал(а):

и не лень же писать было, CatchImage(XXXXXX),одно и тоже столько раз

Я же не писал... Я вставил одну строку, размножил Ctrl+D до 5 штук, потом выделил их и ещё раз размножил таким же образом. Потом кликнул на кнопку AkelPad на панели инструментов, он открыл код,  я поставил курсор на первую цифру и выделил до последней, нажал "генератор чисел", он вставил числа от 1 до 41, потом в другую колонку повторил. На оф.сайте что-то подобное было, чел то ли CatchImage, то ли IncludeBinary хотел также в цикле, я ещё подумал сохранить или нет, через год понадобится фиг найду, так и получилось. Надо сразу сказать, можно сделать через одно место в цикле, при этом получить больше затрат мегафлопсов, особенно через вызов имен строк. Ну и для тех кто будет страшится этого списка я припас совет изначально - сделай инклуд-внешний исходник и укажи его файл в основном исходнике и не будешь видеть всей этой котовасии.
2. Я когда пишу у меня есть приоритеты, если я не добьюсь нормальной работы кода, то на кой фиг мне наводить красоту на неработающем коде? Чтобы жалко было выкидывать мусор?

newJS написал(а):

p1: :IncludeBinary "1.png"

На счёт этого согласен, в некоторых случаях ":" работает на пользу,  но многие используют этот символ слишком часто из-за чего трудно читать код, поэтому я хотел добавить фичу в Tidy, чтобы заменить ":" на перенос строки и сделать код стандартным (с учётом модулей "::").

Отредактировано AZJIO (29.04.2025 03:05:40)

0

16

AZJIO, ещё пакость, CatchImage(XXXXXX), ты сразу все картинки загрузил в память, зачем память занимать когда не нужно
использовал, сразу удалять нужно, хотя в некоторых случаях удалять нельзя, это от места зависит, проверять нужно, всё не помню
канвас, ImageList, Static, они себе забирают, можно удалять

делал древнюю игрушку sokoban, насобирал больше 2000 лабиринтов
сначала создать сами картинки для дата-секции, а потом их туда загнать
было очень весело, с первого разу не получилось, пришлось переделывать, и не раз
твои 150, такая мелочь....

прога не грузится, положи на яндекс

Отредактировано newJS (29.04.2025 04:11:33)

0

17

newJS написал(а):

положи на яндекс

на яндексе
исходник поновее...

картинки позже сожму в 256 цветов, с одним попробовал, вроде не потерял ничего, а размер почти вдвое уменьшился. Пробовал GIF но сразу заметны были ухудшение краёв, он не поддерживает полупрозрачность и это сразу бросается в глаза резкие перепады цвета. Я пытался тени удалить, но тоже было ухудшение краёв, просто в некоторых версиях полупрозрачные пиксели не отбрасывались и становились частью фона. По идее можно использовать "расширить выделение" не помню это было вроде в фотошопе. В Gimp есть "Выделить альфаканал" потом инвертировать выделение, удалить, но вот перед инвертированием надо расширить чтобы часть прозрачных пикселей попала в результат, этим решается также и размер файла удалив много пикселов с разной прозрачностью.

так же у меня в старой программе был таймер, то есть прога прописывалась в реестр и срабатывала в назначенный день, а до этого просто запускалась, проверялась что дата ещё не та и выгружалась.

0

18

newJS написал(а):

делал древнюю игрушку sokoban, насобирал больше 2000 лабиринтовсначала создать сами картинки для дата-секции, а потом их туда загнать

Для этого есть архивы. Все в одном файле и места занимает меньше.

0

19

Когда игра Sokoban была портирована на Atari 65XE, то единственной проблемой была нехватка памяти для уровней. Пришлось придумывать сжатие навроде RLE.

0

20

сохранение png в gif зависит от редактора, есть редакторы которые правильно сохраняют, а есть, смотреть страшно, это известная пакость
если надо, напиши маленькую функцию которая будет перегонять полупрозрачные в непрозрачные в той же тональности
так же хорошо бы пройтись и заменить полупрозрачные с низкой полупрозрачностью на полностью прозрачный, это тоже уменьшит вес
ещё для png есть упаковщики, не один, но самый лучший PNGGauntlet, попробовал, общий вес упал до ~950 кил, уже лучше
и не надо делать gif, он не для таких картинок задуман
ты глянь сколько цветов у этих картинок, до 10.000 тысяч, а ты их кувалдой до 256, варвар

0

21

Так как на официальном форуме тоже был вопрос про много строк, то записал видео, что можно не писать кучу строк.

newJS написал(а):

так же хорошо бы пройтись и заменить полупрозрачные с низкой полупрозрачностью на полностью прозрачный, это тоже уменьшит вес

там полупрозрачности по границам цветка, в общем не вариант. Я хотел удалить тени, они одного цвета, но с разной прозрачностью, в итоге исполняемый файл уменьшился с 1.37 Мб до 1.14 Мб, выйгрыша почти нет, но тени придают объём, так что оставляем с тенями.

Число цветов действительно высокое и заметно теряется вид, но только при масштабировании,  а при реальном размере почти не заметно.

0

22

Можно файлы поместить в архив, а его в исполняемый файл. Или объединить все файлы в общий png и разделить при загрузке. Это можно сделать в цикле что уменьшит число одинаковых строк.

0

23

Пётр
IncludeBinary работает же только при компиляции, а число строк лично меня не пугает. Можно только CatchImage() сделать в цикл, и то несколько байт наверно потеряем в файле в полтора мегабайт. Пусть ценители байтов расслабятся.

Пётр написал(а):

Можно файлы поместить в архив

Только если бы это уменьшило исполняемый файл. Но у png и так есть сжатие, а извлечение из архива сделает ещё одну копию файла

newJS
Выложи свои копии png- файлов. Я еще не пытался увеличивать сжатие в Gimp, по умолчанию там 9, видимо определяет коэффициент компактность/скорость расжатия. В моем случае и так задержка времени, так что можно выставить максимальный уровень сжатия.

Отредактировано AZJIO (04.05.2025 18:10:03)

0

24

на яндексе
https://disk.yandex.ru/d/0uaMUNC1ggjGNw

AZJIO написал(а):

там полупрозрачности по границам цветка, в общем не вариант

зря ты так думаешь, глаз видит примерно после 5% полупрозрачности, здесь удалил эти самые 5% это вышло более 40 кил на все
плюс упаковал, получил примерно 920 кил

AZJIO написал(а):

Я еще не пытался увеличивать сжатие в Gimp

не трать время, это от лукавого, хочешь сжимать найди прогу которую дал
эта прога использует три алгоритма, пакует каждым, выбирает наименьший, процесс не быстрый
из своего опыта скажу, разные алгоритмы одинаковые картинки жмут по разному
когда то использовал разные проги, жал всеми и выбирал наименьший, возни море, но оно того стоило

AZJIO написал(а):

видимо определяет коэффициент компактность/скорость расжатия

ты ошибаешься, картинка в памяти лежит распакованная, и это происходит при чтении картинки, а не при обращении к ней, то есть один раз
степень сжатия влияет только на время обработки картинки, чем выше сжатие, тем больше перебирать варианты, на распаковку это не влияет

AZJIO написал(а):

а извлечение из архива сделает ещё одну копию файла

в моём случае это ещё бы увеличило время старта, и так пару секунд стартует

AZJIO, сделай чтобы картинку выходили сверху и уходили за край внизу, и чтобы  падали с разной скоростью и зацикли
добавь esc и напиши какими способами можно закрыть прогу
щас налепило по всему монитору и стало
найди скрипты на JS падающего снега, готовый алгоритм

0

25

AZJIO написал(а):

извлечение из архива сделает ещё одну копию файла

Извлечение в память, а не на диск. То есть распаковка функцией UncompressPackMemory(). А дальше CatchImage() и т. д.

0

26

newJS написал(а):

добавь esc

В каждое окно придется добавлять,  в 150 окон.

newJS написал(а):

картинка в памяти лежит распакованная

Но мы сжимаем её не для памяти, а для уменьшения исполняемого файла. После CatchImage() она "распакуется" и начнет иметь идентификатор на распаковснную копию не имеющую ничего общего с указателем на её бинарную копию в Data- секции. Я думаю алгоритм разжатия вполне укладывается в модуль декодера png , который мы указали в начале. Может проги могут более умело найти повторяющиеся пикселы.

0

27

Добавил клавишу Esc для выхода
Добавил: клик мимо тоже выход (потеря фокуса)
В исходнике DataSection как вы и мечтали в отдельном файле, теперь не пугает, а CatchImage работает в цикле (41 указатель добавлен в DataSection, чтобы потом CatchImage смог их перечислять), благодарить RASHAD, а до него Demivec.
Пережатые картинки от newJS.

Отредактировано AZJIO (06.05.2025 02:59:09)

0

28

AZJIO написал(а):

а CatchImage работает в цикле (41 указатель добавлен в DataSection, чтобы потом CatchImage смог их перечислять), благодарить RASHAD, а до него Demivec.

я это сам себе давно придумал, только лучше, универсально

Код:
Procedure isAmount(n1, n2); принимает начальный и конечный адрес Data.i
; isAmount(n1, n2) возвращает количество элементов в DataSection от 0, вызов isAmount(?inFrameS, ?inFrameE)
; из конечного адреса вычитаем начальный, потом делим на количество байт в .i
If     #PB_Compiler_Processor=#PB_Processor_x64
ProcedureReturn ((n2-n1)/8)-1
ElseIf #PB_Compiler_Processor=#PB_Processor_x86
ProcedureReturn ((n2-n1)/4)-1
EndIf
; от 0 чтобы с массивом, листом проблем не было в форе
; возвращает в штуках от 0
EndProcedure

z=isAmount(?demoS, ?demoE)
Restore demoS
for
next
AZJIO написал(а):

Пережатые картинки от newJS.

не пережатые, а упакованные!!!!!!!!

не хочешь делать вечно падающие, так хотя бы чтобы не лезли друг на друга
но падающие это круче и меньше мешают

0

29

newJS написал(а):

я это сам себе давно придумал, только лучше, универсально

Как это применить в данном случае? Покажите пример кода, а не абстракцию типа

newJS написал(а):

z=isAmount(?demoS, ?demoE)
Restore demoS
for
next

0

30

newJS написал(а):

не пережатые, а упакованные!!!!!!!!

В архив?

newJS написал(а):

так хотя бы чтобы не лезли друг на друга

А в реальном букете они разве не лезут друг на друга, если не 3-5 цветков. Не хотелось бы вместо естественного раскладывать по ячейкам.

0


Вы здесь » PureBasic - форум » PureBasic для Windows » Подарок