PureBasic - форум

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

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


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка (продолжение…)


Вопросы новичка (продолжение…)

Сообщений 571 страница 600 из 974

571

Спасибо, ВиниПур

Отредактировано Bandit (15.06.2011 20:09:42)

0

572

Мне необходимо сделать анимацию, для примера попробовал в видя стрелки

Код:
  If OpenWindow(0, 0, 0, 500, 500, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    
    Repeat
      
      n.d+0.1
      CreateImage(0, 500, 500)
      StartDrawing(ImageOutput(0))
      a=100*Cos(n)+200
      b=100*Sin(n)+200
      Sleep_(100)
      Line(200, 200, a-200, b-200, RGB(15, 51, 15))
      
      StopDrawing() 
      ImageGadget(0, 0, 0, 500, 500, ImageID(0))
    
    Until n=100
  EndIf

Но черный экранчик мигает, скорее всего сделано довольно не рационально, подскажите пожалуйста, как сделать более рационально?

0

573

Код:
Procedure Draw()
  Static n.d
  n.d+0.1
  If StartDrawing(ImageOutput(0))
    Box(0,0,500,500)
    a=100*Cos(n)+200
    b=100*Sin(n)+200
    Line(200, 200, a-200, b-200, RGB(15, 51, 15))
    StopDrawing()
    SetGadgetState(0, ImageID(0))
  EndIf
EndProcedure

CreateImage(0, 500, 500)

If OpenWindow(0, 0, 0, 500, 500, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered|#PB_Window_Invisible)
  ImageGadget(0, 0, 0, 500, 500, ImageID(0))
  Draw()
  HideWindow(0,0)
  SetTimer_(WindowID(0),2,100,@Draw())
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
EndIf

0

574

И будет зависать и моргать:
В главном цикле 1000 раз создаётся один и тот-же ImageGadget() и CreateImage()
их надо в данном варианте кода создать один раз. И вызывать StartDrawing() по таймеру.

0

575

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

И вызывать StartDrawing() по таймеру.

С таймером конечно правильнее, но всё же не так однозначно обязательно. Можно и без таймера обойтись при желании:

Код:
If OpenWindow(0, 0, 0, 500, 500, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CreateImage(0, 500, 500)
  ImageGadget(0, 0, 0, 500, 500, ImageID(0))
  Repeat
    
    Event = WaitWindowEvent(10)
      n.d+0.1
      StartDrawing(ImageOutput(0))
      Box(0,0,500,500)
      a=100*Cos(n)+200
      b=100*Sin(n)+200
      Sleep_(100)
      Line(200, 200, a-200, b-200, RGB(15, 51, 15))
      StopDrawing() 
      SetGadgetState(0, ImageID(0))
    
    
  Until Event = #PB_Event_CloseWindow
  EndIf

0

576

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

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

Зачем экономить на спичках?
Смотри, проведешь мышкой по окну (или возникнут другие события) и прорисовка начнёт выполнятся быстрее, а если попытаться перетащить окно за заголовок, так и вовсе прекратится!
С таймером этого не будет.
Одна строка не сильно усложнит программу, но избавит от нескольких глюков.

0

577

Вопрос не в экономии, а в многообразии решений на Пурике, некоторые из которых несомненно являются хуже других, но имеют место быть как вариант, который нельзя отбрасывать в силу его принципиальной работоспособности.
Можно ещё запустить отдельный поток или использовать встроенный таймер вместо API или придумать что то ещё. Вариантов море - ведь за это мы и любим Пурик?

0

578

Скажите пожалуйста, нет ли способа проконтролировать толщину линии LineXY? Я знаю что можно конечно и 2 линии рядом нарисовать, но меня интересует именно толщина линии.

0

579

Иван написал(а):

Скажите пожалуйста, нет ли способа проконтролировать толщину линии LineXY?

С помощью WinAPI можно сделать.
Здесь обсуждалось.

0

580

Спасибо, со всем этим я разобрался. Но вопрос про 2D графику еще остался. Всего один. Вот фрагмент программы - часов:

Код:
OpenWindow(0, 0, 0, 200, 200, "Часы", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
UseJPEGImageDecoder()
  
Repeat
houra.s=hour.s
mina.s=min.s
seka.s=sek.s
    
date.s=FormatDate("%hh:%ii:%ss", Date())
hour.s=Mid(date,1,2)
min.s=Mid(date,4,2)
sek.s=Mid(date,7,2)   
    
If Val(min)<>Val(mina) Or Val(sek)<>Val(seka) Or Val(houra)<>Val(hour)
If LoadImage(0, "фон22.jpg")
     
StartDrawing(ImageOutput(0))

Select Val(sek)

Case 0
LineXY(99,19,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(99-100)/3,100-(19-100)/3,RGB(181, 26, 19))
Case -1+2
LineXY(108,19,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(108-100)/3,100-(19-100)/3,RGB(181, 26, 19))
Case -1+3
LineXY(117,22,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(117-100)/3,100-(22-100)/3,RGB(181, 26, 19))
Case -1+4
LineXY(124,24,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(124-100)/3,100-(24-100)/3,RGB(181, 26, 19))
Case -1+5
LineXY(133,26,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(133-100)/3,100-(26-100)/3,RGB(181, 26, 19))
Case -1+6
LineXY(141,30,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(141-100)/3,100-(30-100)/3,RGB(181, 26, 19))
Case -1+7
LineXY(148,36,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(148-100)/3,100-(36-100)/3,RGB(181, 26, 19))
Case -1+8
LineXY(155,41,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(155-100)/3,100-(41-100)/3,RGB(181, 26, 19))
Case -1+9
LineXY(160,47,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(160-100)/3,100-(47-100)/3,RGB(181, 26, 19))
Case -1+10
LineXY(166,54,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(166-100)/3,100-(54-100)/3,RGB(181, 26, 19))
Case -1+11
LineXY(171,61,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(171-100)/3,100-(61-100)/3,RGB(181, 26, 19))
Case -1+12
LineXY(174,69,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(174-100)/3,100-(69-100)/3,RGB(181, 26, 19))
Case -1+13
LineXY(178,77,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(178-100)/3,100-(77-100)/3,RGB(181, 26, 19))
Case -1+14
LineXY(180,86,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(180-100)/3,100-(86-100)/3,RGB(181, 26, 19))
Case -1+15
LineXY(181,93,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(181-100)/3,100-(93-100)/3,RGB(181, 26, 19))
Case -1+16
LineXY(181,102,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(181-100)/3,100-(102-100)/3,RGB(181, 26, 19))
Case -1+17
LineXY(180,111,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(180-100)/3,100-(111-100)/3,RGB(181, 26, 19))
Case -1+18
LineXY(178,118,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(178-100)/3,100-(118-100)/3,RGB(181, 26, 19))
Case -1+19
LineXY(177,128,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(177-100)/3,100-(128-100)/3,RGB(181, 26, 19))
Case -1+20
LineXY(173,135,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(173-100)/3,100-(135-100)/3,RGB(181, 26, 19))
Case -1+21
LineXY(170,141,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(170-100)/3,100-(141-100)/3,RGB(181, 26, 19))
Case -1+22
LineXY(164,149,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(164-100)/3,100-(149-100)/3,RGB(181, 26, 19))
Case -1+23
LineXY(159,155,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(159-100)/3,100-(155-100)/3,RGB(181, 26, 19))
Case -1+24
LineXY(154,161,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(154-100)/3,100-(161-100)/3,RGB(181, 26, 19))
Case -1+25
LineXY(147,167,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(147-100)/3,100-(167-100)/3,RGB(181, 26, 19))
Case -1+26
LineXY(140,172,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(140-100)/3,100-(172-100)/3,RGB(181, 26, 19))
Case -1+27
LineXY(132,176,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(132-100)/3,100-(176-100)/3,RGB(181, 26, 19))
Case -1+28
LineXY(126,177,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(126-100)/3,100-(177-100)/3,RGB(181, 26, 19))
Case -1+29
LineXY(116,181,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(116-100)/3,100-(181-100)/3,RGB(181, 26, 19))
Case -1+30
LineXY(109,181,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(109-100)/3,100-(181-100)/3,RGB(181, 26, 19))
Case -1+31
LineXY(98,183,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(98-100)/3,100-(183-100)/3,RGB(181, 26, 19))
Case -1+32
LineXY(91,182,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(91-100)/3,100-(182-100)/3,RGB(181, 26, 19))
Case -1+33
LineXY(83,182,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(83-100)/3,100-(182-100)/3,RGB(181, 26, 19))
Case -1+34
LineXY(73,179,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(73-100)/3,100-(179-100)/3,RGB(181, 26, 19))
Case -1+35
LineXY(66,177,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(66-100)/3,100-(177-100)/3,RGB(181, 26, 19))
Case -1+36
LineXY(58,172,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(58-100)/3,100-(172-100)/3,RGB(181, 26, 19))
Case -1+37
LineXY(52,169,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(52-100)/3,100-(169-100)/3,RGB(181, 26, 19))
Case -1+38
LineXY(45,163,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(45-100)/3,100-(163-100)/3,RGB(181, 26, 19))
Case -1+39
LineXY(39,157,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(39-100)/3,100-(157-100)/3,RGB(181, 26, 19))
Case -1+40
LineXY(33,150,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(33-100)/3,100-(150-100)/3,RGB(181, 26, 19))
Case -1+41
LineXY(29,142,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(29-100)/3,100-(142-100)/3,RGB(181, 26, 19))
Case -1+42
LineXY(25,135,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(25-100)/3,100-(135-100)/3,RGB(181, 26, 19))
Case -1+43
LineXY(23,128,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(23-100)/3,100-(128-100)/3,RGB(181, 26, 19))
Case -1+44
LineXY(19,120,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(19-100)/3,100-(120-100)/3,RGB(181, 26, 19))
Case -1+45
LineXY(18,111,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(18-100)/3,100-(111-100)/3,RGB(181, 26, 19))
Case -1+46
LineXY(17,103,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(17-100)/3,100-(103-100)/3,RGB(181, 26, 19))
Case -1+47
LineXY(18,96,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(18-100)/3,100-(96-100)/3,RGB(181, 26, 19))
Case -1+48
LineXY(20,86,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(20-100)/3,100-(86-100)/3,RGB(181, 26, 19))
Case -1+49
LineXY(21,78,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(21-100)/3,100-(78-100)/3,RGB(181, 26, 19))
Case -1+50
LineXY(23,70,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(23-100)/3,100-(70-100)/3,RGB(181, 26, 19))
Case -1+51
LineXY(27,60,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(27-100)/3,100-(60-100)/3,RGB(181, 26, 19))
Case -1+52
LineXY(32,53,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(32-100)/3,100-(53-100)/3,RGB(181, 26, 19))
Case -1+53
LineXY(37,48,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(37-100)/3,100-(48-100)/3,RGB(181, 26, 19))
Case -1+54
LineXY(44,42,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(44-100)/3,100-(42-100)/3,RGB(181, 26, 19))
Case -1+55
LineXY(51,36,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(51-100)/3,100-(36-100)/3,RGB(181, 26, 19))
Case -1+56
LineXY(58,30,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(58-100)/3,100-(30-100)/3,RGB(181, 26, 19))
Case -1+57
LineXY(66,27,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(66-100)/3,100-(27-100)/3,RGB(181, 26, 19))
Case -1+58
LineXY(73,23,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(73-100)/3,100-(23-100)/3,RGB(181, 26, 19))
Case -1+59
LineXY(83,21,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(83-100)/3,100-(21-100)/3,RGB(181, 26, 19))
Case -1+60
LineXY(91,19,100,100,RGB(181, 26, 19))
LineXY(100,100,100-(91-100)/3,100-(19-100)/3,RGB(181, 26, 19))
EndSelect
    
StopDrawing() 
ImageGadget(0, 0, 0, 200, 200, ImageID(0))
EndIf   
EndIf
    
Event = WindowEvent()
Until Event = #PB_Event_CloseWindow

Как видно, я загружаю изображение циферблата, рисую на нем стрелку и вывожу на экран. Проблема в том что так как я вывожу новое изображение каждую секунду совсем немножко моргает. Но в моей программе 3 стрелки и графика (выше приведен только фрагмент) и мигает довольно часто. Можно ли сделать так чтобы изображение "циферблат1.jpg" не выводить каждый раз, а вывести его один раз. Например сначала. Чтобы если уж мигало, то пусть не все мигает, а только стрелки. Это как нибудь можно сделать?

Отредактировано Иван (28.06.2011 04:19:17)

0

581

Иван написал(а):

Как видно, я загружаю изображение циферблата, рисую на нем стрелку и вывожу на экран. Проблема в том что так как я вывожу новое изображение каждую секунду совсем немножко моргает.

Не нужно пересоздавать ImageGadget каждый раз.
Тогда мигать не будет.

Код:
Procedure Timer1()
 
  date=Date()
  hour=Hour(date)
  min=Minute(date)
  sek=Second(date)   
    If CopyImage(1,0)
      StartDrawing(ImageOutput(0))
      
      Select sek
          
        Case 0
          LineXY(99,19,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(99-100)/3,100-(19-100)/3,RGB(181, 26, 19))
        Case -1+2
          LineXY(108,19,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(108-100)/3,100-(19-100)/3,RGB(181, 26, 19))
        Case -1+3
          LineXY(117,22,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(117-100)/3,100-(22-100)/3,RGB(181, 26, 19))
        Case -1+4
          LineXY(124,24,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(124-100)/3,100-(24-100)/3,RGB(181, 26, 19))
        Case -1+5
          LineXY(133,26,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(133-100)/3,100-(26-100)/3,RGB(181, 26, 19))
        Case -1+6
          LineXY(141,30,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(141-100)/3,100-(30-100)/3,RGB(181, 26, 19))
        Case -1+7
          LineXY(148,36,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(148-100)/3,100-(36-100)/3,RGB(181, 26, 19))
        Case -1+8
          LineXY(155,41,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(155-100)/3,100-(41-100)/3,RGB(181, 26, 19))
        Case -1+9
          LineXY(160,47,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(160-100)/3,100-(47-100)/3,RGB(181, 26, 19))
        Case -1+10
          LineXY(166,54,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(166-100)/3,100-(54-100)/3,RGB(181, 26, 19))
        Case -1+11
          LineXY(171,61,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(171-100)/3,100-(61-100)/3,RGB(181, 26, 19))
        Case -1+12
          LineXY(174,69,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(174-100)/3,100-(69-100)/3,RGB(181, 26, 19))
        Case -1+13
          LineXY(178,77,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(178-100)/3,100-(77-100)/3,RGB(181, 26, 19))
        Case -1+14
          LineXY(180,86,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(180-100)/3,100-(86-100)/3,RGB(181, 26, 19))
        Case -1+15
          LineXY(181,93,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(181-100)/3,100-(93-100)/3,RGB(181, 26, 19))
        Case -1+16
          LineXY(181,102,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(181-100)/3,100-(102-100)/3,RGB(181, 26, 19))
        Case -1+17
          LineXY(180,111,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(180-100)/3,100-(111-100)/3,RGB(181, 26, 19))
        Case -1+18
          LineXY(178,118,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(178-100)/3,100-(118-100)/3,RGB(181, 26, 19))
        Case -1+19
          LineXY(177,128,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(177-100)/3,100-(128-100)/3,RGB(181, 26, 19))
        Case -1+20
          LineXY(173,135,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(173-100)/3,100-(135-100)/3,RGB(181, 26, 19))
        Case -1+21
          LineXY(170,141,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(170-100)/3,100-(141-100)/3,RGB(181, 26, 19))
        Case -1+22
          LineXY(164,149,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(164-100)/3,100-(149-100)/3,RGB(181, 26, 19))
        Case -1+23
          LineXY(159,155,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(159-100)/3,100-(155-100)/3,RGB(181, 26, 19))
        Case -1+24
          LineXY(154,161,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(154-100)/3,100-(161-100)/3,RGB(181, 26, 19))
        Case -1+25
          LineXY(147,167,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(147-100)/3,100-(167-100)/3,RGB(181, 26, 19))
        Case -1+26
          LineXY(140,172,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(140-100)/3,100-(172-100)/3,RGB(181, 26, 19))
        Case -1+27
          LineXY(132,176,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(132-100)/3,100-(176-100)/3,RGB(181, 26, 19))
        Case -1+28
          LineXY(126,177,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(126-100)/3,100-(177-100)/3,RGB(181, 26, 19))
        Case -1+29
          LineXY(116,181,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(116-100)/3,100-(181-100)/3,RGB(181, 26, 19))
        Case -1+30
          LineXY(109,181,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(109-100)/3,100-(181-100)/3,RGB(181, 26, 19))
        Case -1+31
          LineXY(98,183,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(98-100)/3,100-(183-100)/3,RGB(181, 26, 19))
        Case -1+32
          LineXY(91,182,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(91-100)/3,100-(182-100)/3,RGB(181, 26, 19))
        Case -1+33
          LineXY(83,182,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(83-100)/3,100-(182-100)/3,RGB(181, 26, 19))
        Case -1+34
          LineXY(73,179,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(73-100)/3,100-(179-100)/3,RGB(181, 26, 19))
        Case -1+35
          LineXY(66,177,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(66-100)/3,100-(177-100)/3,RGB(181, 26, 19))
        Case -1+36
          LineXY(58,172,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(58-100)/3,100-(172-100)/3,RGB(181, 26, 19))
        Case -1+37
          LineXY(52,169,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(52-100)/3,100-(169-100)/3,RGB(181, 26, 19))
        Case -1+38
          LineXY(45,163,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(45-100)/3,100-(163-100)/3,RGB(181, 26, 19))
        Case -1+39
          LineXY(39,157,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(39-100)/3,100-(157-100)/3,RGB(181, 26, 19))
        Case -1+40
          LineXY(33,150,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(33-100)/3,100-(150-100)/3,RGB(181, 26, 19))
        Case -1+41
          LineXY(29,142,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(29-100)/3,100-(142-100)/3,RGB(181, 26, 19))
        Case -1+42
          LineXY(25,135,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(25-100)/3,100-(135-100)/3,RGB(181, 26, 19))
        Case -1+43
          LineXY(23,128,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(23-100)/3,100-(128-100)/3,RGB(181, 26, 19))
        Case -1+44
          LineXY(19,120,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(19-100)/3,100-(120-100)/3,RGB(181, 26, 19))
        Case -1+45
          LineXY(18,111,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(18-100)/3,100-(111-100)/3,RGB(181, 26, 19))
        Case -1+46
          LineXY(17,103,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(17-100)/3,100-(103-100)/3,RGB(181, 26, 19))
        Case -1+47
          LineXY(18,96,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(18-100)/3,100-(96-100)/3,RGB(181, 26, 19))
        Case -1+48
          LineXY(20,86,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(20-100)/3,100-(86-100)/3,RGB(181, 26, 19))
        Case -1+49
          LineXY(21,78,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(21-100)/3,100-(78-100)/3,RGB(181, 26, 19))
        Case -1+50
          LineXY(23,70,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(23-100)/3,100-(70-100)/3,RGB(181, 26, 19))
        Case -1+51
          LineXY(27,60,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(27-100)/3,100-(60-100)/3,RGB(181, 26, 19))
        Case -1+52
          LineXY(32,53,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(32-100)/3,100-(53-100)/3,RGB(181, 26, 19))
        Case -1+53
          LineXY(37,48,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(37-100)/3,100-(48-100)/3,RGB(181, 26, 19))
        Case -1+54
          LineXY(44,42,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(44-100)/3,100-(42-100)/3,RGB(181, 26, 19))
        Case -1+55
          LineXY(51,36,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(51-100)/3,100-(36-100)/3,RGB(181, 26, 19))
        Case -1+56
          LineXY(58,30,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(58-100)/3,100-(30-100)/3,RGB(181, 26, 19))
        Case -1+57
          LineXY(66,27,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(66-100)/3,100-(27-100)/3,RGB(181, 26, 19))
        Case -1+58
          LineXY(73,23,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(73-100)/3,100-(23-100)/3,RGB(181, 26, 19))
        Case -1+59
          LineXY(83,21,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(83-100)/3,100-(21-100)/3,RGB(181, 26, 19))
        Case -1+60
          LineXY(91,19,100,100,RGB(181, 26, 19))
          LineXY(100,100,100-(91-100)/3,100-(19-100)/3,RGB(181, 26, 19))
      EndSelect
      
      StopDrawing() 
      SetGadgetState(0, ImageID(0))
    EndIf   
EndProcedure

UseJPEGImageDecoder()

If LoadImage(1, "фон22.jpg") = 0
  MessageRequester("", "Нет фонового рисунка", #MB_OK|#MB_ICONERROR)
  End
EndIf

OpenWindow(0, 0, 0, 200, 200, "Часы", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ImageGadget(0, 0, 0, 200, 200, 0)
Timer1()
SetTimer_(WindowID(0), 2, 1000, @Timer1())
  
Repeat
  Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow

PS.
Вот часики для примера, может будет полезным http://purebasic.info/phpBB2/download.php?id=404

0

582

как продолжить оператор на несколько строк?

      Case #Button_4,#Button_6,#Button_8,#Button_9,#Button_10,#Button_13,#Button_14,#Button_15,#Button_21,#Button_22,  _
       #Button_24     

дает ошибку. Без символа подчеркивания то же самое.

0

583

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

как продолжить оператор на несколько строк?

Можно так

0

584

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

как продолжить оператор на несколько строк?
                  Case #Button_4,#Button_6,#Button_8,#Button_9,#Button_10,#Button_13,#Button_14,#Button_15,#Button_21,#Button_22,  _       #Button_24

В данном случае, можно сделать проще.
При присвоении значений комнатам, сделать так, что бы все используемые в Case шли друг за другом

Код:
Enumeration
  ; Предыдущие константы
  #Button_4
  #Button_6
  #Button_8
  #Button_9
  #Button_10
  #Button_13
  #Button_14
  #Button_15
  #Button_21
  #Button_22
  #Button_24
  ; Следующие константы
EndEnumeration

и написать так

Код:
Case #Button_4 To #Button_24

0

585

lakomet, я в шоке. Пусть лучше строки будут длинными.

Пётр
такое я пробовал. Думал это некрасивое решение - ведь при изменении формы дизайнером он перепишет все заново.
Попутно: можно ли таким списком оперировать с помощью ForEach ?

0

586

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

можно ли таким списком оперировать с помощью ForEach

Нет, это просто константы.
ForEach работает с динамически связанным списком, создаваемым оператором NewList.

0

587

Подскажите, как организовать прием данных из сом-порта.
Вот основной цикл программы

Код:
Repeat
  Event = WaitWindowEvent() 
    
  If Event = #PB_Event_Gadget
    IncludeFile "event1.pb"
   Else
    If IsSerialPort(2)>0 ;проверка порта, получение данных из устройства
      If AvailableSerialPortInput(2)>=5
        Result2 = ReadSerialPortData(2, @ddt, 1) ;91 ? 
       ...
      EndIf
    EndIf   
  EndIf
  
Until Event = #PB_Event_CloseWindow

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

0

588

Нужно использовать таймер.

Код:
AddWindowTimer(0,0,10) ; Окно с ИД 0, Таймер с ИД 0, время - 10 мс.

Repeat
  Event = WaitWindowEvent() 
    
  If Event = #PB_Event_Gadget
    IncludeFile "event1.pb"
    
   ElseIf Event = #PB_Event_Timer And EventTimer() = 0
    If IsSerialPort(2)>0 ;проверка порта, получение данных из устройства
      If AvailableSerialPortInput(2)>=5
        Result2 = ReadSerialPortData(2, @ddt, 1) ;91 ? 
       ...
      EndIf
    EndIf   
  EndIf
  
Until Event = #PB_Event_CloseWindow

Только нужно учитывать тот факт что если тащить окно за заголовок, то в этот момент не будут возникать события таймера.
Если это критично, то таймер нужно создать при помощи WinAPI функции SetTimer и назначить ему процедуру, вызываемую по таймеру.

PS.
Зачем подключать дополнительный исходный файл "event1.pb" в обработчике событий?

0

589

Пётр, спасибо.

Из-за того, что обработчик не выбирает все что есть из буфера получилось забавно: двигатель уже остановился, а информация о его положении все еще продолжает доставляться пару секунд : )

Это кусок основного файла проекта из которого  выделил обработку событий в отдельный файл. А что, обычно делают иначе?

0

590

Файлы с исходным текстом обычно подключают директивой IncludeFile в начале кода, а не в обработчике событий.

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

Из-за того, что обработчик не выбирает все что есть из буфера получилось забавно: двигатель уже остановился, а информация о его положении все еще продолжает доставляться пару секунд : )

Это не обработчик, а код не выбирает все.

Код:
IncludeFile "event1.pb" ; Подключать исходники нужно в начале кода.

AddWindowTimer(0,0,10) ; Окно с ИД 0, Таймер с ИД 0, время - 10 мс.

Repeat
  Event = WaitWindowEvent() 
  
  If Event = #PB_Event_Gadget
    
    
  ElseIf Event = #PB_Event_Timer And EventTimer() = 0
    If IsSerialPort(2)>0 ;проверка порта, получение данных из устройства.
      CountBytes = AvailableSerialPortInput(2)
      If CountBytes>=5
        *mem = AllocateMemory(CountBytes) ; Память под данные из порта.
        If *mem ; ОК, запрошеная память получена.
          Result2 = ReadSerialPortData(2, *mem, CountBytes) ;91 ? 
          
          ; Тут обрабатываем данные порта, находящиеся в памяти.
          
          FreeMemory(*mem) ; Когда данные обработали, освобождаем память.
        EndIf
        ...
      EndIf
    EndIf   
  EndIf
  
Until Event = #PB_Event_CloseWindow

0

591

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

Это не обработчик, а код не выбирает все.

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

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

Файлы с исходным текстом обычно подключают директивой IncludeFile в начале кода

Вот это поясните пожалуйста. У меня же не идет речь о наборе констант или чем-либо такого рода. И не о процедуре. Имеется кусок кода, который должен быть расположен именно в том месте, где я написал эту директиву. Конечно, можно его сложить с помощью ;{ но имхо удобнее выделить его в отдельный файл.

0

592

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

Имеется кусок кода, который должен быть расположен именно в том месте

А, ну тогда все правильно.
Не знал этого.

0

593

Здравствуйте, как можно сделать кнопки, editirgadget  stringgadget сделать неактивными, чтобы были видны, но нельзя воспользоваться?

0

594

DisableGadget.

0

595

Пётр, благодарю.

0

596

У меня ещё один вопрос, есть EditorGadget и кнопка на форме, кнопка при загрузке приложения не активно и становится активным только после того, как было что либо введено в EditorGadget, соответственно, если стёрли, то и кнопка перестала быть активной. Можно через вечный цикл сделать и отслеживать постоянно введено что либо в EditorGadget, или нет? Но есть ли в PureBasic другой способ отслеживать это? А то цикл добавлять не хочется.

0

597

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

У меня ещё один вопрос, есть EditorGadget и кнопка на форме, кнопка при загрузке приложения не активно и становится активным только после того, как было что либо введено в EditorGadget, соответственно, если стёрли, то и кнопка перестала быть активной. Можно через вечный цикл сделать и отслеживать постоянно введено что либо в EditorGadget, или нет? Но есть ли в PureBasic другой способ отслеживать это? А то цикл добавлять не хочется.

Так у тебя в программе и так есть главный цикл, туда можно поставить:

Код:
If GetGadgetText(#Editor_0) > ""
          DisableGadget(#Button_1,0)
        Else
          DisableGadget(#Button_1,1)
        EndIf

Но лучше этот код поставить в обработку события EditorGadget.

0

598

Проверяй по таймеру есть там текст или нет.
Число символов можно получить так:

Код:
If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  EditorGadget(0, 8, 8, 306, 133)    
  Debug SendMessage_(GadgetID(0), #EM_GETTEXTLENGTHEX, @TextLength, #Null) 
  SetGadgetText(0,"1234")
  Debug SendMessage_(GadgetID(0), #EM_GETTEXTLENGTHEX, @TextLength, #Null) 
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

0

599

Здравствуйте, скажите пожалуйста как прочитать данные из txt файла.А то весь форум просмотрел ничего стоящего не нашёл.

0

600

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

.А то весь форум просмотрел ничего стоящего не нашёл.

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

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка (продолжение…)