PureBasic - форум

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

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


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


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

Сообщений 121 страница 150 из 990

121

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

А можно как то понятнее задать вопрос? Куда вывести картнки - в rtf? из Rtf на диск? Просто куда и откуда?

У меня есть несколько картинок, которые надо вывести в окно. Лучше из rtf, но в принципе не важно.

0

122

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

несколько картинок, которые надо вывести в окно

А в чем трудность то?
Пример из Helpa

Код:
; для разных форматов
UseJPEGImageDecoder() 
UseJPEG2000ImageDecoder() 
UsePNGImageDecoder() 
UseTIFFImageDecoder() 
UseTGAImageDecoder() 


If OpenWindow(0, 0, 0, 245, 105, "ImageGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If LoadImage(0, "Твой рисунок.bmp")    ; change 2nd parameter to the path/filename of your image
      ImageGadget(0,  10, 10, 100, 83, ImageID(0))                      ; imagegadget standard
      ImageGadget(1, 130, 10, 100, 83, ImageID(0), #PB_Image_Border)     ; imagegadget with border
    EndIf
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

Как вытащить картинку из Rtf не знаю. Проще всего скопировать её, вставить в редактор картинок  и сохранить на диск.

0

123

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

А в чем трудность то?
Пример из Helpa

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

Отредактировано max (10.01.2011 21:26:49)

0

124

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

For x=0 To 198
      color=RGB(255, 255-(198-x), 0)
      For t=0 To z
        Plot(Sin(x*ToRad)*50+30+(z/2+t),x,color)
      Next t
      ToRad-0.00004
      z+0.4
    Next x

Не совсем понятен такой момент,- шаг в цикле For-Next минимум =1. В примере, значение z увеличивается на дробное значение (+0.4). Как при этом работает цикл? В качестве значение Z, при достижении которого цикл прекращает работу, берется целая часть Z, или я что-то упустил??? Раньше думал, что значение <expression2> (в данном случае Z) может быть только целым числом…???

0

125

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

берется целая часть Z

Да, именно так.

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

Раньше думал, что значение <expression2> (в данном случае Z) может быть только целым числом…???

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

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

У меня есть несколько картинок, которые надо вывести в окно. Лучше из rtf, но в принципе не важно.

Можно создать HTML документ со встроенными картинками.

0

126

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

Можно создать HTML

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

А где можно почитать, как сделать HTML документ?
Заранее спасибо!

Отредактировано max (10.01.2011 22:43:30)

0

127

В HTML редакторе, скажем в Nvu.
В крайнем случае, Ворд умеет сохранять в формате HTML.

0

128

Ребят, а как установить курсор мышки в определённое место внутри окна?
Из примеров, подходит функция  SetCursorPos_(MouseX, MouseY), но она устанавливает положение курсора на экране. Пока делаю так: SetCursorPos_( WindowX((#Window)+нужное значениеX, WindowY((#Window)+нужное значение Y). Это единственный вариант, или есть функция установки курсора непосредственно для окна???

И еще, можно ли как-то превратить курсор мыши в нужную мне фигурку, например в шарик(R=5 пикселей) с круговым градиентом из центра??? :question:

В принципе как просто погасить курсор я нашел,-  ShowCursor_( FALSE).Так работает.
А вот как форму курсора поменять не пойму.  wc.hCursor = LoadCursor(NULL, IDC_CROSS)
SetCursor _(wc.hCursor)
Не пойму, что за тип имеет  идентификатор «wc» и что за структура «hCursor»??? Даже при значение SetCursor_(NULL) курсор почему-то не исчезает с экрана , как обещено… ???  :dontknow:

Отредактировано Lucagin (11.01.2011 04:10:25)

0

129

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

Это единственный вариант, или есть функция установки курсора непосредственно для окна???

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

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

И еще, можно ли как-то превратить курсор мыши в нужную мне фигурку, например в шарик(R=5 пикселей) с круговым градиентом из центра??? :question:

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

А вот как форму курсора поменять не пойму.  wc.hCursor = LoadCursor(NULL, IDC_CROSS)
SetCursor _(wc.hCursor)

Можно любой курсор установить, какой нарисуешь. Можно грузить из файла или из ресурсов. Вот тут есть пример как это сделать:
http://pbasic.spb.ru/phpBB2/viewtopic.php?t=388
И поосторожней с константами типа #False и #True ( к стати, так они правильно пишутся) - в Пурике это 0 и 1 , но в API это могут быть другие числа, -1 к примеру, так что вначале надо проверять их истинное значение.

0

130

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

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

Спасибо, Пётр!!! Это существенный нюанс, может где-то пригодиться... :writing:

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

Можно любой курсор установить, какой нарисуешь. Можно грузить из файла или из ресурсов. Вот тут есть пример как это сделать:http://pbasic.spb.ru/phpBB2/viewtopic.php?t=388 И поосторожней с константами типа #False и #True ( к стати, так они правильно пишутся) - в Пурике это 0 и 1 , но в API это могут быть другие числа, -1 к примеру, так что вначале надо проверять их истинное значение.

Спасибо!!! :cool:
Буду пробовать...

Отредактировано Lucagin (11.01.2011 16:45:41)

0

131

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

В HTML редакторе, скажем в Nvu.В крайнем случае, Ворд умеет сохранять в формате HTML.

Спасибо!

0

132

Всем привет!
Возможно я туплю, но у меня упорно не хотят выводиться картинки. HTML сделан в Nvu. Подскажите, что не так? Код прилагается.
Код
Заранее спасибо!

Отредактировано max (11.01.2011 21:10:54)

0

133

В файле 345.html путь к картинке для отображения у каждого по идее будет уникален, у меня такой:

src="file://localhost/C:\Documents and Settings\Олег\Рабочий стол\Новая папка\PureBasicLogo.png" - работает

0

134

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

путь к картинке для отображения у каждого по идее будет уникален

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

0

135

Ребята, помогите понять причину ошибки???
В программе, надо шарик провести снизу до верха экрана по нарисованной  траектории…
Всё вроде работает корректно, за исключением одной проблемы. Если курсор мыши опустить ниже окна, то программа завершает работу со значением координаты Y=-1. Как оказалось, что внизу окна, координата Y не 600 (по ширине окна), а -1??? Причем в каких-то точках эта ошибка вылезает, а в каких-то нет. Debug(y) выводит значение Y, при котором программа завершает работу (строка 91)…
Можно конечно сделать через координаты экрана, но хочется понять, откуда растут ноги у этой ошибки…

Код:
Global X_s, Y_s

Procedure Windows()
If OpenWindow(0, 0, 0, 800, 600, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CreateImage(0, 1000, 1000)
  ImageGadget(0, 0, 0, 800, 600, ImageID(0))
  If CreateMenu(0, WindowID(0))      
    MenuItem(1,"Старт")
    MenuItem(2,"Выход")
  EndIf
EndIf
EndProcedure

Procedure Zigzag()  
  V=Random(30)
    While V<20
      V=Random(50)
    Wend
    ToRad.d = 1/V
    
  R=Random(250)
    While r<50
      R=Random(250)
    Wend
  If  StartDrawing(ImageOutput(0))
    Box(0,0,800,600,RGB(0,0,0))
      z.f=100
      For x=0 To 600              
        color=RGB(255, 0, 0)
          For t=0 To z
            Plot(Sin(x*ToRad)*R+200+(z/2+t),x,color)
          Next t
        ToRad-0.00004
        z+0.4
      Next x    
    
      DrawingMode(#PB_2DDrawing_Gradient)      
        BackColor($00FFFF)
        FrontColor($FF0000)        
        x=200+400        
          While Point(x+20, 600-25)<>RGB(255,0,0)
            x-5
          Wend         
        X_s=x
        Y_s=600-25
        SetCursorPos_(WindowX(0)+X_s, WindowY(0)+20+Y_s)
        CircularGradient(X_s, Y_s, 5)     
        Circle(X_s, Y_s, 5)
        ;Debug X_s
        ;Debug Y_s
      StopDrawing()     
     SetGadgetState(0,ImageID(0))
  EndIf
  
   ;SetCursorPos_(WindowX(0)+X_s, WindowY(0)+Y_s)
   ;wc.hCursor=LoadCursor_(NULL, IDC_SIZE	)
   ;SetCursor_(NULL)
   ShowCursor_(FALSE)
 EndProcedure
 
Windows()

Repeat
  Event=WaitWindowEvent(100)
  Menu=EventMenu()
  If event=#PB_Event_Menu
    If Menu=1
      Start=ElapsedMilliseconds()
      d=0
      Zigzag()
;{ Вложенный цикл
Repeat        
    Kor_X=WindowMouseX(0)
    Kor_Y=WindowMouseY(0)
    If WindowMouseX(0) <>Kor_X Or WindowMouseY(0)<>Kor_Y
      Kor_X=WindowMouseX(0)
      Kor_Y=WindowMouseY(0)
      ;If Kor_Y>600-10
        ;or_Y=600-10
      ;EndIf
      StartDrawing(ImageOutput(0))
      Circle(X_s, Y_s, 5,RGB(255,0,0))
      DrawingMode(#PB_2DDrawing_Gradient) 
      X_s=Kor_X
      Y_s=Kor_Y        
        If Y_s<=5
          DrawingMode(#PB_2DDrawing_Default )
          Box(0,0,800,600,RGB(0,0,0))
          StopDrawing()
          SetGadgetState(0,ImageID(0)) 
            Debug Y_s
            ShowCursor_(-1)
            temp.f=(ElapsedMilliseconds()-start)/1000
            MessageRequester("Информация!", "Задание выполнено! Затраченное время: "+Left(StrF(temp),5)+ " сек.", #MB_OK|#MB_ICONINFORMATION)
          Break          
        EndIf        
        BackColor($00FFFF)
        FrontColor($FF0000)        
        
        For a=0 To 360 Step 15
          Cvet=Point(Cos(a*#PI/180)*5+Kor_X, Sin(a*#PI/180)*5+Kor_Y)
          If  Cvet=RGB(0,0,0)
            DrawingMode(#PB_2DDrawing_Default )
            Box(0,0,800,600,RGB(0,0,0))
            StopDrawing()
            SetGadgetState(0,ImageID(0))
            ;Debug Y_s
            ;Debug Cvet
            ShowCursor_(-1)
            temp=ElapsedMilliseconds()-start
            MessageRequester("Ошибка!", "Задание провалено, касание в точке с координатами:X= "+Str(Cos(a*#PI/180)*5+Kor_X)+" y= " +Str(Sin(a*#PI/180)*5+Kor_Y), #MB_OK|#MB_ICONQUESTION)
            Goto k
          EndIf  
        Next a
        CircularGradient(X_s, Y_s, 5)     
        Circle(X_s, Y_s, 5)      
        StopDrawing()
        SetGadgetState(0,ImageID(0))  
    EndIf     
Until d=1
;}      
    ElseIf menu=2
      End
    EndIf  
  EndIf
   k:
Until Event = #PB_Event_CloseWindow

Отредактировано Lucagin (11.01.2011 22:09:06)

0

136

Как вариант, все загружаем в EXE файл, а при запуске создаём html и картинку в временной директории...
Проблема, если много файлов...

Возможно есть вариант по лучше.

Код:
patc1.s= GetTemporaryDirectory()+"PureBasicLogo.png" 
patc2.s= GetTemporaryDirectory()+"345.html"  ;абсолютный путь

If CreateFile(1,patc1.s)
  WriteData(1,?Im0, ?Im0End-?Im0)
  CloseFile(1)
EndIf 

If CreateFile(2,patc2.s)
  WriteData(2,?ch1, ?ch1End-?ch1)
  CloseFile(2)
EndIf


If OpenWindow(0, 0, 0, 800, 500, "WebGadget", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
    WebGadget(1, 10, 10, 780, 480, patc2.s) 


    
Repeat 
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf




DataSection
 Im0:
  IncludeBinary "PureBasicLogo.png"
 Im0End:
 ch1:
  IncludeBinary "345.html"
 ch1End:
EndDataSection

0

137

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

Ребята, помогите понять причину ошибки???

Ошибка в том, что Point не правильно присваиваются координаты. Ввел дополнительные условия.

Код:
Global X_s, Y_s

Procedure Windows()
If OpenWindow(0, 0, 0, 800, 600, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CreateImage(0, 1000, 1000)
  ImageGadget(0, 0, 0, 800, 600, ImageID(0))
  If CreateMenu(0, WindowID(0))      
    MenuItem(1,"Старт")
    MenuItem(2,"Выход")
  EndIf
EndIf
EndProcedure

Procedure Zigzag()  
  V=Random(30)
    While V<20
      V=Random(50)
    Wend
    ToRad.d = 1/V
    
  R=Random(250)
    While r<50
      R=Random(250)
    Wend
  If  StartDrawing(ImageOutput(0))
    Box(0,0,800,600,RGB(0,0,0))
      z.f=100
      For x=0 To 600              
        color=RGB(255, 0, 0)
          For t=0 To z
            Plot(Sin(x*ToRad)*R+200+(z/2+t),x,color)
          Next t
        ToRad-0.00004
        z+0.4
      Next x    
    
      DrawingMode(#PB_2DDrawing_Gradient)      
        BackColor($00FFFF)
        FrontColor($FF0000)        
        x=200+400        
          While Point(x+20, 600-25)<>RGB(255,0,0)
            x-5
          Wend         
        X_s=x
        Y_s=600-25
        SetCursorPos_(WindowX(0)+X_s, WindowY(0)+20+Y_s)
        CircularGradient(X_s, Y_s, 5)     
        Circle(X_s, Y_s, 5)
        ;Debug X_s
        ;Debug Y_s
      StopDrawing()     
     SetGadgetState(0,ImageID(0))
  EndIf
  
   ;SetCursorPos_(WindowX(0)+X_s, WindowY(0)+Y_s)
   ;wc.hCursor=LoadCursor_(NULL, IDC_SIZE	)
   ;SetCursor_(NULL)
   ShowCursor_(FALSE)
 EndProcedure
 
Windows()

Repeat
  Event=WaitWindowEvent(100)
  Menu=EventMenu()
  If event=#PB_Event_Menu
    If Menu=1
      Start=ElapsedMilliseconds()
      d=0
      Zigzag()
;{ Вложенный цикл
Repeat        
    ;Kor_X=WindowMouseX(0) ; Это лишнее условие
    ;Kor_Y=WindowMouseY(0) ; Это лишнее условие
    If WindowMouseX(0) <>Kor_X Or WindowMouseY(0)<>Kor_Y
      Kor_X=WindowMouseX(0)
      Kor_Y=WindowMouseY(0)
      ;If Kor_Y>600-10
        ;or_Y=600-10
      ;EndIf
      StartDrawing(ImageOutput(0))
      Circle(X_s, Y_s, 5,RGB(255,0,0))
      DrawingMode(#PB_2DDrawing_Gradient) 
      X_s=Kor_X
      Y_s=Kor_Y        
        If Y_s<=5 And Y_s<>-1
          DrawingMode(#PB_2DDrawing_Default )
          Box(0,0,800,600,RGB(0,0,0))
          StopDrawing()
          SetGadgetState(0,ImageID(0)) 
            Debug Y_s
            ShowCursor_(-1)
            temp.f=(ElapsedMilliseconds()-start)/1000
            MessageRequester("Информация!", "Задание выполнено! Затраченное время: "+Left(StrF(temp),5)+ " сек.", #MB_OK|#MB_ICONINFORMATION)
          Break          
        EndIf        
        BackColor($00FFFF)
        FrontColor($FF0000)        
        
        For a=0 To 360 Step 15
          If Kor_X<>-1
            Cvet=Point(Cos(a*#PI/180)*5+Kor_X, Sin(a*#PI/180)*5+Kor_Y)
          EndIf
          
          If  Cvet=RGB(0,0,0)
            DrawingMode(#PB_2DDrawing_Default )
            Box(0,0,800,600,RGB(0,0,0))
            StopDrawing()
            SetGadgetState(0,ImageID(0))
            ;Debug Y_s
            ;Debug Cvet
            ShowCursor_(-1)
            temp=ElapsedMilliseconds()-start
            MessageRequester("Ошибка!", "Задание провалено, касание в точке с координатами:X= "+Str(Cos(a*#PI/180)*5+Kor_X)+" y= " +Str(Sin(a*#PI/180)*5+Kor_Y), #MB_OK|#MB_ICONQUESTION)
            Goto k
          EndIf  
        Next a
        CircularGradient(X_s, Y_s, 5)     
        Circle(X_s, Y_s, 5)      
        StopDrawing()
        SetGadgetState(0,ImageID(0))  
    EndIf     
Until d=1
;}      
    ElseIf menu=2
      End
    EndIf  
  EndIf
   k:
Until Event = #PB_Event_CloseWindow

А вообще, такие программы пишутся немного иначе. Посмотри в сторону OpenWindowedScreen - так будет правильнее

Код:
If InitSprite() = 0
    MessageRequester("Error", "Can't open screen & sprite enviroment!", 0)
    End
  EndIf
  
  If OpenWindow(0, 0, 0, 220, 160, "A screen in a window...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ButtonGadget(0, 170, 135, 45, 20, "Quit")

    If OpenWindowedScreen(WindowID(0), 0, 0, 160, 160, 0, 0, 0)
      CreateSprite(0, 20, 20)
      If StartDrawing(SpriteOutput(0))
        Box(0, 0, 20, 20, RGB(255, 0, 155))
        Box(5, 5, 10, 10, RGB(155, 0, 255))
        StopDrawing()
      EndIf
    Else
      MessageRequester("Error", "Can't open windowed screen!", 0)
      End
    EndIf
  EndIf
  
  direction = 2
  Repeat
    ; It's very important to process all the events remaining in the queue at each frame
    ;
    Repeat
      Event = WindowEvent()
      
      Select Event 
        Case #PB_Event_Gadget
          If EventGadget() = 0
            End
          EndIf
        
        Case #PB_Event_CloseWindow
          End 
      EndSelect
    Until Event = 0
  
    FlipBuffers() 
    ClearScreen(RGB(0, 0, 0))
    DisplaySprite(0, x, x)
    x + direction
    If x > 140 : direction = -2 : EndIf
    If x < 0   : direction =  2 : EndIf
    Delay(1)
  ForEver

0

138

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

Ошибка в том, что Point не правильно присваиваются координаты. Ввел дополнительные условия.

Здорово, Спасибо!!! Заработало… :cool:

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

А вообще, такие программы пишутся немного иначе. Посмотри в сторону OpenWindowedScreen - так будет правильнее

Очень интересно, буду пробовать!!! :writing:

0

139

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

Возможно я туплю, но у меня упорно не хотят выводиться картинки. HTML сделан в Nvu. Подскажите, что не так?

Нужно указывать относительный путь к картинкам, а не абсолютный.

0

140

Экспериментирую с той  же программой.
При запуске программы создаю таймер, который в строке состояния выводить текущие координаты курсора и время от начала работы. Но  почему, при нажатии на «Старт» обновление информации на строке состояния прекращается, пока не происходит выхода из цикла…???
Я так понимаю, что тут как-то виноват цикл в цикле Repeat Repeat Until Until. Или что-то еще???
Таймер же по идее, не должен зависит от выполняемого кода, а должен вызывать свою процедуру каждые 100 Мсек., а тут получается, что он на время рисования внутри двойного цикла не работает??? Тут что получается, что при выполнении кода внутри двойного цикла, другие “операции”, активированные программой, игнорируются??? Или какой тут механизм???

Код:
Global X_s, Y_s

Global Vrema_0     ;Время начала отсчета в таймере работы с программой
Global Vrema_Tec   ; на текущий момент замера
Global Vrema_MS    ; милисекунды
Global Vrema_S
Global Vrema_M
Global Vrema_H

Procedure Zatr_Vrema()  ; Выводит время работы и Координаты Х и Y ...
     
Vrema_Tec=ElapsedMilliseconds() ; Устанавликает переменную текущего времени на это мгновение...
Vrema_MS=Vrema_Tec-Vrema_0      ; Vrema_0 на момент запуска равно 0
  If Vrema_MS>=1000             ; если время достигло минуты то идет фактически обнуление Vrema_MS  и +1 секунда...   
    Vrema_0=ElapsedMilliseconds()
    Vrema_S=Vrema_S+1
      If Vrema_S>=60                   ; По аналагичной схеме минуты и часы...
        Vrema_S=0
        Vrema_M=Vrema_M+1
          If Vrema_M>=60
            Vrema_M=0
            Vrema_H=Vrema_H=1
          EndIf  
      EndIf
    EndIf
    
    StatusBarText(30,0,"Время работы: "+ Str(Vrema_H)+":"+Str(Vrema_M)+":"+Str(Vrema_S)+":"+Str(Vrema_MS)) ; Выводит число ошибок на строку состояния
    StatusBarText(30,1,"Координата X= "+ Str(WindowMouseX(0)))
    StatusBarText(30,2,"Координата Y= "+ Str(WindowMouseY(0)))
 EndProcedure

Procedure Windows()
If OpenWindow(0, 0, 0, 800, 645, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CreateImage(0, 1000, 602)
  ImageGadget(0, 0, 0, 800, 602, ImageID(0))
  If CreateMenu(0, WindowID(0))      
    MenuItem(1,"Старт")
    MenuItem(2,"Выход")
  EndIf
  
  If CreateStatusBar(30, WindowID(0))
          
      AddStatusBarField(#PB_Ignore)
      AddStatusBarField(#PB_Ignore)
      AddStatusBarField(#PB_Ignore)
      SetTimer_(WindowID(0), 1, 100, @Zatr_Vrema() ) ; При создании окна запускается таймер показывающий время текущее и день недели...
    EndIf  
  
EndIf
EndProcedure

Procedure Zigzag()  
  ;SetTimer_(WindowID(0), 1, 100, @Zatr_Vrema() ) 
  V=Random(30)
    While V<20
      V=Random(50)
    Wend
    ToRad.d = 1/V
    
  R=Random(250)
    While r<50
      R=Random(250)
    Wend
  If  StartDrawing(ImageOutput(0))
    Box(0,0,800,601,RGB(0,0,0))
      z.f=100
      For x=0 To 600              
        color=RGB(255, 0, 0)
          For t=0 To z
            Plot(Sin(x*ToRad)*R+200+(z/2+t),x,color)
          Next t
        ToRad-0.00004
        z+0.4
      Next x    
    ;LineXY (0,602,800,602,RGB(255,0,0)) ; Рисуем снизу линию
      DrawingMode(#PB_2DDrawing_Gradient)      
        BackColor($00FFFF)
        FrontColor($FF0000)        
        x=200+400        
          While Point(x+20, 600-25)<>RGB(255,0,0)
            x-5
          Wend         
        X_s=x
        Y_s=645-28
        SetCursorPos_(WindowX(0)+X_s, WindowY(0)+20+Y_s)
        CircularGradient(X_s, Y_s, 5)     
        Circle(X_s, Y_s, 5)
        ;Debug X_s
        ;Debug Y_s
       StopDrawing()     
     SetGadgetState(0,ImageID(0))
  EndIf
  
   ;SetCursorPos_(WindowX(0)+X_s, WindowY(0)+Y_s)
   ;wc.hCursor=LoadCursor_(NULL, IDC_SIZE	)
   ;SetCursor_(NULL)
   ShowCursor_(FALSE)
 EndProcedure
 
Windows()

Repeat
  Event=WaitWindowEvent(100)
  Menu=EventMenu()
  If event=#PB_Event_Menu
    If Menu=1
      Start=ElapsedMilliseconds()
      d=0
      Zigzag()
;{ Вложенный цикл
Repeat        
    ;Kor_X=WindowMouseX(0) ; Это лишнее условие
    ;Kor_Y=WindowMouseY(0) ; Это лишнее условие
    If WindowMouseX(0) <>Kor_X Or WindowMouseY(0)<>Kor_Y
      Kor_X=WindowMouseX(0)
      Kor_Y=WindowMouseY(0)
      ;If Kor_Y>600-10
        ;or_Y=600-10
      ;EndIf
      StartDrawing(ImageOutput(0))
      Circle(X_s, Y_s, 5,RGB(255,0,0))
      DrawingMode(#PB_2DDrawing_Gradient) 
      X_s=Kor_X
      Y_s=Kor_Y        
        If Y_s<=5 And Y_s<>-1
          DrawingMode(#PB_2DDrawing_Default )
          Box(0,0,800,601,RGB(0,0,0))
          StopDrawing()
          SetGadgetState(0,ImageID(0)) 
            Debug Y_s
            ShowCursor_(-1)
            temp.f=(ElapsedMilliseconds()-start)/1000
            ;KillTimer_(WindowID(0),1)
            MessageRequester("Информация!", "Задание выполнено! Затраченное время: "+Left(StrF(temp),5)+ " сек.", #MB_OK|#MB_ICONINFORMATION)
          Break          
        EndIf        
        BackColor($00FFFF)
        FrontColor($FF0000)        
        
        For a=0 To 360 Step 15
          If Kor_X<>-1
            ;Debug Kor_Y
            Cvet=Point(Cos(a*#PI/180)*5+Kor_X, Sin(a*#PI/180)*5+Kor_Y)
            
          EndIf
          
          If  Cvet=RGB(0,0,0)
            DrawingMode(#PB_2DDrawing_Default )
            Box(0,0,800,601,RGB(0,0,0))
            StopDrawing()
            SetGadgetState(0,ImageID(0))
            ;Debug Y_s
            ;Debug Cvet
            ShowCursor_(-1)
            ;KillTimer_(WindowID(0),1)
            temp=ElapsedMilliseconds()-start
            MessageRequester("Ошибка!", "Задание провалено, касание в точке с координатами:X= "+Str(Cos(a*#PI/180)*5+Kor_X)+" y= " +Str(Sin(a*#PI/180)*5+Kor_Y), #MB_OK|#MB_ICONQUESTION)
            Goto k
          EndIf  
        Next a
        CircularGradient(X_s, Y_s, 5)     
        Circle(X_s, Y_s, 5)      
        StopDrawing()
        SetGadgetState(0,ImageID(0))  
    EndIf     
Until d=1
;}      
ElseIf menu=2
  KillTimer_(WindowID(0),1)
      End
    EndIf  
  EndIf
   k:
 Until Event = #PB_Event_CloseWindow
 KillTimer_(WindowID(0),1)
 End

Отредактировано Lucagin (12.01.2011 15:55:39)

0

141

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

аймер же по идее, не должен зависит от выполняемого кода, а должен вызывать свою процедуру каждые 100 Мсек., а тут получается, что он на время рисования внутри двойного цикла не работает???

Таймер работает как надо. Но вот окно не обновляется во время внутреннего цикла -а тебе кажется, что таймер не работает. Вставь внутрь вложенного цикла  WindowEvent()

Код:
...
Repeat      
  WindowEvent()
    ;Kor_X=WindowMouseX(0) ; Это лишнее условие
    ;Kor_Y=WindowMouseY(0) ; Это лишнее условие
    If WindowMouseX(0) <>Kor_X Or WindowMouseY(0)<>Kor_Y
      Kor_X=WindowMouseX(0)
      Kor_Y=WindowMouseY(0)
      ;If Kor_Y>600-10
        ;or_Y=600-10 
...

И будет тебе счастье!

0

142

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

Таймер работает как надо. Но вот окно не обновляется во время внутреннего цикла -а тебе кажется, что таймер не работает. Вставь внутрь вложенного цикла  WindowEvent()

Понял, спасибо!!!! :)

0

143

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

Вставь внутрь вложенного цикла  WindowEvent()

Думаю что лучше использовать WaitWindowEvent(10) чтобы не грузило процессор на 100% как сейчас.

0

144

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

Думаю что лучше использовать WaitWindowEvent(10) чтобы не грузило процессор на 100% как сейчас.

Принято!!! :flag:  Спасибо!!!

0

145

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

Нужно указывать относительный путь к картинкам, а не абсолютный.

Указываю - та же история!

0

146

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

Указываю - та же история!

http://depositfiles.com/files/tubpw3b71

+1

147

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

max написал(а):Указываю - та же история!
http://depositfiles.com/files/tubpw3b71

Спасибо! Работает! :cool:

0

148

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

0

149

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

Ребят, а как сгенерировать в PB подобный  лабиринт,  случайным образом

Выше я выкладывал код игры, генерирующей лабиринт Вопросы новичка (продолжение…)

0

150

Подскажите, пожалуйста, в какое место строки

Код:
WebGadget(1, 10, 10, 780, 480, "file://"+GetPathPart(ProgramFilename())+"456.htm")

мне нужно вставить функцию Left(String$, 2), чтобы она сдвигала на два символа название файла?

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

0


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