Уроки PureBasic

Categories

Other Sites

Other Sites

Other Sites



             Поиск по сайту

     

                


    Оставить мне сообщение:



Radio BASS

Уроки PureBasic

Скин

Онлайновый FM радио и MP3 плеер, с использованием библиотеки Bass.dll и поддержкой эквалайзера.
В новой версии полностью изменён дизайн и полностью переписан код.
Для версии PureBasic 4.40 и выше, используются изображения с прозрачным альфа каналом.

Radio Bass


Переключение на mini/max cкин по правой кнопки мыши.

radio bass


radio bass
Уроки PureBasic

Скачать архив 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 ;}------------------------------------------------------- </plaintext> </div><br><br><br><br> <br><br> </div> </div> <!-- copyright (t4) --><div align="center">Используются технологии <a href="http://www.ucoz.ru/" title="Создать сайт бесплатно"><b>uCoz</b></a><br /></div><!-- /copyright --> </body> </html>