;------------Светодиодная матрица - МОДЖЕТ (антигаджет)-----------
;{---------Запрет на запуск программы более одного раза-----------
a = CreateSemaphore_(#Null,0,1,"MODGET 8x8")
If a<>0 And GetLastError_()= #ERROR_ALREADY_EXISTS
CloseHandle_(a)
End
EndIf
;}---------------------------------------------------------------
;{-----------------------Enumeration------------------------------
Enumeration
#Window_0
#Window_1
#Window_2
#Window_3
EndEnumeration
;}----------------------------------------------------------------
;{----------------------Глобальные переменные---------------------
#Window_0=0
#Name="MODGET 8x8" ;заголовок программы
#NO_Device="отключен" ;сообщения программы
#YES_Device="подключен" ;сообщения программы
Global USB_PID ;идентификатор PID
Global USB_VID ;идентификатор VID
Global Text.s
;}---------------------------------------------------------------
Procedure ProgramAtStartup(State, ProgName.s) ; Управление автозагрузкой программы
valueName$=ProgramFilename()
GetHandle = RegOpenKeyEx_(#HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Run", 0, #KEY_ALL_ACCESS, @hKey)
If GetHandle = #ERROR_SUCCESS
If State=1
RegSetValueEx_(hKey, @ProgName, 0, #REG_SZ, @valueName$, Len(valueName$))
Else
RegDeleteValue_(hKey, @ProgName)
EndIf
RegCloseKey_(hKey)
EndIf
EndProcedure
Procedure FindDevice_Timer() ; таймер - процедура проверки подключения нашего устройства
Static Old_Test
Test=HID_Lib_DeviceTest(USB_PID, USB_VID);(USB_PID, USB_VID)
If Test<>Old_Test
Old_Test=Test
If Test
HID_Lib_CloseDevice(R_DeviceHandle) : HID_Lib_CloseDevice(W_DeviceHandle)
W_DeviceHandle=HID_Lib_OpenDevice(USB_PID, USB_VID);(USB_PID, USB_VID)
R_DeviceHandle=HID_Lib_OpenDevice(USB_PID, USB_VID);(USB_PID, USB_VID)
SetGadgetText(0,#YES_Device)
SetGadgetColor(0, #PB_Gadget_FrontColor, $00FF0F)
Else
HID_Lib_CloseDevice(R_DeviceHandle) : HID_Lib_CloseDevice(W_DeviceHandle)
R_DeviceHandle=0 : W_DeviceHandle=0
SetGadgetText(0,#NO_Device)
SetGadgetColor(0, #PB_Gadget_FrontColor, $0000FF)
EndIf
EndIf
EndProcedure
Structure DrawInfo
row.c[8]
EndStructure
#xc = 20 ; начало по X
#yc = 20 ; начало по Y
CreateImage(80,148,148)
Procedure Draw_Image(*Infa.DrawInfo)
If StartDrawing(ImageOutput(80))
Box(83,0,148,148,0) ; Очистка рисунка
For col = 0 To 7
For row = 0 To 7
x = 20 + col * 15
y = 20 + row * 15
If *Infa\row[row] << col & %10000000
Color = RGB(255, 102, 00)
Else
Color = RGB(102, 102, 102)
EndIf
Circle(x, y, 5, Color)
Next
Next
StopDrawing()
EndIf
;SetGadgetState(83, ImageID(80))
EndProcedure
Procedure Timer1()
ImageDraw.DrawInfo
For i=0 To 7
ImageDraw\row[i] = Random(255)
Next i
Draw_Image(@ImageDraw)
EndProcedure
Procedure StreamFileIn_Callback(hFile, pbBuff, cb, pcb)
ProcedureReturn ReadFile_(hFile, pbBuff, cb, pcb, 0)!1
EndProcedure
Procedure FileStreamIn(Gadget, File.s)
;Procedure zum streamen einer Datei in das RichEdit
;Control
Protected StreamData.EDITSTREAM
;Wenn die Datei geцffnet werden kann, fortfahren.
If ReadFile(10, File)
;Das Handle der Datei speichern
StreamData\dwCookie = FileID(10)
StreamData\dwError = #Null
;Die Adresse der Callback Procedure speichern
StreamData\pfnCallback = @StreamFileIn_Callback()
;Das RichEdit Control anweisen, den Stream zu aktivieren
SendMessage_(GadgetID(Gadget), #EM_STREAMIN, #SF_RTF, @StreamData)
;Datei schliessen
CloseFile(10)
EndIf
EndProcedure
Procedure Open_Window_1()
OpenWindow(#Window_1, 0, 0, 277, 260, "О программе MODGET 8x8", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(72,2,2,496,370,#PB_Editor_ReadOnly)
SendMessage_(GadgetID(72), #EM_SETTARGETDEVICE, #Null, 0) ; Перенос по словам
;If
LoadImage(70, "LOGO.bmp") ; change 2nd parameter to the path/filename of your image
ImageGadget(70, 10, 12, 100, 83, ImageID(70)) ; imagegadget standard
;ImageGadget(1, 10, 10, 100, 83, ImageID(0), #PB_Image_Border) ; imagegadget with border
EditorGadget(72,102,108,165,115,#PB_Editor_ReadOnly)
SendMessage_(GadgetID(72), #EM_SETTARGETDEVICE, #Null, 0) ; Перенос по словам
FileStreamIn(72, "Авторы.rtf")
TextGadget(62,102,10,100,18,"8x8_USB")
TextGadget(63,102,34,100,18,"Версия 1.0")
TextGadget(64,102,58,150,18,"Copyright © Radan 2011")
TextGadget(65,102,82,100,18,"Radan Studio")
ButtonGadget(66,192,230,75,19,"OK")
;EndIf
EndProcedure
Procedure.s ReadText(File$)
Protected Text.s = ""
If ReadFile(0, File$)
Size = Lof(0); размер файла в байтах
If Size>0
*String = AllocateMemory(Size); выделяем область памяти
If *String
FillMemory(*String, Size, 0)
FormatFile=ReadStringFormat(0) ; Определение кодировки файла (Ascii, UTF8 или Unicode).
ReadData(0, *String , Size); записываем строку в область памяти
Text.s=PeekS(*String, -1, FormatFile)
FreeMemory(*String)
EndIf
EndIf
CloseFile(0)
EndIf
ProcedureReturn Text
EndProcedure
Image.DrawInfo
OpenWindow(0, 0, 0, 512, 207, "MODGET 8x8", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_Invisible)
CreateMenu(0, WindowID(0)) ; menu creation starts....
MenuTitle("Автозагрузка")
MenuItem(1, "Добавить в автозагрузку")
MenuItem(2, "Удалить из автозагрузки")
MenuTitle("Помощь")
MenuItem(3, "О программе")
;LoadImage(80, "Фон.bmp") ; change 2nd parameter to the path/filename of your image
;ImageGadget(80, 6, 33, 148, 148, ImageID(80)) ; imagegadget standard
Draw_Image(@Image)
ImageGadget(82,6, 33,148,148,ImageID(80))
;Добавим иконку в системный трей
AddSysTrayIcon(67, WindowID(0), ExtractIcon_(0,ProgramFilename(),0))
SysTrayIconToolTip(67, "MODGET 8x8")
;Добавим к иконке меню
CreatePopupMenu(68)
MenuItem(4, "Развернуть")
MenuItem(5, "Свернуть")
MenuBar()
MenuItem(10, "Выход")
TextGadget(55, 387, 5, 120 ,15,"MODGET ");, #PB_Text_Border);|#PB_Text_Center)
;SetGadgetColor(55, #PB_Gadget_FrontColor, $FF00FF)
TextGadget(1, 440, 5, 120 ,15,#NO_Device);, #PB_Text_Border);|#PB_Text_Center)
SetGadgetColor(1, #PB_Gadget_FrontColor, $0000FF)
PanelGadget (0, 170, 33, 339, 150)
AddGadgetItem (0, -1, "Случайный")
TrackBarGadget(18, 17, 6, 165, 35, 0, 18, #PB_TrackBar_Ticks)
TrackBarGadget(19, 17, 57, 165, 35, 0, 100, #PB_TrackBar_Ticks)
TrackBarGadget(20, 214, 80, 99, 43, 0, 18, #PB_TrackBar_Ticks)
ButtonGadget(21,186,95,22,23,"")
TextGadget(22, 17, 39, 50 ,18,"Пиксели")
TextGadget(23, 17, 90, 50 ,13,"Скорость")
OptionGadget(13, 188, 3, 70, 20, "Случайно")
OptionGadget(14, 188, 23, 60, 20, "Матрица")
OptionGadget(15, 188, 43, 90, 20, "Калейдоскоп")
;SetGadgetState(13, 13) ; set second option as active one
CheckBoxGadget(16, 188, 63, 70, 20, "Инверсия"): SetGadgetState(16, #PB_Checkbox_Checked)
CheckBoxGadget(17, 270, 63, 70, 20, "Звук")
SetGadgetState(17, #PB_Checkbox_Checked)
AddGadgetItem (0, -1,"Время")
TrackBarGadget(8, 50, 16, 165, 35, 0, 300, #PB_TrackBar_Ticks)
TextGadget(25, 50, 50, 50 ,13,"Скорость")
; TextGadget(0, 50, 70, 80, 20, "")
;AddWindowTimer(0, 123, 1000)
;GadgetToolTip(7, "Уровень сигнала")
OptionGadget(9, 250, 10, 60, 20, "Вид 1")
OptionGadget(10, 250, 32, 60, 20, "Вид 2")
OptionGadget(11, 250, 54, 60, 20, "Вид 3")
;SetGadgetState(9, 9) ; set second option as active one
CheckBoxGadget(12, 250, 76, 70, 20, "Инверсия")
SetGadgetState(12, #PB_Checkbox_Checked)
AddGadgetItem (0, -1,"Курс валют")
CheckBoxGadget(25, 11, 9, 70, 13, "Инверсия")
SetGadgetState(25, #PB_Checkbox_Checked)
CheckBoxGadget(26, 89, 9, 60, 13, "Регистр")
SetGadgetState(26, #PB_Checkbox_Checked)
OptionGadget(27, 11, 99, 95, 20, "Горизонтально")
OptionGadget(28, 115, 99, 90, 20, "Вертикально")
TrackBarGadget(29, 10, 52, 142, 45, 0, 300, #PB_TrackBar_Ticks)
ComboBoxGadget(30, 10, 28, 142, 21)
AddGadgetItem(30, -1, "Украина")
AddGadgetItem(30, -1, "Россия")
EditorGadget(31,158,7,163,90,#PB_Editor_ReadOnly)
AddGadgetItem (0, -1,"Текст")
CheckBoxGadget(43, 7, 35, 70, 13, "Инверсия")
SetGadgetState(43, #PB_Checkbox_Checked)
CheckBoxGadget(44, 85, 35, 60, 13, "Регистр")
SetGadgetState(44, #PB_Checkbox_Checked)
OptionGadget(45, 11, 84, 95, 20, "Горизонтально")
OptionGadget(46, 11, 102, 90, 20, "Вертикально")
TrackBarGadget(47, 6, 51, 142, 35, 0, 300, #PB_TrackBar_Ticks)
ComboBoxGadget(48, 154, 98, 163, 21)
EditorGadget(49,154,7,163,89,#PB_Editor_ReadOnly)
SendMessage_(GadgetID(49),#EM_SETTARGETDEVICE, #Null, 0)
ButtonGadget(50,6,6,144,23,"Загрузить текст")
;Получает полный путь запущенного приложения
Result$ = ProgramFilename()
;Извлекает путь из полного пути. Например, если полный путь "C:\PureBasic\PB.exe", результат будет "C:\PureBasic\".
Path$ = GetPathPart(Result$)
;Debug Path$
; Просмотр всех элементов директории запущенного приложения (без поддиректорий)
Directory$ = Path$
If ExamineDirectory(0, Directory$, "*.txt")
m=0
While NextDirectoryEntry(0)
AddGadgetItem(48, -1, Left(DirectoryEntryName(0), Len(DirectoryEntryName(0))-4))
txt.s=Text + ".txt"
If DirectoryEntryName(0) = txt
SetGadgetState(48, m)
EndIf
m=m+1 ;Debug DirectoryEntryName(0) ;+ Type$ + "- Size in byte: " + Str(DirectoryEntrySize(0))
Wend
FinishDirectory(0)
EndIf
AddGadgetItem (0, -1,"Погода")
CheckBoxGadget(32, 11, 9, 70, 13, "Инверсия")
SetGadgetState(32, #PB_Checkbox_Checked)
CheckBoxGadget(33, 89, 9, 60, 13, "Регистр")
SetGadgetState(33, #PB_Checkbox_Checked)
OptionGadget(34, 11, 84, 94, 20, "Горизонтально")
OptionGadget(35, 11, 102, 85, 20, "Вертикально")
TrackBarGadget(36, 10, 52, 142, 35, 0, 300, #PB_TrackBar_Ticks)
ComboBoxGadget(37, 10, 28, 142, 21)
EditorGadget(38,158,7,163,90,#PB_Editor_ReadOnly)
CheckBoxGadget(39, 158, 102, 30, 20, "6")
SetGadgetState(39, #PB_Checkbox_Checked)
CheckBoxGadget(40, 202, 102, 40, 20, "12")
SetGadgetState(40, #PB_Checkbox_Checked)
CheckBoxGadget(41, 246, 102, 40, 20, "18")
SetGadgetState(41, #PB_Checkbox_Checked)
CheckBoxGadget(42, 290, 102, 40, 20, "24")
SetGadgetState(42, #PB_Checkbox_Checked)
AddGadgetItem (0, -1,"Спектр")
TrackBarGadget(7, 27, 16, 165, 45, 0, 18, #PB_TrackBar_Ticks)
;GadgetToolTip(7, "Уровень сигнала")
OptionGadget(4, 250, 10, 60, 20, "Линия 1")
OptionGadget(5, 250, 32, 60, 20, "Линия 2")
OptionGadget(6, 250, 54, 60, 20, "Точка")
;SetGadgetState(4, 4) ; set second option as active one
CheckBoxGadget(24, 250, 76, 70, 20, "Инверсия")
SetGadgetState(24, #PB_Checkbox_Checked)
CloseGadgetList()
HideWindow(0,0)
;--------------------Главный цикл---------------------
Repeat
Event= WaitWindowEvent()
Window=EventWindow()
Gadget=EventGadget()
If Event = #PB_Event_SysTray
If EventType() = #PB_EventType_RightClick ; Обработка правой кнопки мышки
DisplayPopupMenu(68, WindowID(0)) ; показ вспывающего меню
EndIf
If EventType() = #PB_EventType_LeftClick
HideWindow(0, 0)
SetWindowState(0, #PB_Window_Normal)
EndIf
EndIf
If Event = #PB_Event_Menu
Select EventMenu()
Case 1 ;"Добавить в автозагрузку"
;RunProgramAtStartup(1,1,"MODGET 8x8",ProgramFilename()) ; Add to Startup
ProgramAtStartup(1, "MODGET 8x8")
Case 2 ;"Удалить из автозагрузки"
;DelProgramAtStartup(1,1,"MODGET 8x8") ; Remove from Startup
ProgramAtStartup(0, "MODGET 8x8")
Case 3 ;"О программе"
Open_Window_1()
Case 4 ;"Развернуть"
HideWindow(0, 0)
SetWindowState(0, #PB_Window_Normal)
Case 5 ;"Свернуть"
HideWindow(0, 1)
Case 10 ;"Выход"
;Q = 1
Break
EndSelect
EndIf
If Event=#PB_Event_MinimizeWindow ;Событие при сворачивании окна
HideWindow(0,1) ;свернуть окно
EndIf
;{----------События компонентов----------
If Event=#PB_Event_Gadget
Select EventGadget()
Case 13
If GetGadgetState (13) = 1
ImageGadget(84,20,20,148,148, 0)
Draw_Image(@Image)
SetTimer_(WindowID(0),2,100, @Timer1() )
EndIf
Case 48
If EventType() = 1 ; Выпадающий список закрылся
File$ = Path$ + GetGadgetText(48)+".txt"
Text=ReadText(File$)
SetGadgetText(49,Text)
EndIf
Case 50
StandardFile$ = "" ; set initial file+path to display
; With next string we will set the search patterns ("|" as separator) for file displaying:
; 1st: "Text (*.txt)" as name, ".txt" and ".bat" as allowed extension
; 2nd: "PureBasic (*.pb)" as name, ".pb" as allowed extension
; 3rd: "All files (*.*) as name, "*.*" as allowed extension, valid for all files
Pattern$ = "Text (*.txt)|*.txt"
Pattern = 0 ; use the first of the three possible patterns as standard
File$ = OpenFileRequester("Открыть файл", StandardFile$, Pattern$, Pattern)
If File$
Text=ReadText(File$)
SetGadgetText(49,Text)
EndIf
Case 66
CloseWindow(#Window_1)
EndSelect
EndIf
;}-------------------------------------
Until Event = #PB_Event_CloseWindow ;Or Q = 1 ;Конец главного цикла