PureBasic - форум

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

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


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


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

Сообщений 61 страница 90 из 446

61

Привет!
Как в файле можно узнать номер строки? В справке не нашел.

Отредактировано max (08.06.2011 19:23:26)

0

62

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

Как в файле можно узнать номер строки?

Код:
CreateFile(0,"C:/Count.txt")
For a = 0 To 150

WriteStringN(0,"This is line number "+Str(a))
Next
CloseFile(0)
ReadFile(0,"C:/Count.txt")
x = 0
While Eof(0) = 0
  If Right(ReadString(0),2) = "10"
    Debug "Line:"+Str(x)
  EndIf
  x+1
   Wend 
CloseFile(0)

Ну как то так...Можно еще с FileSeek(#File,NewPosition) поиграться!

Отредактировано Дмитрий (08.06.2011 19:51:53)

0

63

Спасибо. Буду разбираться.

0

64

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

Ну как то так

Это если строки явно пронумерованы.

0

65

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

Это если строки явно пронумерованы.

это наглядный пример =)

0

66

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

Это если строки явно пронумерованы.

А как так сделать?

0

67

какой файл читать собственно нужно!? Содержимое в студию

0

68

Файл - это прогоз погоды.

Код:
;
; ------------------------------------------------------------
;     Парсинг 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"
             Sity$=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$= day$ + "." + month$ +"." + year$+"г., "+weekday$+", на " + hour$+ "ч. " 
                DataDay(N)=dataProg$
                
                
           Case "cloudiness"; Облачность
             Select XMLAttributeValue(*CurrentNode)
                Case "0"
                cloudiness(N)= "ясно"
                Case "1"
                cloudiness(N)= "малооблачно"
                Case "2"
                cloudiness(N)= "облачно"
                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, "Прогноз.txt")         ; we create a new text file...

      WriteStringN(1, "В городе " + URLDecoder(Sity$)+" "+ DataDay(Ind)+ "прогнозируется:") 
      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 "облачно":
         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)
           FileGis(G)
         Else
           G=1
           ShowGis(G)
           FileGis(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

69

прогноз погоды в XML или текстовый файл который создается!? Если текстовый файл то лучше создавать ini используя Preferences и  подсчет строк отпадет как таковой

0

70

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

0

71

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

А как так сделать?

Не надо ни чего нумеровать - там же есть счетчик строк, по нему и ориентироваться

Код:
ReadFile(0,"C:/Count.txt")
x = 1

While Eof(0) = 0
  stroka$=ReadString(0)
  If  x = 10 ; ищем 10-ю строку
    Debug "Line:"+Str(x) + stroka$
  EndIf
  x+1 ; это счетчиксчитанных строк!
   Wend 
CloseFile(0)

0

72

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

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

Согласен.

0

73

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

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

Согласен.

Не подскажите как?

Отредактировано max (09.06.2011 15:50:40)

0

74

А зачем собственно тебе что то куда то записывать? Погода в xml загружается , выводятся на форму данные. Смысл что то переписывать?

0

75

Дело в том, что после получения прогноза мне надо будет его вывести в EditorGadget.

0

76

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

Дело в том, что после получения прогноза мне надо будет его вывести в EditorGadget.

o.O
В исходной проге информация вводится в TextGadget, а какая разница в выводе этого же текста в  EditorGadget???

0

77

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

какая разница в выводе этого же текста в  EditorGadget???

На проге с погодой я пытаюсь разобраться, как это все работает. Основная прога в первом посте.

0

78

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

На проге с погодой я пытаюсь разобраться, как это все работает. Основная прога в первом посте.

Под исходной наверное подразумевалась прога получения данных о погоде.
Данные в TextGadget и EditorGadget записываются одной и той же функцией - SetGadgetText.

0

79

Понял, спасибо.

0

80

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

Такой вопрос: можно ли в строку меню вставить TextGadget как на картинке?

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

В панель инстументов можно, а в меню не пробовал.

Что-то у меня не получается. :canthearyou: Код.

0

81

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

Что-то у меня не получается.

Код:
If OpenWindow(0, 100, 200, 195, 260, "ToolBar example", #PB_Window_SystemMenu | #PB_Window_SizeGadget)
  ContainerGadget(23,0,0,100,30)
  If CreateToolBar(0, GadgetID(23))
    ToolBarImageButton(3, LoadImage(0, "Save.ico"))
    ToolBarToolTip(0, 3, "Добавить в автозагрузку")
    ToolBarSeparator()
    ToolBarImageButton(4, LoadImage(0, "stop.ico"))
    ToolBarToolTip(0, 4, "Удалить из автозагрузки")
    ToolBarSeparator()
    ToolBarImageButton(5, LoadImage(0, "help32.ico"))
    ToolBarToolTip(0, 5, "О программе")
    ToolBarSeparator()
  EndIf
  CloseGadgetList()
  TextGadget(55, 100, 5, 120 ,15,"MODGET ")
  Repeat
    Event = WaitWindowEvent()
    Select Event    
      Case #PB_Event_Menu
        MessageRequester("Information", "ToolBar or Menu ID: "+Str(EventMenu()), 0)
      Case #PB_Event_CloseWindow
        Quit = 1 
    EndSelect
  Until Quit = 1 
EndIf
End

0

82

Или так:

Код:
Procedure ToolBarGadgetOpen(toolbar, offsetX) 
  Protected t.TBBUTTON, r.RECT, pos.l, ret.l 
  pos = SendMessage_(ToolBarID(toolbar), #TB_BUTTONCOUNT,  0, 0)  
  ret = SendMessage_(ToolBarID(toolbar), #TB_GETBUTTON,    pos, @t) : t\iBitmap = offsetX
  ret = SendMessage_(ToolBarID(toolbar), #TB_DELETEBUTTON, pos, 0) 
  ret = SendMessage_(ToolBarID(toolbar), #TB_INSERTBUTTON, pos, t)
  ret = SendMessage_(ToolBarID(toolbar), #TB_GETITEMRECT,  pos, @r) 
  UseGadgetList(ToolBarID(toolbar)) 
  ProcedureReturn r\left 
EndProcedure 

Procedure ToolBarGadgetClose(toolbar) 
  UseGadgetList(GetParent_(ToolBarID(toolbar))) 
EndProcedure


If OpenWindow(0, 100, 200, 195, 260, "ToolBar example", #PB_Window_SystemMenu | #PB_Window_SizeGadget)
  If CreateToolBar(0, WindowID(0))
    ToolBarImageButton(3, LoadImage(0, "Save.ico"))
    ToolBarToolTip(0, 3, "Добавить в автозагрузку")
    ToolBarSeparator()
    ToolBarImageButton(4, LoadImage(0, "stop.ico"))
    ToolBarToolTip(0, 4, "Удалить из автозагрузки")
    ToolBarSeparator()
    ToolBarImageButton(5, LoadImage(0, "help32.ico"))
    ToolBarToolTip(0, 5, "О программе")
    ToolBarSeparator()
    
    x=ToolBarGadgetOpen(0, 120) 
    TextGadget(55, x+2, 5, 120 ,15,"MODGET ")
    ToolBarGadgetClose(0)
  EndIf
  
  Repeat
    Event = WaitWindowEvent()
    Select Event    
      Case #PB_Event_Menu
        MessageRequester("Information", "ToolBar or Menu ID: "+Str(EventMenu()), 0)
      Case #PB_Event_CloseWindow
        Break 
    EndSelect
  ForEver
EndIf
End

0

83

Спасибо! Оба варианта работают прекрасно.

0

84

Ну как успехи?
Получается?

0

85

Привет!

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

Ну как успехи?

По маленьку.

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

Данные в TextGadget и EditorGadget записываются одной и той же функцией - SetGadgetText.

Так я могу записать только одну строчку. А как несколько?

Пытаюсь параллельно сделать мультиязычное меню на основе этого: multilang.
Текст меняется без проблем. А вот с остальным возникают проблемы. Гляньте, пожалуйста, код.

Спасибо.

Отредактировано max (14.06.2011 19:55:18)

0

86

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

Так я могу записать только одну строчку. А как несколько?

Код:
Enumeration
 #Window_0
 #Editor
 #Button
 #Text
EndEnumeration

;#CRLF$ -Перенос строки

OpenWindow(#Window_0,0,0,420,200,"Окно",#WS_OVERLAPPEDWINDOW|#PB_Window_ScreenCentered) 
 EditorGadget(#Editor,5,5,200,150)
 TextGadget(#Text,210,5,205,150,"",#PB_Text_Border) 
 
ButtonGadget(#Button,20,170,110,20,"Добавить текст")
Repeat
Event =  WaitWindowEvent() 

  Select Event
  
   Case #PB_Event_Gadget
    Select EventGadget()
     Case #Button
       SetGadgetText(#Editor, "Строка 1" + #CRLF$ + "Строка 2" + #CRLF$ + "Строка 3")
       SetGadgetText(#Text, "Строка 1" + #CRLF$ + "Строка 2" + #CRLF$ + "Строка 3")
   EndSelect             
  EndSelect 
   
If Event = #PB_Event_CloseWindow
 Break         
EndIf

ForEver

0

87

Спасибо. Попробую приспособить.

0

88

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

А вот с остальным возникают проблемы.

С чем именно?
У меня прога вылетела в процедуре LoadText из-за того что происходит изменение текста в еще не созданных гаджетах.
Если перенести вызов LoadText ниже по коду и расположить после создания гаджетов (перед функцией HideWindow, примерно 440 строка), то программа нормально стартует.
Может есть еще что-то, что работает не так, нужно уточнить.

0

89

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

примерно 440 строка

Спасибо. Теперь прога нормально стартует, но не получается добавить PanelGadget. Без нее SetGadgetText работает, а как добавлю, то на каждом SetGadgetText выскакивает ошибка.  o.O  В чем может быть проблема?

0

90

В программе ведь уже есть PanelGadget и все нормально работает.

0


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