Radio BASS
Скин
Онлайновый
FM радио и
MP3 плеер, с использованием библиотеки
Bass.dll и поддержкой эквалайзера.
В новой версии полностью изменён дизайн и полностью переписан код.
Для версии
PureBasic 4.40 и выше, используются изображения с прозрачным альфа каналом.
Переключение на
mini/max cкин по правой кнопки мыши.
Скачать архив
Radio BASS со всеми
исходниками
Вариант
mini рисованного интерфейса программы радио FM (фон, кнопки, линии)
полностью в PB, не используя не одного изображения.
Меняется цвет кнопки при наведении и.т.д. Вроде всё работает правельно.
Скачать
Enumeration
#Window_0
#im1
#im2
#im3
#im4
#Font_1
#Font_2
#but_1
#but_2
#but_3
#but_4
#Cont_2
#Play_ListFm
#lin
#lin2
#lin3
#lin4
#lin5
#lin6
#lin7
#lin8
#lin9
#vol
#vol_in
EndEnumeration
IncludeFile "bass.pbi"
Global speed.f=2, xx.f ,y.f, Nname.s, gh, sw, we, min, Handle, vol, volume.f, Title.s
Structure PlayList ; плёйлист
URL.s
Title.s
EndStructure
Global NewList PlayList.PlayList(), URL.s, stil.s
Structure D3 ; информ fm
id.s{13}
tit.s{40}
EndStructure
Global *tg.D3, Title.s
CreateImage(#im1,225,33) ; фон
CreateImage(#im2,198,14) ; бег строка
CreateImage(#im3,5,5) ; закрыть
CreateImage(#but_1,17,16) ; кнопка
CreateImage(#vol, 100,8 ) ; громкость
LoadFont(777,"Tahoma", 7,272) ;Arial Impact Tahoma digital-7
LoadFont(#Font_2, "Tahoma", 7) ; громкость
LoadFont(65, "Arial", 7)
LoadFont(#Font_1, "Courier", 10, 16) ; шрифт бегущей строки
Nname.s = "...RADIO BASS... ...Onlain FM radio... ...Каналов-0...0 kHz... ...PureBasic... ...http://purebasic.info/..."
xx = 20
vol = 50
volume = 0.5
gh=RGB(28, 28, 28)
Procedure LineGadgetHeight(Gadget, x, y, Height, color)
Im=CreateImage(#PB_Any, 1, Height)
If Im
If StartDrawing(ImageOutput(Im))
Line(0,0, 1,Height ,color)
StopDrawing()
ImageGadget(Gadget,x, y, 1,Height,ImageID(Im))
EndIf
EndIf
EndProcedure
Procedure LineGadgetWidth (Gadget, x, y, Width, color)
Im=CreateImage(#PB_Any, Width, 1)
If Im
If StartDrawing(ImageOutput(Im))
Line(0,0, Width,1 ,color)
StopDrawing()
ImageGadget(Gadget,x, y, Width,1,ImageID(Im))
EndIf
EndIf
EndProcedure
Procedure Clos(gh) ; закрыть
StartDrawing(ImageOutput(#im3))
Box(0,0,5,1,RGB(127, 127, 127))
Box(0,1,5,1,RGB(122, 122, 122))
Box(0,2,5,1,RGB(117, 117, 117))
Box(0,3,5,1,RGB(112, 112, 112))
Box(0,4,5,1,RGB(104, 104, 104))
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(65))
FrontColor(gh)
DrawText(1, -1, "*")
StopDrawing()
SetGadgetState(#im3, ImageID(#im3))
EndProcedure
Procedure znak1() ; знак на кнопки 1
Box(5,4,7,7,RGB(25, 25, 25))
Box(8,4,2,1,RGB(60, 60, 60))
Box(8,5,1,1,RGB(55, 55, 55))
Box(8,8,1,1,RGB(36, 36, 36))
Box(8,9,1,1,RGB(12, 12, 12))
Box(8,10,2,1,RGB(12, 12, 12))
Box(6,5,1,5,RGB(255, 255, 255))
Box(8,7,1,1,RGB(255, 255, 255))
Box(9,6,1,3,RGB(255, 255, 255))
Box(10,5,1,5,RGB(255, 255, 255))
EndProcedure
Procedure znak2() ; знак на кнопки 2
Box(4,4,4,7,RGB(25, 25, 25))
Box(5,5,2,5,RGB(255, 255, 255))
Box(9,4,4,7,RGB(25, 25, 25))
Box(10,5,2,5,RGB(255, 255, 255))
EndProcedure
Procedure znak3() ; знак на кнопки 3
Box(5,4,2,7,RGB(25, 25, 25))
Box(6,5,1,5,RGB(255, 255, 255))
Box(7,5,1,5,RGB(25, 25, 25))
Box(7,6,1,3,RGB(255, 255, 255))
Box(8,6,1,3,RGB(25, 25, 25))
Box(8,7,1,1,RGB(255, 255, 255))
Box(9,4,3,7,RGB(25, 25, 25))
Box(10,5,1,5,RGB(255, 255, 255))
EndProcedure
Procedure znak4() ; знак на кнопки 4
Box(8,4,2,1,RGB(25, 25, 25))
Box(7,5,4,1,RGB(25, 25, 25))
Box(8,5,2,1,RGB(255, 255, 255))
Box(6,6,6,1,RGB(25, 25, 25))
Box(7,6,4,1,RGB(255, 255, 255))
Box(5,7,8,2,RGB(25, 25, 25))
Box(6,7,6,1,RGB(255, 255, 255))
Box(5,10,8,2,RGB(25, 25, 25))
Box(6,10,6,1,RGB(255, 255, 255))
EndProcedure
sw=RGB(0, 0, 0)
we=RGB(0, 0, 0)
Procedure but1(sw,we) ; кнопка
StartDrawing(ImageOutput(#but_1))
Box(0,0,17,16,sw)
For a= 1 To 14
Box(1,a,15,1,RGB(73-a*2, 73-a*2, 73-a*2))
Next a
Box(2,2,13,1,RGB(68, 68, 68))
Box(2,3,13,1,RGB(64, 64, 64))
Box(2,4,13,1,RGB(60, 60, 60))
Box(2,5,13,1,RGB(55, 55, 55))
Box(2,6,13,1,RGB(49, 49, 49))
Box(2,7,13,1,RGB(43, 43, 43))
Box(2,8,13,1,RGB(36, 36, 36))
Box(2,9,13,5,RGB(12, 12, 12))
;--------------------------------
znak1()
Box(0, 0, 1,1,we) ; подцветка
Box(16,0, 1,1,we) ; подцветка
Box(0, 15,1,1,we) ; подцветка
Box(16,15,1,1,we) ; подцветка
StopDrawing()
SetGadgetState(#but_1, ImageID(#but_1))
EndProcedure
Procedure but2(sw,we) ; кнопка
StartDrawing(ImageOutput(#but_1))
Box(0,0,17,16,sw)
For a= 1 To 14
Box(1,a,15,1,RGB(73-a*2, 73-a*2, 73-a*2))
Next a
Box(2,2,13,1,RGB(68, 68, 68))
Box(2,3,13,1,RGB(64, 64, 64))
Box(2,4,13,1,RGB(60, 60, 60))
Box(2,5,13,1,RGB(55, 55, 55))
Box(2,6,13,1,RGB(49, 49, 49))
Box(2,7,13,1,RGB(43, 43, 43))
Box(2,8,13,1,RGB(36, 36, 36))
Box(2,9,13,5,RGB(12, 12, 12))
;--------------------------------
znak2()
Box(0, 0, 1,1,we) ; подцветка
Box(16,0, 1,1,we) ; подцветка
Box(0, 15,1,1,we) ; подцветка
Box(16,15,1,1,we) ; подцветка
StopDrawing()
SetGadgetState(#but_2, ImageID(#but_1))
EndProcedure
Procedure but3(sw,we) ; кнопка
StartDrawing(ImageOutput(#but_1))
Box(0,0,17,16,sw)
For a= 1 To 14
Box(1,a,15,1,RGB(73-a*2, 73-a*2, 73-a*2))
Next a
Box(2,2,13,1,RGB(68, 68, 68))
Box(2,3,13,1,RGB(64, 64, 64))
Box(2,4,13,1,RGB(60, 60, 60))
Box(2,5,13,1,RGB(55, 55, 55))
Box(2,6,13,1,RGB(49, 49, 49))
Box(2,7,13,1,RGB(43, 43, 43))
Box(2,8,13,1,RGB(36, 36, 36))
Box(2,9,13,5,RGB(12, 12, 12))
;--------------------------------
znak3()
Box(0, 0, 1,1,we) ; подцветка
Box(16,0, 1,1,we) ; подцветка
Box(0, 15,1,1,we) ; подцветка
Box(16,15,1,1,we) ; подцветка
StopDrawing()
SetGadgetState(#but_3, ImageID(#but_1))
EndProcedure
Procedure but4(sw,we) ; кнопка
StartDrawing(ImageOutput(#but_1))
Box(0,0,17,16,sw)
For a= 1 To 14
Box(1,a,15,1,RGB(73-a*2, 73-a*2, 73-a*2))
Next a
Box(2,2,13,1,RGB(68, 68, 68))
Box(2,3,13,1,RGB(64, 64, 64))
Box(2,4,13,1,RGB(60, 60, 60))
Box(2,5,13,1,RGB(55, 55, 55))
Box(2,6,13,1,RGB(49, 49, 49))
Box(2,7,13,1,RGB(43, 43, 43))
Box(2,8,13,1,RGB(36, 36, 36))
Box(2,9,13,5,RGB(12, 12, 12))
;--------------------------------
znak4()
Box(0, 0, 1,1,we) ; подцветка
Box(16,0, 1,1,we) ; подцветка
Box(0, 15,1,1,we) ; подцветка
Box(16,15,1,1,we) ; подцветка
StopDrawing()
SetGadgetState(#but_4, ImageID(#but_1))
EndProcedure
Procedure Stroka() ; главный фон и бег строка
;-------------бег стр-----------------------
StartDrawing(ImageOutput(#im2))
Box(0,0,198,14,RGB(9, 93, 197))
BackColor(RGB(9, 93, 197)) ; Устанавливает по умолчанию цвет фона
xx-speed
If xx<0-TextWidth(Nname)-20 ;(если больше края на длину текста)
xx=200 ; Отправляем назад на длину окна - 20px
EndIf
DrawingFont(FontID(#Font_1))
DrawText(xx, 0, Nname,RGB(204, 205, 211))
StopDrawing()
SetGadgetState(#im2, ImageID(#im2))
;---------------громкость-----------------------------------
StartDrawing(ImageOutput(#vol))
Box(0,0,100,8,RGB(24, 24, 24)) ; фон громкости
Box(0,0,vol,5,RGB(158, 157, 132)) ; цвет графика громкости
a =1
For d=0 To 53
LineXY(a, 0, a, 5, RGB(24, 24, 24))
a = a + 2
Next d
LineXY(0, 0, 0, 4,RGB(158, 157, 132))
LineXY(0, 7, 100, 7, RGB(71, 71, 71))
StopDrawing()
SetGadgetState(#vol,ImageID(#vol))
;-------------; выводим инф FM-------------------------
If Handle
*tg = BASS_ChannelGetTags(Handle, #BASS_TAG_META)
If *tg
tit.s = *tg\tit ; название песни
Nname.s =Title.s+"....."+ tit ; назв.песни
EndIf
EndIf
;------------------------------------------------------
EndProcedure
Procedure Fon() ; главный фон и бег строка
StartDrawing(ImageOutput(#im1))
Box(1,1,223,50,RGB(24, 24, 24))
Box(1, 1,1,2,RGB(115, 115, 115)) ; правый
Box(223,1,1,2,RGB(115, 115, 115)) ; левый
For a= 1 To 25
Box(1,a+2,1,1,RGB(163-a*5, 163-a*5, 163-a*5)) ; правый
Box(223,a+2,1,1,RGB(163-a*5, 163-a*5, 163-a*5)) ; левый
Next a
Box(2,1,221,1,RGB(181, 181, 181))
For a= 1 To 4
Box(2,a+1,221,1,RGB(132-a*5, 132-a*5, 132-a*5))
Next a
For a= 1 To 6
Box(2,a+5,221,1,RGB(112-a*8, 112-a*8, 112-a*8))
Next a
For a= 0 To 20
Box(2,a+11,221,1,RGB(64-a*2, 64-a*2, 64-a*2))
Next a
Box(9,10,206,22,RGB(0, 0, 0))
Box(10,11,204,20,RGB(9, 93, 197))
Box(12,13,200,16,RGB(1, 72, 159))
Box(13,14,198,14,RGB(9, 93, 197))
;--------------лого--------------------------
DrawingFont(FontID(777))
DrawingMode(#PB_2DDrawing_Transparent)
FrontColor(RGB(27, 27, 27))
DrawText(10, 0, "RADIO BASS")
StopDrawing()
SetGadgetState(#im1, ImageID(#im1))
;--------------------------------------------
Clos(gh)
EndProcedure
Procedure Animate_Gadget() ; Развернуть/Свернуть плейлист
If min=1 ; Развернуть плейлист
For i=52 To 250 Step 2
ResizeWindow(#Window_0, #PB_Ignore, #PB_Ignore,#PB_Ignore,i)
For x=1 To 10
WindowEvent()
Next x
Delay(8)
Next i
Else ; Свернуть плейлист
For i=250 To 52 Step -2 ; Свернуть плейлист mp3
ResizeWindow(#Window_0, #PB_Ignore, #PB_Ignore,#PB_Ignore,i)
For x=1 To 10
WindowEvent()
Next x
Delay(8)
Next i
EndIf
EndProcedure
Procedure LoadPlayList() ; плейлист fm
Protected Result=0
ClearList(PlayList())
ClearGadgetItems(#Play_ListFM)
If OpenPreferences("radio.pls")
x=1
PreferenceGroup(stil)
Repeat
URL.s=ReadPreferenceString("File"+Str(x), "")
Title.s=ReadPreferenceString("Title"+Str(x), "")
If URL="" ;Or Title=""
Break
EndIf
AddElement(PlayList())
PlayList()\URL=URL
PlayList()\Title=Title
x+1
ForEver
If x>1
Result=1
EndIf
ClosePreferences()
EndIf
EndProcedure
Procedure Loadfile(url_1$) ; Создание потокового звука, получаемыми из сети Интернет
BASS_StreamFree(Handle) ; Закроем все существующие каналы воспроизведения и освободим системные ресурсы
Handle=BASS_StreamCreateURL(url_1$, 0, 0, #Null, 0)
BASS_ChannelPlay(Handle,0)
BASS_ChannelSetAttribute( Handle,#BASS_ATTRIB_VOL,volume)
EndProcedure
;{------------------Окно--------------------------------
OpenWindow (#Window_0,0,0,225,52,"",#PB_Window_BorderLess|#PB_Window_ScreenCentered)
SetWindowColor(#Window_0,RGB(24, 24, 24)) ; фон окна
ImageGadget(#im3, 217, 2, 5, 5, ImageID(#im3)) ; закрыть
ImageGadget(#im1, 0, 0, 225, 32,ImageID(#im1)) ; фрн
ImageGadget(#im2, 13, 14, 198, 14,ImageID(#im2)) ; бег строка
ImageGadget(#but_1,15, 33, 17, 16,ImageID(#but_1)) ; кнопка 1
ImageGadget(#but_2,34, 33, 17, 16,ImageID(#but_1)) ; кнопка пауза
ImageGadget(#but_3,53, 33, 17, 16,ImageID(#but_1)) ; кнопка 3
ImageGadget(#but_4,72, 33, 17, 16,ImageID(#but_1)) ; кнопка 4
ImageGadget(#vol, 100,37, 0, 0 ,ImageID(#vol)) ; громкость
TextGadget(#vol_in,207,35,15,10,"50") ; громкость
SetGadgetColor(#vol_in, #PB_Gadget_BackColor, RGB(24, 24, 24))
SetGadgetColor(#vol_in, #PB_Gadget_FrontColor , RGB(158, 157, 132))
SetGadgetFont (#vol_in, FontID(#Font_2))
but1(sw,we) ; кнопка 1
but2(sw,we) ; кнопка 2
but3(sw,we) ; кнопка 3
but4(sw,we) ; кнопка 4
ContainerGadget(#Cont_2,5,58,215,186) ; fm
ListViewGadget(#Play_ListFm, -2, -2, 240, 190)
PureCOLOR_SetGadgetColor(#Play_ListFm, RGB(95, 95, 95),RGB(0, 0, 0))
CloseGadgetList()
LineGadgetWidth (#lin, 5, 244, 215, RGB(90, 90, 90))
;LineGadgetWidth (#lin9, 5, 57, 215, RGB(90, 90, 90))
LineGadgetHeight(#lin2, 220, 57, 188, RGB(90, 90, 90))
;LineGadgetHeight(#lin8, 4, 57, 188, RGB(90, 90, 90))
LineGadgetHeight(#lin5,0, 33,116, RGB(0, 0, 0))
LineGadgetHeight(#lin6,224,33,116, RGB(0, 0, 0))
LineGadgetWidth (#lin7,0,249, 225, RGB(0, 0, 0))
LineGadgetWidth (#lin3,0,51, 225, RGB(0, 0, 0))
LineGadgetWidth (#lin4,0,52, 225, RGB(90, 90, 90))
;----------------------------------------------------
stil ="Всё подряд"
LoadPlayList()
ForEach PlayList()
AddGadgetItem(#Play_ListFM,-1,PlayList()\Title)
Next
;----------------------------------------------------
Fon()
BASS_Init(-1, 44100, 0, WindowID(0), #Null)
SetTimer_(WindowID(#Window_0),Event,45,@Stroka())
;}------------------------------------------------------
;{-----------------Главный цикл-------------------------
Repeat
EventID.l = WaitWindowEvent()
mx.l = WindowMouseX(#Window_0) ; координаты x
my.l = WindowMouseY(#Window_0) ; координаты y
;Debug mx
;Debug my
If ((mx > 218 And mx < 223) And (my > 2 And my < 7))
Clos(RGB(224, 26, 31)) ; закрыть
SetCursor_(LoadCursor_(0,#IDC_HAND)) ; курсор рука
EndIf
;---------------------------------------------------------------------
If ((mx > 15 And mx < 32) And (my > 33 And my < 46))
but1(RGB(194, 6, 6),RGB(87, 17, 17)) ; подцветка кнопки 1
SetCursor_(LoadCursor_(0,#IDC_HAND)) ; курсор рука
Else
but1(sw,we)
EndIf
;---------------------------------------------------------------------
If ((mx > 34 And mx < 51) And (my > 33 And my < 46))
but2(RGB(194, 6, 6),RGB(87, 17, 17)) ; подцветка кнопки 2
SetCursor_(LoadCursor_(0,#IDC_HAND)) ; курсор рука
Else
but2(sw,we)
EndIf
;---------------------------------------------------------------------
If ((mx > 53 And mx < 70) And (my > 33 And my < 46))
but3(RGB(194, 6, 6),RGB(87, 17, 17)) ; подцветка кнопки 3
SetCursor_(LoadCursor_(0,#IDC_HAND)) ; курсор рука
Else
but3(sw,we)
EndIf
;---------------------------------------------------------------------
If ((mx > 72 And mx < 89) And (my > 33 And my < 46))
but4(RGB(194, 6, 6),RGB(87, 17, 17)) ; подцветка кнопки 3
SetCursor_(LoadCursor_(0,#IDC_HAND)) ; курсор рука
Else
but4(sw,we)
EndIf
;---------------------------------------------------------------------
Window = EventWindow()
Gadget = EventGadget()
Select EventID
Case #WM_LBUTTONDBLCLK ; обработка события на двойной клик
;------------------------------------------
If Gadget = #Play_ListFM ; FM onlain
Row = GetGadgetState(#Play_ListFM) ; получаем позицию
SelectElement(PlayList(),Row)
URL.s =PlayList()\URL ; адрес
Title.s=PlayList()\Title ; имя
;Nname.s= Title.s
Loadfile(URL.s)
EndIf
;-----------------------------------------------------
Case #PB_Event_Gadget
Select EventGadget()
Case #im1
SendMessage_(WindowID(#Window_0),#WM_NCLBUTTONDOWN, #HTCAPTION,0) ; перетянуть
Case #im3 ; закрыть
Break
Case #but_4
min = min ! 1
Animate_Gadget() ; анимированное появление fm
Case #vol ; громкость
x=WindowMouseX(#Window_0)
SetCursor_(LoadCursor_(0,#IDC_HAND)) ; курсор рука
vol=x-GadgetX(#vol)
volume = vol/100
BASS_ChannelSetAttribute( Handle,#BASS_ATTRIB_VOL,volume)
SetGadgetText(#vol_in, Str(vol))
Case #but_2 ; пауза
Pausa = Pausa ! 1
If Pausa
BASS_ChannelPause(Handle)
Else
BASS_ChannelPlay(Handle,0)
EndIf
Case #but_1 ; позицию назад
Row = Row-1
SelectElement(PlayList(),Row)
URL.s =PlayList()\URL ; адрес
Title.s=PlayList()\Title ; имя
Loadfile(URL.s)
Case #but_3 ; позицию вперёд
Row = Row+1
SelectElement(PlayList(),Row)
URL.s =PlayList()\URL ; адрес
Title.s=PlayList()\Title ; имя
Loadfile(URL.s)
EndSelect
EndSelect
ForEver
;}-------------------------------------------------------