PureBasic - форум

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

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


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


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

Сообщений 391 страница 420 из 446

391

Спасибо, буду пробовать.

0

392

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

Есть еще какие-нибудь идеи?

Если я правильно понял суть задачи, нужно просто в текущей директории проанализировать все файлы с расширением *.lng, по их именам и заполнить комбобокс. Так паттерны заполняются - "*.patt".

0

393

Вся фишка в том, что это было релизовано, но я это все заремил и благопалучно забыл. :blush:

0

394

Всем привет.
Тоеой вопрос: язык теперь будет загружатся так

Код:
If GetGadgetState(20)=0
  LoadText("rus.lng") 
  Else
LoadText(GetGadgetState(20))
EndIf

и

Код:
 Case 20
LoadText(GetGadgetState(20))

0

395

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

вопрос

А где вопрос?

0

396

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

А где вопрос?

А это и был как бы вопрос.
Сейчас текст загружается так:
перед главным циклом такие строки

Код:
If GetGadgetState(20)=0
  LoadText("rus.lng") 
  Else
  LoadText("eng.lng")
EndIf

а в событиях компонентов такие

Код:
Case 20
          If EventType()=1 
          Select GetGadgetState(20)
            Case 0
              LoadText("rus.lng")
            Case 1
              LoadText("eng.lng")
          EndSelect
          EndIf

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

Код:
If GetGadgetState(20)=0
  LoadText("rus.lng") 
  Else
  LoadText(GetGadgetState(20))
EndIf

а в событиях компонентов такие

Код:
Case 20
          If EventType()=1 
LoadText(GetGadgetState(20))
          EndIf

Отредактировано max (26.01.2012 17:07:10)

0

397

В каком виде хранится текст в выпадающем списке? В виде имен файлов?

0

398

Да, в виде названия языка.

0

399

Тогда так:

Код:
LoadText(GetGadgetText(20))

0

400

Так не работает.

0

401

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

Так не работает.

А что тогда в списке?
Покажи код заполнения выпадающего списка.

0

402

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

Покажи код заполнения выпадающего списка.

Код:
   ComboBoxGadget(20, 260, 238, 75, 20)  ; Language select
   GadgetToolTip(20, "")
   ;AddGadgetItem(20,-1,"Русский")
   ;AddGadgetItem(20,-1,"English")
   ;SetGadgetState(20,0)
          
;Получает полный путь запущенного приложения      
Result$ = ProgramFilename()
;Извлекает путь из полного пути. Например, если полный путь "C:\PureBasic\PB.exe", результат будет "C:\PureBasic\". 
Path$ = GetPathPart(Result$)
;Debug Path$
; Просмотр всех элементов директории запущенного приложения  (без поддиректорий)
Directory$ = Path$ 
  If ExamineDirectory(0, Directory$, "*.lng")  
  m=0
    While NextDirectoryEntry(0)
      AddGadgetItem(20, -1, Left(DirectoryEntryName(0), Len(DirectoryEntryName(0))-4))   
      lang.s=Language + ".lng"
   
      If DirectoryEntryName(0) = lang
      SetGadgetState(20, m) 
      EndIf
     m=m+1 
    Wend
    FinishDirectory(0)
  EndIf

0

403

Тогда так:

Код:
LoadText(GetGadgetText(20)+".lng")

0

404

Спасибо. Так работает. Есть еще вопрос: не могу добится перевода "Случайный". Что можно сделать?

Код:
Global rand.s="Случайный"

Procedure Read_sdulist()
          ; ------- Чтение списка эффектов ------------------------
  #FILE_SDU=1
If ReadFile(#FILE_SDU, sdufile)
  While Eof(#FILE_SDU)=#False
    filesdustr.s=ReadString(#FILE_SDU)
    If filesdustr=Language
      AddGadgetItem(25, -1, ReadString(#FILE_SDU))
    EndIf
  Wend
  AddGadgetItem(25, -1, rand)
  CloseFile(#FILE_SDU)
EndIf
EndProcedure

0

405

Нужно перемешать строки в случайном порядке?

0

406

Нет. Надо чтобы в ComboBoxGadget при смене языка менялось название эффекта "Случайный/Random"

0

407

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

Надо чтобы в ComboBoxGadget при смене языка менялось название эффекта "Случайный/Random"

В той версии что я скачал 23 числа, в выпадающем списке меняется Случайный на Random и обратно. :dontknow:  :question:

0

408

А в новой - нет.

0

409

Вспоминай что делал такого, что повлекло за собой этот баг.
Нужно изменять код осторожно чтобы не добавлять ошибок, которых не было.

0

410

В том то и дело, что я ни чего не менял. Это началось с v_2_14_2. В v.2.13 загрузка эффекта организована так:

Код:
        ComboBoxGadget(25, 90, 208, 80, 20)
        GadgetToolTip(25, el22)
        ; ------- Чтение списка эффектов ------------------------
  #FILE_SDU=1
If ReadFile(#FILE_SDU,"effect.sdu")
  While Eof(#FILE_SDU)=#False
    filesdustr.s=ReadString(#FILE_SDU)
    If filesdustr=Language
      AddGadgetItem(25, -1, ReadString(#FILE_SDU))
    EndIf
  Wend
  AddGadgetItem(25, -1, el16)
  CloseFile(#FILE_SDU)
EndIf

а в v_2_14_2 этот код вынесен в

Код:
Procedure Read_sdulist()
          ; ------- Чтение списка эффектов ------------------------
  #FILE_SDU=1
If ReadFile(#FILE_SDU, sdufile)
  While Eof(#FILE_SDU)=#False
    filesdustr.s=ReadString(#FILE_SDU)
    If filesdustr=Language
      AddGadgetItem(25, -1, ReadString(#FILE_SDU))
    EndIf
  Wend
  AddGadgetItem(25, -1, rand)
  CloseFile(#FILE_SDU)
EndIf
EndProcedure

Вот вроде и все.

0

411

Найди в процедуре LoadText() строку ClosePreferences() и сразу после ее добавь эти строки.

Код:
  Language=GetGadgetText(20)
  ClearGadgetItems(25)
  Read_sdulist()

+1

412

Спасибо. То, что доктор прописал. :cool:

0

413

Всем привет!
Стоит задача: при нажатии кнопеи переменной присвоить значение 170, при повторном нажатии - 0. Делаю так:

Код:
Global charge.a
Код:
 Case 92
       If EventType()=1
          Select GetGadgetState(92)
            Case 0
              charge = 0
            Case 1 
              charge = 170 
         EndSelect         
       EndIf

Смотрю дебагером, переменная всегда равна нулю.
Если делаю так:

Код:
 Case 92
       If EventType()=1
          Select GetGadgetState(92)
            Case 0
              charge = 0
            Case 1 
              charge = 170 
         EndSelect   
Debug GetGadgetState(92)     
       EndIf

то дебагер показывает ноль, при нажатии - 1 и так далее, значит нажатие кнопки отрабатывается.
Что не так делаю?

0

414

Все, разобрался:

Код:
      Case 92
       If GetGadgetState(92)=1
              charge = 170
        Else
              charge = 0 
       EndIf

0

415

Привет!
Появилось несколько вопросов:
1. Каким образом можно сделать так, чтобы при нажатии кнопки переменной присваивалось одно значение, при отпускании - другое(кнопка не нажата, bat=0; нажали, bat=170; отпустили, bat=0 и так далее)?
2. Можно ли делать активные/неактивные кнопки? Если да, то где можно почитать?
3. Возможно ли посмотреть данные, которые отправляются в COM-порт? Желательно побайтно.

0

416

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

1. Каким образом можно сделать так, чтобы при нажатии кнопки переменной присваивалось одно значение, при отпускании - другое(кнопка не нажата, bat=0; нажали, bat=170; отпустили, bat=0 и так далее)?

Обычные кнопки не имеют такой функции. Зачем понадобилось? Возможно можно решить по другому.

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

2. Можно ли делать активные/неактивные кнопки? Если да, то где можно почитать?

http://purebasic.ru/manual.php?id=478&lng=rus

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

3. Возможно ли посмотреть данные, которые отправляются в COM-порт? Желательно побайтно.

Принимай побайтно функцией ReadSerialPortData() и смотри что приходит.

0

417

Спасибо.

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

Зачем понадобилось? Возможно можно решить по другому.

Очередной апгрейд "Pussy Cat" без поводка. Нужно при нажатой кнопке отправить в COM-порт число 170 деватнадцатым байтом

Код:
;Вывод данных на RS232
If flgRS232 =1
Dim d.a(21) 
*Datas=AllocateMemory(21) 
If *Datas 
For x = 1 To 18
  If usb(x) = 0
 d(x) = 0
  Else
 d (x)= 254    
  EndIf
Next x
d(19)=bat
;Debug d(19)
;d(19)=Int(GetGadgetState (66)) 
;d(20)=Int(GetGadgetState (67))

; Заполнение массива. 
  PokeS(*Datas, Chr(255)) 
  For i=1 To 18 
    PokeS(*Datas+i, Chr(d(i))) 
    Next i   
  WriteSerialPortData(1, *Datas, 21)   
  FreeMemory(*Datas) 
EndIf
EndIf
Код:
Case 92
              bat = 170

а при отпускании - 0.

Отредактировано max (29.03.2012 20:41:20)

0

418

Можно немного переделать этот пример. http://purebasic.info/phpBB2/viewtopic. … 2725#32725

Код:
  Procedure GetGadget(WindowID.l) 
    Protected cursorpos.POINT 
    GetCursorPos_(@cursorpos) 
    MapWindowPoints_(0, WindowID(WindowID), cursorpos, 1) 
    ProcedureReturn ChildWindowFromPoint_(WindowID(WindowID), cursorpos\x | cursorpos\y<<32) 
  EndProcedure 
   
   OpenWindow(0, 235, 169, 400, 113, "Window_0", #PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar) 
   TextGadget(0, 15, 10, 180, 25, "Label") 
   StringGadget(1, 225, 10, 150, 25, "Text") 
   ButtonGadget(2, 15, 65, 130, 25, "Button") 
   
 Repeat 
   Event = WaitWindowEvent() 
   Select Event 
     Case #WM_LBUTTONDOWN 
       If GetGadget(0)= GadgetID(0): Debug "Левый клик на TextGadget":EndIf 
       If GetGadget(0)= GadgetID(1): Debug "Левый клик на StringGadget":EndIf 
       If GetGadget(0)= GadgetID(2): Debug "Левый клик на ButtonGadget":EndIf 
     Case #PB_Event_Gadget 
       EventGadget = EventGadget() 
       EventType = EventType() 
       If EventGadget = 1 
         Debug "Прочие события String " 
       ElseIf EventGadget = 2 
         Debug "Прочие события Button" 
       EndIf 
   EndSelect 
 Until Event= #PB_Event_CloseWindow

0

419

Спасибо. Буду пробовать.
А что можете подсказать на счет отправки в порт? Если отправлять 18 байтом, то данные уходят в порт, если 19 - то нет. Нужно именно 19.

0

420

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

Если отправлять 18 байтом, то данные уходят в порт, если 19 - то нет. Нужно именно 19.

Что вообще не отправляются или последний байт не передается?

0


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