PureBasic - форум

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

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


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


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

Сообщений 1 страница 30 из 446

1

Пытаюсь перевести на пурик вот это. За основу взял это.
Пока сделал только оболочку программы и некоторые функции, а дальше я нуб.
Если кому-то это интересно и есть свободное время, помогите доделать.
В архиве есть исходные коды статей и того, что я сделал.
Заранее спасибо!

0

2

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

Текст помещается в редактор функцией SetGadgetText.

А как поместить туда текстовый файл?

0

3

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

А как поместить туда текстовый файл?

файл туда поместить нелюзя, нужно считать из файла текст и отправить в EditorGadget!

Код:
Procedure.s ReadText(File$)
    If ReadFile(0, File$) 
      Size = Lof(0); размер файла в байтах
      *String = AllocateMemory(Size); выделяем область памяти 
      If *String 
        ReadData(0, *String , Size); записываем строку в область памяти
      EndIf
      CloseFile(0)
      ProcedureReturn PeekS(*String)
      FreeMemory(*String)
    EndIf
EndProcedure

Отредактировано Дмитрий (02.06.2011 22:06:06)

0

4

Дмитрий выложил код Вопросы новичка (продолжение…)#p3642

0

5

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

нужно считать из файла текст

Лучше вот так, чтобы можно было бы освободить память.

Код:
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

0

6

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

ProcedureReturn PeekS(*String)
      FreeMemory(*String)

Так тоже работает!  :dontknow:

0

7

Попробуй так. Если работает, то должно появится окошко с сообщением. Появится ли оно?

Код:
ProcedureReturn PeekS(*String)
      FreeMemory(*String)
      MessageRequester("", "После ProcedureReturn код не выполняется", #MB_OK)

0

8

Спасибо! Завтра попробую. Второй час ночи.

0

9

Нет  :unsure:

0

10

Привет!
Как перевести на пурик такой код:

Код:
Dim col, row
        For col = 0 To 7
            For row = 0 To 7
                st_led = (8 * row + col)
                x(st_led) = xc + (col * 15)
                y(st_led) = yc + (row * 15)
            Next
        Next

Заранее спасибо!

0

11

Первую строку Dim col, row исключаем, т. к. не нужна, а остальное будет без изменений.
Хотя по моему, скобки в математических выражениях, лишние, но можно оставить как есть.

0

12

На строке x(st_led) вылетает ошибка: Не Функция...

0

13

Это или массив или процедура, хз, надо исходник посмотреть.

0

14

Это массивы.

Код:
    Dim x(63) As Integer    'массив координат светодиодов по X
    Dim y(63) As Integer    'массив координат светодиодов по Y

На пурике будет

Код:
Dim x(63) ;массив координат светодиодов по X
Dim y(63) ;массив координат светодиодов по Y

0

15

Код:
#xc = 15 ; начало по X
#yc = 15 ; начало по Y

Dim x(63) ; массив координат светодиодов по X
Dim y(63) ; массив координат светодиодов по Y

For col = 0 To 7
  For row = 0 To 7
    st_led = (8 * row + col)
    x(st_led) = #xc + (col * 15)
    y(st_led) = #yc + (row * 15)
  Next
Next

0

16

У меня окно вылетает.

Код:
#xc = 15 ; начало по X
#yc = 15 ; начало по Y

Dim x(63) ; массив координат светодиодов по X
Dim y(63) ; массив координат светодиодов по Y

If OpenWindow(0, 0, 0, 277, 260, "О", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)


For col = 0 To 7
  For row = 0 To 7
    st_led = (8 * row + col)
    x(st_led) = #xc + (col * 15)
    y(st_led) = #yc + (row * 15)
  Next
Next

EndIf

0

17

А так?

Код:
#xc = 15 ; начало по X
#yc = 15 ; начало по Y

Dim x(63) ; массив координат светодиодов по X
Dim y(63) ; массив координат светодиодов по Y

If OpenWindow(0, 0, 0, 277, 260, "О", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  
  For col = 0 To 7
    For row = 0 To 7
      st_led = (8 * row + col)
      x(st_led) = #xc + (col * 15)
      y(st_led) = #yc + (row * 15)
    Next
  Next
  
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
  
EndIf

0

18

Точно.

0

19

Что-то у меня ничего не отображается.

Код:
#xc = 15 ; начало по X
#yc = 15 ; начало по Y

Dim x(63) ; массив координат светодиодов по X
Dim y(63) ; массив координат светодиодов по Y

If OpenWindow(0, 0, 0, 160, 160, "О", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  LoadImage(80, "Фон.bmp")    ; change 2nd parameter to the path/filename of your image
  ImageGadget(80,  6, 6, 148, 148, ImageID(80)) 
  
  For col = 0 To 7
    For row = 0 To 7
      st_led = (8 * row + col)
      x(st_led) = #xc + (col * 15)
      y(st_led) = #yc + (row * 15)
    Next
  Next
  
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
  
EndIf

Должно быть так:

0

20

В коде нет рисования, а только заполнение массива.
Сейчас набросаю пример.

0

21

Создаю меню с помощью CreateMenu, все гаджеты в окне смещаются на 20 пикселей вниз. Такой вопрос: можно ли в строку меню вставить TextGadget как на картинке?

Отредактировано max (04.06.2011 16:38:01)

0

22

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

Вот пример:

Код:
Structure DrawInfo
  row.c[8]
EndStructure

CreateImage(0,148,148);

Procedure Draw_Image(*Infa.DrawInfo)
  
  If StartDrawing(ImageOutput(0))
    Box(0,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(210, 27, 45)
         Else
           Color = RGB(131, 137, 141)
         EndIf
         Circle(x, y, 5, Color)
       Next
     Next
    StopDrawing()
  EndIf
  
EndProcedure


Image.DrawInfo

If OpenWindow(0, 0, 0, 277, 260, "О", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  Image\row[0]=%11001100
  Image\row[1]=%00111100
  
  Image\row[6]=%01010101
  Image\row[7]=%10101010
  
  Draw_Image(@Image)
  ImageGadget(0,20,20,148,148,ImageID(0))
  
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
  
EndIf

0

23

Спасибо! :cool:

0

24

Вот эффект RANDOM.

Код:
Structure DrawInfo
  row.b[8]
EndStructure


CreateImage(0,148,148);

Procedure Draw_Image(*Infa.DrawInfo)
  
  If StartDrawing(ImageOutput(0))
    Box(0,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(210, 27, 45)
         Else
           Color = RGB(131, 137, 141)
         EndIf
         Circle(x, y, 5, Color)
       Next
     Next
    StopDrawing()
  EndIf
  SetGadgetState(0, ImageID(0))
EndProcedure

Procedure Timer1()
  ImageDraw.DrawInfo
  
  For i=0 To 7
    ImageDraw\row[i] = Random(255)
  Next i
  
  Draw_Image(@ImageDraw)
EndProcedure


Image.DrawInfo

If OpenWindow(0, 0, 0, 277, 260, "О", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  
  
  ImageGadget(0,20,20,148,148, 0)
  Draw_Image(@Image)
  
  SetTimer_(WindowID(0),2,100, @Timer1() )
  
  Repeat
    Event = WaitWindowEvent()
    
  Until Event = #PB_Event_CloseWindow
  
EndIf

0

25

:cool:

0

26

А как опрашивать OptionGadget? В справке не нашел.

0

27

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

А как опрашивать OptionGadget? В справке не нашел.

Код:
Result = GetGadgetState(#OptionGadget)

по идее так...

0

28

Что-то не как не могу разобраться как с помощью EditorGadget и ComboBoxGadget загружать текстовай файл.

0

29

В ComboBoxGadget имена файлов или что?

0

30

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

0


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