PureBasic - форум

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

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


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Светодиодная матрица - МОДЖЕТ (антигаджет) на Пурике


Светодиодная матрица - МОДЖЕТ (антигаджет) на Пурике

Сообщений 31 страница 60 из 446

31

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

Как из ComboBoxGadget загруить текст в EditorGadget.

Код:
If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  EditorGadget(0, 8, 28, 306, 110)
  
  ComboBoxGadget(1,222,2, 90,22)
  
  AddGadgetItem(1, -1, "Один")
  AddGadgetItem(1, -1, "Два")
  AddGadgetItem(1, -1, "Три")
  AddGadgetItem(1, -1, "Четыре")
  SetGadgetState(1,0)
  
  Repeat 
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_Gadget
      If EventGadget() = 1
        If EventType() = 1 ; Признак закрытия выпадающего списка с выбором пункта.
          SetGadgetText(0, GetGadgetText(1))
        EndIf
      EndIf
    EndIf
    
  Until Event = #PB_Event_CloseWindow
EndIf

0

32

Спасибо! А как текстовый файл?

0

33

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

А как текстовый файл?

Что текстовый файл?
Как загрузить с диска? Обсуждали это ведь уже.
Или что-то другое?

0

34

На вкладке "Текст" есть кнопка и ComboBoxGadget. Кнопка загружает текстовый файл со всех локальных дисках, а ComboBoxGadget только файлы, которые лежат в папке с программой. У меня не получается так сделать.

Код:
;------------Светодиодная матрица - МОДЖЕТ (антигаджет)-----------

;{---------Запрет на запуск программы более одного раза-----------  
 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 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$)
  Text.s = ""
  If ReadFile(0, File$) 
    Size = Lof(0); размер файла в байтах
    If Size>0
      *String = AllocateMemory(Size); выделяем область памяти 
      If *String 
        ReadData(0, *String , Size); записываем строку в область памяти
        Text.s=PeekS(*String)
        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)
  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)   
            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()
    
;--------------------Главный цикл---------------------
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    
  Case 2 ;"Удалить из автозагрузки"
 DelProgramAtStartup(1,1,"MODGET 8x8") ; Remove from Startup   
Case 3 ;"О программе"
Open_Window_1()  
Case 4 ;"Развернуть"  
HideWindow(0, 0)
SetWindowState(0, #PB_Window_Normal)   
Case 5 ;"Свернуть" 
  HideWindow(0, 1) 
Case 10 ;"Выход"
  
  Q = 1

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 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$
    ReadText(File$)
          SetGadgetText(49,PeekS(*Text))
  EndIf
    
      Case 66
        CloseWindow(#Window_1)
    EndSelect
           
           

EndIf 
;}-------------------------------------

Until Event = #PB_Event_CloseWindow Or Q = 1 ;Конец главного цикла

0

35

368 и 369 строки должны быть такими:

Код:
          Text=ReadText(File$)
          SetGadgetText(49,Text)

Вот код.

Код:
;------------Светодиодная матрица - МОДЖЕТ (антигаджет)-----------

;{---------Запрет на запуск программы более одного раза-----------  
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 ;Конец главного цикла

0

36

Спасибо!

0

37

Возможно ли в ComboBoxGadget загрузть текстовый файл целиком в виде ниспадающего меню, а в сам ComboBoxGadget загрузить только определенную строку? Если да, то как?

0

38

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

Возможно ли в ComboBoxGadget загрузть текстовый файл целиком в виде ниспадающего меню

Разве он туда поместиться?

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

а в сам ComboBoxGadget загрузить только определенную строку?

Так весь файл или только строку?

0

39

В моджете во вкладке погода таким образом выбирается город.

0

40

А, каждая строка файла должна быть отдельным пунктом выпадающего списка?

Код:
If OpenWindow(0, 0, 0, 270, 100, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ComboBoxGadget(0, 10, 10, 250, 21, #PB_ComboBox_Editable)
  
  If ReadFile(0, "GismeteoCodSity.txt")
    While Eof(0) = 0
      String.s=ReadString(0)
      If String<>""
        AddGadgetItem(0, -1, String)
      EndIf
    Wend
    CloseFile(0)
  EndIf
  
  SetGadgetState(0,0)
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

0

41

Это то, что нужно!

0

42

Как загрузить Many_uk.dll и Many_ru.dll, а полученные данные загрузить в EditorGadget.

0

43

Загружаются DLL, функцией OpenLibrary, вызываются функции при помощи CallFunction, ну или GetFunction + прототипы.
Но чтобы работать с библиотекой, нужно описание ее функций.

0

44

Ясно. Буду узнавать описание функций

0

45

Самое интересное что в исходнике не смог найти вызовы функций из этих библиотек.
Возможно что в архиве не все файлы исходников.

0

46

Скачивал с сайта, должны быть все. Написал Радану, может поможет.

0

47

Вот что Radan ответил:

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

bass - на официальном сайте.
Получение погоды и курса валют - только то, что они и делают, и не более. Самописные, кое-что сделано не очень красиво, поэтому не хочется отдавать на растерзание. Смысл их работы такой: При вызове с параметром (датой для валют или городом для погоды)идём на сайт по определённому адресу и закачиваем файл на компьютер пользователя (папка темп программы). Далее, при успехе, из файла выделяем необходимую нам информацию и формируем строку для возврата назад или при неудаче - соответствующее сообщение.

0

48

Читал уже....
В общем, эти библиотеки (Prognoz.dll, Many_uk.dll и Many_ru.dll) являются управляемым кодом и хз, как его вызвать из неуправляемого, они даже функции не экспортируют. Думаю что проще разобратся как получать данные с тех сайтов.

bass.dll нормальная и с ней не возникнет проблем.

0

49

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

Думаю что проще разобратся как получать данные с тех сайтов.

На сайте http://informer.gismeteo.ru/ можно получить данные в формате XML, на сайтах банков незнаю.

0

50

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

На сайте http://informer.gismeteo.ru/ можно получить данные в формате XML

Ага, вот тут код как это сделать

0

51

Спасибо!

0

52

Привет!
Пытаюсь для начала сделать так, чтобы программа создавала текстовый файл с прогнозом погоды.
Файл создается, но прогноза нет. :dontknow:
Глянте, пожалуста, код. Спасибо.

Код:
;
; ------------------------------------------------------------
;     Парсинг XML кода возвращаемого с ресурса Gismeteo.ru
;  
;
;    (c) 2009 - kvitaliy
;
; ------------------------------------------------------------

;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Text_0
  #Image_1
  #Text_2
  #Text_3
  #Text_4
  #Text_5
  #Text_6
  #Text_7
  #Text_8
  #ComboBox_0
  #ButtonImage_1
  #ButtonImage_2
  #ButtonImage_3
EndEnumeration
;}
UsePNGImageDecoder()
#XML        = 0
Global Sity$
Global SityNew$
Global N=0
Global G=1
Global Dim DataDay.s(4)
Global Dim cloudiness.s(4)
Global Dim precipitation.s(4)
Global Dim PRESSUREmin.s(4)
Global Dim PRESSUREmax.s(4)
Global Dim TEMPERATUREmin.s(4)
Global Dim TEMPERATUREmax.s(4)
Global Dim HEATmin.s(4)
Global Dim HEATmax.s(4)
Global Dim WINDmin.s(4)
Global Dim WINDmax.s(4)
Global Dim RELWETmin.s(4)
Global Dim RELWETmax.s(4)
Global Dim direction.s(4)

;{ Fonts
Enumeration
  #Font_Text_0
  #Font_Text_6
  #Font_Text_8
EndEnumeration
;}
;{ Images
Enumeration
  #Image_Image_1
  #Image_ButtonImage_1
  #Image_ButtonImage_2
  #Image_ButtonImage_3
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}
Procedure GisMet_XML_Data(*CurrentNode, CurrentSublevel)
  
  If XMLNodeType(*CurrentNode) = #PB_XML_Normal
      
    If  GetXMLNodeName(*CurrentNode) = "FORECAST": N+1:EndIf
         
    If ExamineXMLAttributes(*CurrentNode)
      While NextXMLAttribute(*CurrentNode)
           Select XMLAttributeName(*CurrentNode)
           Case "sname"
             weekday$=XMLAttributeValue(*CurrentNode)
              
           Case "day"
               day$=XMLAttributeValue(*CurrentNode)
           Case "month"
                month$=XMLAttributeValue(*CurrentNode)
           Case "year"
                year$=XMLAttributeValue(*CurrentNode)
           Case "hour"
                hour$=XMLAttributeValue(*CurrentNode)
                
           Case "weekday"
              Select XMLAttributeValue(*CurrentNode)
                              
                 Case "1"
                  weekday$= " Воскресенье"
                 Case "2"
                  weekday$= " Понедельник"
                 Case "3"
                 weekday$= "  Вторник"
                 Case "4" 
                 weekday$=" Среда"
                 Case "5"
                 weekday$=" Четверг"
                 Case "6"
                 weekday$= " Пятница"
                 Case "7"
                 weekday$= " Суббота"
              EndSelect   
              dataProg$=weekday$+", "+ day$ + "." + month$ +"." + year$ + " На " + hour$+ "ч." 
                DataDay(N)=dataProg$
                
                
           Case "cloudiness"; Облачность
             Select XMLAttributeValue(*CurrentNode)
                Case "0"
                cloudiness(N)= "Ясно"
                Case "1"
                cloudiness(N)= "Малооблачно"
                Case "2"
                cloudiness(N)= "Oблачно"
                Case "3"
                cloudiness(N)= "Пасмурно"
              EndSelect
                                  
            Case "precipitation" ; Осадки
               Select XMLAttributeValue(*CurrentNode)
                Case "4"
                precipitation(N)= "Дождь"
                Case "5"
                precipitation(N)= "Ливень"
                Case "6","7"
                precipitation(N)= "Снег"
                Case "8"
                precipitation(N)= "Гроза"
                Case "9"
                precipitation(N)= "Нет данных"
                Case "10" 
                precipitation(N)= "Без осадков"
               EndSelect  
               ;Debug cloudiness(N) + ", " + precipitation(N)
             Case "min"
               Select GetXMLNodeName(*CurrentNode) 
                Case "PRESSURE"
                PRESSUREmin(N) = XMLAttributeValue(*CurrentNode)
                Case "TEMPERATURE"
                TEMPERATUREmin(N) = XMLAttributeValue(*CurrentNode)
                Case "HEAT"
                HEATmin(N) = XMLAttributeValue(*CurrentNode)
                Case "WIND"
                WINDmin(N) = XMLAttributeValue(*CurrentNode)
                Case "RELWET"
                RELWETmin(N) = XMLAttributeValue(*CurrentNode)
                
                EndSelect
              Case "max"
               Select GetXMLNodeName(*CurrentNode) 
                Case "PRESSURE"
                PRESSUREmax(N) = XMLAttributeValue(*CurrentNode)
                Case "TEMPERATURE"
                TEMPERATUREmax(N) = XMLAttributeValue(*CurrentNode)
                Case "HEAT"
                HEATmax(N) = XMLAttributeValue(*CurrentNode)
                Case "WIND"
                WINDmax(N) = XMLAttributeValue(*CurrentNode)
                Case "RELWET"
                RELWETmax(N) = XMLAttributeValue(*CurrentNode)
                
                EndSelect
                                
              Case "direction"
                Select XMLAttributeValue(*CurrentNode)
                 Case "0"
                 direction(N) = "северный"
                 Case "1"
                 direction(N) = "северо-восточный"
                 Case "2"
                 direction(N) = "восточный"
                 Case "3"
                 direction(N) = "юго-восточный"
                 Case "4"
                 direction(N) = "южный"
                 Case "5"
                 direction(N) = "юго-западный"
                 Case "6"
                 direction(N) = "западный"
                 Case "7"
                 direction(N) = "северо-западный"
                EndSelect

           EndSelect
        
      Wend
    EndIf
    ;    
    *ChildNode = ChildXMLNode(*CurrentNode)
    
    While *ChildNode <> 0
         GisMet_XML_Data(*ChildNode, CurrentSublevel+1)      
      *ChildNode = NextXMLNode(*ChildNode)
    Wend        
  
  EndIf

 
EndProcedure

Procedure ShowGis(Ind.i)
      ;- вывод на печать
;  Debug "Комфортность: " + HEATmin(i)+"-"+ HEATmax(i) +"°C"
      
      SetGadgetText(#Text_0,URLDecoder(Sity$))
      SetGadgetText(#Text_2,"Давление: "     + PRESSUREmin(Ind) + "..."+ PRESSUREmax(Ind) +" мм.рт.ст.")
      SetGadgetText(#Text_3,"Ветер "+direction(Ind))
      SetGadgetText(#Text_4,WINDmin(Ind)+"..."+WINDmax(Ind) +"m\c")
      SetGadgetText(#Text_5,"Влажность: "    + RELWETmin(Ind) + "..."+ RELWETmax(Ind) +" %")
      SetGadgetText(#Text_6,TEMPERATUREmin(Ind)+"..."+ TEMPERATUREmax(Ind) +"°C")
      SetGadgetText(#Text_8,DataDay(Ind))
      SetGadgetText(#Text_7,cloudiness(Ind) + ", " + precipitation(Ind))
      Select precipitation(Ind)
       Case "Без осадков"
        Select cloudiness(Ind)
         Case "Ясно":
         LoadImage(0, "Pogoda\pogoda20.png")
         Case "Малооблачно":
         LoadImage(0, "Pogoda\pogoda9.png")
         Case "Oблачно":
         LoadImage(0, "Pogoda\pogoda2.png")
         Case "Пасмурно":
         LoadImage(0, "Pogoda\pogoda24.png")
        EndSelect
       Case "Дождь"
       LoadImage(0, "Pogoda\pogoda14.png")
       Case "Ливень"
       LoadImage(0, "Pogoda\pogoda13.png")
       Case "Снег"
       LoadImage(0, "Pogoda\pogoda19.png")
       Case "Гроза"
       LoadImage(0, "Pogoda\pogoda23.png")
       EndSelect
       SetGadgetState(#Image_1, ImageID(0)) 
    
 EndProcedure
 
InitNetwork()
SityNew$="29838"; "29838"; - Барнаул
newSity:
  Filename$ = "gis.xml";
  
  If ReceiveHTTPFile("http://informer.gismeteo.ru/xml/"+SityNew$+"_1.xml", Filename$)
    ;Debug "Прогноз загружен"
  
If FileSize(FileName$) > 0 

  If LoadXML(#XML, FileName$)

    If XMLStatus(#XML) <> #PB_XML_Success
      Message$ = "Error in the XML file:" + Chr(13)
      Message$ + "Message: " + XMLError(#XML) + Chr(13)
      Message$ + "Line: " + Str(XMLErrorLine(#XML)) + "   Character: " + Str(XMLErrorPosition(#XML))
      MessageRequester("Error", Message$)
    EndIf
     *MainNode = MainXMLNode(#XML)      
      If *MainNode
        GisMet_XML_Data(*MainNode, 0)
      EndIf
      



  If OpenWindow(#Window_0, 436, 47, 400, 400, "Прогноз погоды на сутки", #PB_Window_SystemMenu|#PB_Window_TitleBar)
    
      TextGadget(#Text_0, 40, 5, 250, 30, "город", #PB_Text_Center)
      ImageGadget(#Image_1, 5, 95, 155, 160, 0)
      TextGadget(#Text_2, 190, 210, 200, 25, "Давление", #PB_Text_Center)
      TextGadget(#Text_3, 185, 105, 200, 25, "направление ветра", #PB_Text_Center)
      TextGadget(#Text_4, 185, 135, 200, 25, "Скорость", #PB_Text_Center)
      TextGadget(#Text_5, 185, 165, 200, 25, "Влажность", #PB_Text_Center)
      TextGadget(#Text_6, 85, 265, 210, 50, "Температура", #PB_Text_Center)
      TextGadget(#Text_7, 85, 315, 210, 50, "атмосфера", #PB_Text_Center)
      TextGadget(#Text_8, 5, 40, 250, 30, "число", #PB_Text_Center)
      ComboBoxGadget(#ComboBox_0, 85, 370, 210, 20): HideGadget(#ComboBox_0,1)
      ButtonImageGadget(#ButtonImage_1, 10, 360, 45, 30, CatchImage(#Image_ButtonImage_1, ?Image_ButtonImage_1))
      ButtonImageGadget(#ButtonImage_2, 340, 360, 45, 30, CatchImage(#Image_ButtonImage_2, ?Image_ButtonImage_2))
      ButtonImageGadget(#ButtonImage_3, 360, 10, 35, 35, CatchImage(#Image_ButtonImage_3, ?Image_ButtonImage_3))
      ; Gadget Fonts
      SetGadgetFont(#Text_0, LoadFont(#Font_Text_0, "Microsoft Sans Serif", 14, 272))
      SetGadgetFont(#Text_6, LoadFont(#Font_Text_6, "Microsoft Sans Serif", 20, 272))
      SetGadgetFont(#Text_8, LoadFont(#Font_Text_8, "Microsoft Sans Serif", 12, 784))
      SetGadgetFont(#Text_7, LoadFont(#Font_Text_8, "Microsoft Sans Serif", 12, 784))
      GadgetToolTip(#ButtonImage_1, "Обновить данные")
      GadgetToolTip(#ButtonImage_2, "Дальше...")
      GadgetToolTip(#ButtonImage_3, "Найти другой город")
    
        
  EndIf
  ShowGis(1)
  
    If CreateFile(1, "Text.txt")         ; we create a new text file...

      WriteStringN(1, "В городе " + Sity$ +" "+ day$ + "." + month$ +"." + year$ + ", " + weekday$ +","+ " на " + hour$+ "ч. " + "прогнозируется:") 
      WriteStringN(1, "давление " + PRESSUREmin(Ind) + " - "+ PRESSUREmax(Ind) +" мм.рт.ст.,")
      WriteStringN(1, "ветер "+direction(Ind)+","+" "+WINDmin(Ind)+" - "+WINDmax(Ind) +"m\c,") 
      WriteStringN(1, "относительная влажность воздуха " + RELWETmin(Ind) + " - "+ RELWETmax(Ind) +" %")
      WriteStringN(1, "температура "+TEMPERATUREmin(Ind)+" - "+ TEMPERATUREmax(Ind) +"°C" + cloudiness(Ind) + ", " + precipitation(Ind)) 

    CloseFile(1)                       ; close the previously opened file and store the written data this way
  Else
    MessageRequester("Information","Can't create the file!")
  EndIf
  
If ReadFile(0, "GismeteoCodSity.txt")   
    While Eof(0) = 0           
         AddGadgetItem(#ComboBox_0, -1,ReadString(0))
    Wend
    CloseFile(0)               
  Else
    MessageRequester("Information","Нет файла - справочника")
  EndIf  
  

      
;{- Event loop
Repeat
  Event = WaitWindowEvent()
  Select Event
    ; ///////////////////
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #Text_0
      ElseIf EventGadget = #ButtonImage_3
       HideGadget(#ComboBox_0,0)
      ElseIf EventGadget = #ComboBox_0
      SityNew$= Left(GetGadgetText(#ComboBox_0), 5)
      If Len(SityNew$)
        HideGadget(#ComboBox_0,1)
        N=0
        Goto newSity
      EndIf
        
      ElseIf EventGadget = #ButtonImage_1
      N=0
      Goto newSity
      ElseIf EventGadget = #ButtonImage_2
         If G<=3
           G+1
           ShowGis(G)
         Else
           G=1
           ShowGis(G)
         EndIf
      
      EndIf
      
      
    ; ////////////////////////
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
ForEver
Else
    MessageRequester("Error", "The file cannot be opened.")
  EndIf
 EndIf
  
Else
    ;Debug "Не загружен"
    MessageRequester("Information","Нет возможности загрузить данные из Интернет!")
  EndIf

;{ Included Images
DataSection
  Image_ButtonImage_1:
  IncludeBinary "Pogoda\refresh.ico"
  Image_ButtonImage_2:
  IncludeBinary "Pogoda\right.ico"
  Image_ButtonImage_3:
  IncludeBinary "Pogoda\0031 - Start Find.ico"
EndDataSection
;}


;}

0

53

И такой вопрос: как преобразовать HTML в текст?
Страница с валютой России:
http://www.cbr.ru/currency_base/D_print … 05.06.2010
Страница с валютой Украины:
http://bank.gov.ua/Fin_ryn....06.2010

0

54

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

Файл создается, но прогноза нет.

Ты вызвал процедуру

Код:
ShowGis(1)

с фргументом "1" который идет в номер выбранного элемента массивов! А в файл пишешь данные из массивов выбрав нулевой элемент! Ind = 0!!!

Код:
If CreateFile(1, "Text.txt")         ; we create a new text file...

      WriteStringN(1, "В городе " + Sity$ +" "+ day$ + "." + month$ +"." + year$ + ", " + weekday$ +","+ " на " + hour$+ "ч. " + "прогнозируется:") 
      WriteStringN(1, "давление " + PRESSUREmin(1) + " - "+ PRESSUREmax(1) +" мм.рт.ст.,")
      WriteStringN(1, "ветер "+direction(1)+","+" "+WINDmin(1)+" - "+WINDmax(1) +"m\c,") 
      WriteStringN(1, "относительная влажность воздуха " + RELWETmin(Ind) + " - "+ RELWETmax(Ind) +" %")
      WriteStringN(1, "температура "+TEMPERATUREmin(1)+" - "+ TEMPERATUREmax(1) +"°C" + cloudiness(1) + ", " + precipitation(1)) 

    CloseFile(1)                       ; close the previously opened file and store the written data this way
  Else
    MessageRequester("Information","Can't create the file!")
  EndIf

0

55

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

И такой вопрос: как преобразовать HTML в текст?Страница с валютой России:

Курс валюты последний вариант отлично подойдет...таким же макаром с использованием XML парсера.

0

56

Дмитрий написал(а):

с фргументом "1" который идет в номер выбранного элемента массивов! А в файл пишешь данные из массивов выбрав нулевой элемент! Ind = 0!!!

Можно поподробней?

Дмитрий написал(а):

Курс валюты последний вариант отлично подойдет...таким же макаром с использованием XML парсера.

Спасибо.

0

57

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

Можно поподробней?

Код:
For a = 0 To N
    Debug "давление " + PRESSUREmin(a)+ " - "+ PRESSUREmax(a) +" мм.рт.ст.,"
    Debug "ветер "+direction(a)+","+" "+WINDmin(a)+" - "+WINDmax(a) +"m\c,"
    Debug "относительная влажность воздуха " + RELWETmin(a) + " - "+ RELWETmax(a) +" %"
    Debug "температура "+TEMPERATUREmin(a)+" - "+ TEMPERATUREmax(a) +"°C" + cloudiness(a) + ", " + precipitation(a)
    Debug "Element:"+Str(a)
  Next a

посмотри; где Element: = 0 все значения массивов пусты!

0

58

Возможно я туплю, но ни чего не понял. :dontknow:

0

59

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

Возможно я туплю, но ни чего не понял.

А что тут понимать то?
У меня в программе Ind - это параметр вызова процедуры и он принимает значения от 1 до 3.
В твоем коде Ind ни как не определен и по умолчанию=0, потому нет значений в твоем файле.
Или определи явно Ind или создай запись в файл отдельной процедурой с параметром и вызывай так же как и ShowGis:

Код:
;
; ------------------------------------------------------------
;     Парсинг XML кода возвращаемого с ресурса Gismeteo.ru
;  
;
;    (c) 2009 - kvitaliy
;
; ------------------------------------------------------------

;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Text_0
  #Image_1
  #Text_2
  #Text_3
  #Text_4
  #Text_5
  #Text_6
  #Text_7
  #Text_8
  #ComboBox_0
  #ButtonImage_1
  #ButtonImage_2
  #ButtonImage_3
EndEnumeration
;}
UsePNGImageDecoder()
#XML        = 0
Global Sity$
Global SityNew$
Global N=0
Global G=1
Global Dim DataDay.s(4)
Global Dim cloudiness.s(4)
Global Dim precipitation.s(4)
Global Dim PRESSUREmin.s(4)
Global Dim PRESSUREmax.s(4)
Global Dim TEMPERATUREmin.s(4)
Global Dim TEMPERATUREmax.s(4)
Global Dim HEATmin.s(4)
Global Dim HEATmax.s(4)
Global Dim WINDmin.s(4)
Global Dim WINDmax.s(4)
Global Dim RELWETmin.s(4)
Global Dim RELWETmax.s(4)
Global Dim direction.s(4)

;{ Fonts
Enumeration
  #Font_Text_0
  #Font_Text_6
  #Font_Text_8
EndEnumeration
;}
;{ Images
Enumeration
  #Image_Image_1
  #Image_ButtonImage_1
  #Image_ButtonImage_2
  #Image_ButtonImage_3
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}
Procedure GisMet_XML_Data(*CurrentNode, CurrentSublevel)
  
  If XMLNodeType(*CurrentNode) = #PB_XML_Normal
      
    If  GetXMLNodeName(*CurrentNode) = "FORECAST": N+1:EndIf
         
    If ExamineXMLAttributes(*CurrentNode)
      While NextXMLAttribute(*CurrentNode)
           Select XMLAttributeName(*CurrentNode)
           Case "sname"
             weekday$=XMLAttributeValue(*CurrentNode)
              
           Case "day"
               day$=XMLAttributeValue(*CurrentNode)
           Case "month"
                month$=XMLAttributeValue(*CurrentNode)
           Case "year"
                year$=XMLAttributeValue(*CurrentNode)
           Case "hour"
                hour$=XMLAttributeValue(*CurrentNode)
                
           Case "weekday"
              Select XMLAttributeValue(*CurrentNode)
                              
                 Case "1"
                  weekday$= " Воскресенье"
                 Case "2"
                  weekday$= " Понедельник"
                 Case "3"
                 weekday$= "  Вторник"
                 Case "4" 
                 weekday$=" Среда"
                 Case "5"
                 weekday$=" Четверг"
                 Case "6"
                 weekday$= " Пятница"
                 Case "7"
                 weekday$= " Суббота"
              EndSelect   
              dataProg$=weekday$+", "+ day$ + "." + month$ +"." + year$ + " На " + hour$+ "ч." 
                DataDay(N)=dataProg$
                
                
           Case "cloudiness"; Облачность
             Select XMLAttributeValue(*CurrentNode)
                Case "0"
                cloudiness(N)= "Ясно"
                Case "1"
                cloudiness(N)= "Малооблачно"
                Case "2"
                cloudiness(N)= "Oблачно"
                Case "3"
                cloudiness(N)= "Пасмурно"
              EndSelect
                                  
            Case "precipitation" ; Осадки
               Select XMLAttributeValue(*CurrentNode)
                Case "4"
                precipitation(N)= "Дождь"
                Case "5"
                precipitation(N)= "Ливень"
                Case "6","7"
                precipitation(N)= "Снег"
                Case "8"
                precipitation(N)= "Гроза"
                Case "9"
                precipitation(N)= "Нет данных"
                Case "10" 
                precipitation(N)= "Без осадков"
               EndSelect  
               ;Debug cloudiness(N) + ", " + precipitation(N)
             Case "min"
               Select GetXMLNodeName(*CurrentNode) 
                Case "PRESSURE"
                PRESSUREmin(N) = XMLAttributeValue(*CurrentNode)
                Case "TEMPERATURE"
                TEMPERATUREmin(N) = XMLAttributeValue(*CurrentNode)
                Case "HEAT"
                HEATmin(N) = XMLAttributeValue(*CurrentNode)
                Case "WIND"
                WINDmin(N) = XMLAttributeValue(*CurrentNode)
                Case "RELWET"
                RELWETmin(N) = XMLAttributeValue(*CurrentNode)
                
                EndSelect
              Case "max"
               Select GetXMLNodeName(*CurrentNode) 
                Case "PRESSURE"
                PRESSUREmax(N) = XMLAttributeValue(*CurrentNode)
                Case "TEMPERATURE"
                TEMPERATUREmax(N) = XMLAttributeValue(*CurrentNode)
                Case "HEAT"
                HEATmax(N) = XMLAttributeValue(*CurrentNode)
                Case "WIND"
                WINDmax(N) = XMLAttributeValue(*CurrentNode)
                Case "RELWET"
                RELWETmax(N) = XMLAttributeValue(*CurrentNode)
                
                EndSelect
                                
              Case "direction"
                Select XMLAttributeValue(*CurrentNode)
                 Case "0"
                 direction(N) = "северный"
                 Case "1"
                 direction(N) = "северо-восточный"
                 Case "2"
                 direction(N) = "восточный"
                 Case "3"
                 direction(N) = "юго-восточный"
                 Case "4"
                 direction(N) = "южный"
                 Case "5"
                 direction(N) = "юго-западный"
                 Case "6"
                 direction(N) = "западный"
                 Case "7"
                 direction(N) = "северо-западный"
                EndSelect

           EndSelect
        
      Wend
    EndIf
    ;    
    *ChildNode = ChildXMLNode(*CurrentNode)
    
    While *ChildNode <> 0
         GisMet_XML_Data(*ChildNode, CurrentSublevel+1)      
      *ChildNode = NextXMLNode(*ChildNode)
    Wend        
  
  EndIf

 
EndProcedure
Procedure FileGis(Ind.i)
    If CreateFile(1, "Text.txt")         ; we create a new text file...

      WriteStringN(1, "В городе " + URLDecoder(Sity$) +" "+ day$ + "." + month$ +"." + year$ + ", " + weekday$ +","+ " на " + hour$+ "ч. " + "прогнозируется:") 
      WriteStringN(1, "давление " + PRESSUREmin(Ind) + " - "+ PRESSUREmax(Ind) +" мм.рт.ст.,")
      WriteStringN(1, "ветер "+direction(Ind)+","+" "+WINDmin(Ind)+" - "+WINDmax(Ind) +"m\c,") 
      WriteStringN(1, "относительная влажность воздуха " + RELWETmin(Ind) + " - "+ RELWETmax(Ind) +" %")
      WriteStringN(1, "температура "+TEMPERATUREmin(Ind)+" - "+ TEMPERATUREmax(Ind) +"°C" + cloudiness(Ind) + ", " + precipitation(Ind)) 

    CloseFile(1)                       ; close the previously opened file and store the written data this way
  Else
    MessageRequester("Information","Can't create the file!")
  EndIf
EndProcedure

Procedure ShowGis(Ind.i)
      ;- вывод на печать
;  Debug "Комфортность: " + HEATmin(i)+"-"+ HEATmax(i) +"°C"
      
      SetGadgetText(#Text_0,URLDecoder(Sity$))
      SetGadgetText(#Text_2,"Давление: "     + PRESSUREmin(Ind) + "..."+ PRESSUREmax(Ind) +" мм.рт.ст.")
      SetGadgetText(#Text_3,"Ветер "+direction(Ind))
      SetGadgetText(#Text_4,WINDmin(Ind)+"..."+WINDmax(Ind) +"m\c")
      SetGadgetText(#Text_5,"Влажность: "    + RELWETmin(Ind) + "..."+ RELWETmax(Ind) +" %")
      SetGadgetText(#Text_6,TEMPERATUREmin(Ind)+"..."+ TEMPERATUREmax(Ind) +"°C")
      SetGadgetText(#Text_8,DataDay(Ind))
      SetGadgetText(#Text_7,cloudiness(Ind) + ", " + precipitation(Ind))
      Select precipitation(Ind)
       Case "Без осадков"
        Select cloudiness(Ind)
         Case "Ясно":
         LoadImage(0, "Pogoda\pogoda20.png")
         Case "Малооблачно":
         LoadImage(0, "Pogoda\pogoda9.png")
         Case "Oблачно":
         LoadImage(0, "Pogoda\pogoda2.png")
         Case "Пасмурно":
         LoadImage(0, "Pogoda\pogoda24.png")
        EndSelect
       Case "Дождь"
       LoadImage(0, "Pogoda\pogoda14.png")
       Case "Ливень"
       LoadImage(0, "Pogoda\pogoda13.png")
       Case "Снег"
       LoadImage(0, "Pogoda\pogoda19.png")
       Case "Гроза"
       LoadImage(0, "Pogoda\pogoda23.png")
       EndSelect
       SetGadgetState(#Image_1, ImageID(0)) 
    
 EndProcedure
 
InitNetwork()
SityNew$="27612"; "29838"; - Барнаул
newSity:
  Filename$ = "gis.xml";
  
  ;If ReceiveHTTPFile("http://informer.gismeteo.ru/xml/"+SityNew$+"_1.xml", Filename$)
    ;Debug "Прогноз загружен"
  
If FileSize(FileName$) > 0 

  If LoadXML(#XML, FileName$)

    If XMLStatus(#XML) <> #PB_XML_Success
      Message$ = "Error in the XML file:" + Chr(13)
      Message$ + "Message: " + XMLError(#XML) + Chr(13)
      Message$ + "Line: " + Str(XMLErrorLine(#XML)) + "   Character: " + Str(XMLErrorPosition(#XML))
      MessageRequester("Error", Message$)
    EndIf
     *MainNode = MainXMLNode(#XML)      
      If *MainNode
        GisMet_XML_Data(*MainNode, 0)
      EndIf
      



  If OpenWindow(#Window_0, 436, 47, 400, 400, "Прогноз погоды на сутки", #PB_Window_SystemMenu|#PB_Window_TitleBar)
    
      TextGadget(#Text_0, 40, 5, 250, 30, "город", #PB_Text_Center)
      ImageGadget(#Image_1, 5, 95, 155, 160, 0)
      TextGadget(#Text_2, 190, 210, 200, 25, "Давление", #PB_Text_Center)
      TextGadget(#Text_3, 185, 105, 200, 25, "направление ветра", #PB_Text_Center)
      TextGadget(#Text_4, 185, 135, 200, 25, "Скорость", #PB_Text_Center)
      TextGadget(#Text_5, 185, 165, 200, 25, "Влажность", #PB_Text_Center)
      TextGadget(#Text_6, 85, 265, 210, 50, "Температура", #PB_Text_Center)
      TextGadget(#Text_7, 85, 315, 210, 50, "атмосфера", #PB_Text_Center)
      TextGadget(#Text_8, 5, 40, 250, 30, "число", #PB_Text_Center)
      ComboBoxGadget(#ComboBox_0, 85, 370, 210, 20): HideGadget(#ComboBox_0,1)
      ButtonImageGadget(#ButtonImage_1, 10, 360, 45, 30, CatchImage(#Image_ButtonImage_1, ?Image_ButtonImage_1))
      ButtonImageGadget(#ButtonImage_2, 340, 360, 45, 30, CatchImage(#Image_ButtonImage_2, ?Image_ButtonImage_2))
      ButtonImageGadget(#ButtonImage_3, 360, 10, 35, 35, CatchImage(#Image_ButtonImage_3, ?Image_ButtonImage_3))
      ; Gadget Fonts
      SetGadgetFont(#Text_0, LoadFont(#Font_Text_0, "Microsoft Sans Serif", 14, 272))
      SetGadgetFont(#Text_6, LoadFont(#Font_Text_6, "Microsoft Sans Serif", 20, 272))
      SetGadgetFont(#Text_8, LoadFont(#Font_Text_8, "Microsoft Sans Serif", 12, 784))
      SetGadgetFont(#Text_7, LoadFont(#Font_Text_8, "Microsoft Sans Serif", 12, 784))
      GadgetToolTip(#ButtonImage_1, "Обновить данные")
      GadgetToolTip(#ButtonImage_2, "Дальше...")
      GadgetToolTip(#ButtonImage_3, "Найти другой город")
    
        
  EndIf
  ShowGis(1)
  FileGis(1)
  
  
If ReadFile(0, "GismeteoCodSity.txt")   
    While Eof(0) = 0           
         AddGadgetItem(#ComboBox_0, -1,ReadString(0))
    Wend
    CloseFile(0)               
  Else
    MessageRequester("Information","Нет файла - справочника")
  EndIf  
  

      
;{- Event loop
Repeat
  Event = WaitWindowEvent()
  Select Event
    ; ///////////////////
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #Text_0
      ElseIf EventGadget = #ButtonImage_3
       HideGadget(#ComboBox_0,0)
      ElseIf EventGadget = #ComboBox_0
      SityNew$= Left(GetGadgetText(#ComboBox_0), 5)
      If Len(SityNew$)
        HideGadget(#ComboBox_0,1)
        N=0
        Goto newSity
      EndIf
        
      ElseIf EventGadget = #ButtonImage_1
      N=0
      Goto newSity
      ElseIf EventGadget = #ButtonImage_2
         If G<=3
           G+1
           ShowGis(G)
         Else
           G=1
           ShowGis(G)
         EndIf
      
      EndIf
      
      
    ; ////////////////////////
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
ForEver
Else
    MessageRequester("Error", "The file cannot be opened.")
  EndIf
 EndIf
  
; Else
;     ;Debug "Не загружен"
;     MessageRequester("Information","Нет возможности загрузить данные из Интернет!")
;   EndIf

;{ Included Images
DataSection
  Image_ButtonImage_1:
  IncludeBinary "Pogoda\refresh.ico"
  Image_ButtonImage_2:
  IncludeBinary "Pogoda\right.ico"
  Image_ButtonImage_3:
  IncludeBinary "Pogoda\0031 - Start Find.ico"
EndDataSection
;}


;}

Отредактировано ВиниПур (07.06.2011 22:17:47)

0

60

Точно ТУПЛЮ! Спасибо!

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Светодиодная матрица - МОДЖЕТ (антигаджет) на Пурике