PureBasic - форум

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

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


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


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

Сообщений 241 страница 270 из 961

241

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

То есть размер курсора не может быть произвольным, а только таким, какой поддерживает ОС!

Получается что поддерживается размер 32х32...

Можно тогда саму иконку курсора нарисовать не на весь значок курсора(32х32), а на его малую часть , тогда, получится курсор меньшего размера а вокруг прозрачный фон… :о))

А можно не создавая нового курсора, сместить рабочую точку курсора в центр значка круга...??? Или изначально под эту задачу надо было выбирать другое решение…?

Отредактировано Lucagin (04.02.2011 15:03:43)

0

242

Можно контролировать положение курсора мышки и если он над рисунком - скрывать курсор и отображать свой (окно с картинкой).
Тогда курсор может быть любой (рисунок требуемого размера), но работать с ним (проверять текущее положение, передвигать по экрану) придется программно.

0

243

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

Можно контролировать положение курсора мышки и если он над рисунком - скрывать курсор и отображать свой (окно с картинкой).Тогда курсор может быть любой (рисунок требуемого размера), но работать с ним (проверять текущее положение, передвигать по экрану) придется программно.

Спасибо, Пётр, за дельные советы и правки…!!!  Постараюсь уж довести до ума  идею с курсором...

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

0

244

Всю голову сломал, как мне сделать красную линию не проходимой для курсора??? Чтобы курсор в нее упирался и не мог пройти дальше, при этом не улетал от неё, а оставаясь на месте...???. :question:
Вот почему, когда я прикасаюсь курсором к линии снизу, его отбрасывает за пределы гаджета (ImageGadget) и даже за пределы окна программы (показывает координаты -1,-1). :dontknow:  Курсор нарисован, как показано на рисунке, т.е. в верхней четверти квадрата 32х32… Активная точка курсора,- верхний левый угол...

Иконка и код в архиве… http://ifolder.ru/21717492



Код:
Enumeration
  #Window_0
EndEnumeration

;- MenuBar Constants
Enumeration
  #MenuBar_0
EndEnumeration

;- Gadget Constants
Enumeration
  #Image_0
EndEnumeration

Temp.POINT


Procedure Zatr_Vrema()  ; Выводи время работы и Координаты Х и Y ...     
    StatusBarText(30,0,"Координата X= "+ Str(WindowMouseX(0)))
    StatusBarText(30,1,"Координата Y= "+ Str(WindowMouseY(0)))
 EndProcedure

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 600, 300, "New window ( 0 )",  #PB_Window_ScreenCentered | #PB_Window_BorderLess)
    If CreateMenu(#MenuBar_0, WindowID(#Window_0))
      MenuItem(1,"Курсор")
      MenuItem(2,"Выход")
    EndIf

      If CreateGadgetList(WindowID(#Window_0))
        CreateImage(#Image_0,450,200)
        ImageGadget(#Image_0, 70, 50, 450, 200,0)
        
      EndIf
      
      If CreateStatusBar(30, WindowID(#Window_0))          
        AddStatusBarField(#PB_Ignore)
        AddStatusBarField(#PB_Ignore)     
      EndIf        
      
    EndIf
EndProcedure

Open_Window_0()

  If LoadCursorFromFile_(@"mal2.cur")=0   ; Проверяем, есть ли файл с курсором...
    MessageRequester("KlavaState_Cursor", "Не удалось загрузить курсор!", #MB_OK|#MB_ICONERROR)
    End
  EndIf

Repeat : event=WaitWindowEvent() : gadget=EventGadget() : menu=EventMenu() : EventType=EventType()
  If event=#PB_Event_Menu
    If menu=1  
      If StartDrawing(ImageOutput(#Image_0))
        Box(0, 0, 450, 200, RGB(0,255,0))
        LineXY (20,100,400,100,RGB(255,0,0))
         StopDrawing ()
         SetGadgetState(0,ImageID(0)) 
      EndIf
         SetCursorPos_(WindowX(#Window_0)+GadgetX(#Image_0)+200, WindowY(#Window_0)+GadgetY(#Image_0)+180) ; устанавливаем курсор в позицию входа в лабиринт
         SetClassLongPtr_(GadgetID(#Image_0),#GCL_HCURSOR,LoadCursorFromFile_(@"mal2.cur"))        
         SetTimer_(WindowID(0), 1, 100, @Zatr_Vrema() )
         Kor_X_star=WindowMouseX(#Window_0)
         Kor_Y_star=WindowMouseY(#Window_0)          
         
    ElseIf  menu=2    
      KillTimer_(WindowID(0),1)
      End
    EndIf      
  EndIf  
    
    
  If WindowMouseX(#Window_0)>70 And WindowMouseY(#Window_0)>50 And WindowMouseX(#Window_0)<70+400 And WindowMouseY(#Window_0)<50+150
    If WindowMouseX(#Window_0) <> Kor_X_star Or  WindowMouseY(#Window_0)<>Kor_Y_star    
       Kor_X_Now=WindowMouseX(#Window_0)
       Kor_Y_Nov=WindowMouseY(#Window_0) 
          
     StartDrawing(ImageOutput(#Image_0))
     Cvet1=Point(Kor_X_Now-GadgetX(#Image_0)+8,Kor_Y_Nov-GadgetY(#Image_0))                      ; круг курсора примерно имеет диаметр 16 пикселей, =>  его середина 8 пикселей...
     Cvet2=Point(Kor_X_Now-GadgetX(#Image_0)+16,Kor_Y_Nov-GadgetY(#Image_0)+8)
     Cvet3=Point(Kor_X_Now-GadgetX(#Image_0)+8,Kor_Y_Nov-GadgetY(#Image_0)+16)
     Cvet4=Point(Kor_X_Now-GadgetX(#Image_0),Kor_Y_Nov-GadgetY(#Image_0)+8)
     StopDrawing()
       If Cvet1=RGB(255, 0, 0) Or Cvet2=RGB(255, 0, 0) Or Cvet3=RGB(255, 0, 0) Or Cvet4=RGB(255, 0, 0)   ; проверяю есть ли красный цвет в районе вершин круга на 3, 6 ,9 и 12 часов...
        
        Temp\x=(WindowX(#Window_0)+Kor_X_star)
        Temp\y=(WindowY(#Window_0)+Kor_Y_star+MenuHeight())
        Debug Temp\x
        Debug Temp\y
         SetCursorPos_(Temp\x,Temp\y)         
       EndIf
         Kor_X_star=WindowMouseX(#Window_0)
         Kor_Y_star=WindowMouseX(#Window_0)
    EndIf
   EndIf

   
   
   
 Until event=#PB_Event_CloseWindow
 KillTimer_(WindowID(0),1)
 End

увеличить

Отредактировано Lucagin (05.02.2011 00:27:59)

0

245

Слишком тонкая линия!
Тут наверное нужно запоминать с какой стороны линии находится курсор, иначе при быстром движении, происходит проскакивание.
Что касается прыжков курсора, то наверное неправильно рассчитывается его позиция.
Так вроде работает, но из-за малой ширины линии - проскакивает!

Код:
       If Cvet1=RGB(255, 0, 0) Or Cvet2=RGB(255, 0, 0) Or Cvet3=RGB(255, 0, 0) Or Cvet4=RGB(255, 0, 0)   ; проверяю есть ли красный цвет в районе вершин круга на 3, 6 ,9 и 12 часов...
        Debug Temp\x
        Debug Temp\y
        SetCursorPos_(Temp\x,Temp\y)  
       Else
        GetCursorPos_(@Temp)  
       EndIf

0

246

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

Слишком тонкая линия!Тут наверное нужно запоминать с какой стороны линии находится курсор, иначе при быстром движении, происходит проскакивание.

Просто хотел этот метод с лабиринтом применить. Там, я думаю, отследить координаты курсора и нахождение его относительно стенок будет крайне геморойно… Постоянно пробегать по всему массиву и сверяться с координатами прямых в этой области, где находится курсор врятли получится быстро… тоже наверно будyт проскоки. В варианте с анализом цвета даже при размере линии в 5-ть пикселей проскоки всё равно есть, хотя и заметно меньше…
Надо что-то другое придумать… Сам пробовал подобную программу, где прекрасно шарик движется по лабиринту без всяких проскоков… Как же они это сделали… ??? :dontknow:

Может использование спрайтов как-то решит проблему…?  Уж больно отступать не хочется, столько времени на это уже угрохал :nope:

Видео фрагмент программы, по аналогии с которой хотел сделать: http://ifolder.ru/21720007

Отредактировано Lucagin (05.02.2011 06:53:19)

0

247

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

Может использование спрайтов как-то решит проблему…?

Ясное дело решит. Такого рода программы пишутся в графическом режиме. И на видео явно графический режим.

0

248

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

Ясное дело решит. Такого рода программы пишутся в графическом режиме. И на видео явно графический режим.

Значит пора осваивать эту область PB… :idea:  Буду разбираться…  :writing:

0

249

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

Буду разбираться

Ознакомся с функциями в разделах 2D Games & Multimedia Libraries
И в опциях проекта, установи библиотеку подсистемы DirectX 7
Для этой программы DX7 вполне достаточно и к тому же прога, будет работать на древних компах.

0

250

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

И в опциях проекта, установи библиотеку подсистемы DirectX 7

А можно подробно как это сделать??? Это устанавливается в настройках компилятора? И где взять эту библиотеку???  :question:
И еще вот здесь http://pbasic.spb.ru/phpBB2/viewtopic.php?t=388 обсуждается твоя программа подмены курсора (на курсоры с флагом), в 4-м снизу посте «pablov» доработал программу разместив картинки курсоров в ресурсы. Я так и не понял, где в программе прописываются эти ресурсы. Когда запускаю программу, она требует переназначить каталог с файлами на свои, так и не понял где это делается…  :dontknow: Есть где-нибудь информация про то как работать с  ресурсами в PB???

Отредактировано Lucagin (05.02.2011 17:36:27)

0

251

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

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

Смотри скриншот.
Открой папку с PureBasic и загляни в папку SubSystems.
Там есть папка DirectX7 с соответствующими библиотеками.

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

И еще вот здесь http://pbasic.spb.ru/phpBB2/viewtopic.php?t=388 обсуждается твоя программа подмены курсора (на курсоры с флагом), в 4-м снизу посте «pablov» доработал программу разместив картинки курсоров в ресурсы.

В настройках компилятора, на вкладке "Ресурсы".

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

Когда запускаю программу, она требует переназначить каталог с файлами на свои, так и не понял где это делается

Рядом с исходным текстом, должен быть файл с расширением rc.
Его нужно открыть в текстовом редакторе и указать абсолютный путь к файлам, которые нужно поместить в ресурсы программы.

PS.
Только если будет использоваться графический режим, то в качестве курсора, нужно использовать спрайт, а это может быть как рисунок, формата, BMP, PNG и т. д., или программно созданная картинка.

увеличить

0

252

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

Смотри скриншот.Открой папку с PureBasic и загляни в папку SubSystems.Там есть папка DirectX7 с соответствующими библиотеками.

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

Рядом с исходным текстом, должен быть файл с расширением rc.Его нужно открыть в текстовом редакторе и указать абсолютный путь к файлам, которые нужно поместить в ресурсы программы.

Огромное Спасибо, Пётр, за разъяснения!!!!  Теперь со всем разобрался...!  :flag:

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

0

253

Ребята, возник такой вопрос-идея: :question:  :idea:
У меня есть фотка, предположим 800х600. По большому счету это множество разноцветных пикселей. Т.е. я могу  создать пустое изображение 800х600, загрузить туда картинку и потом командой Point(x, y)считать  цвет в каждом пикселе этой картинки. Потом создать  массив(480000)  или динамический список на требуемое количество пикселей, и записать в каждую ячейку  массива  «цифру» значения цвета в каждом пикселе.
Теперь воросы:
1.Как мне теперь программой сохранить этот массив со значениями (в каком виде) , чтобы потом другая программа могла считать значения массива и с помощью команды Plot(x, y [, Color]) во вновь созданном пустом изображении по этим значениям воссоздать картинку?
2.В каком виде лучше записывать в огромный массив информацию о цвете каждого пикселя, чтобы этот массив занимал меньшее количество памяти???  На сколько я понимаю если сохранять в виде текста, то каждая буква будет занимать 1Байт, на запись каждого значения цвета понадобиться порядка 7-ми букв, т.е в среднем 7 байт. Если использовать число типа Long, то цвет можно будет записать 4-мя байтами… Получается массив лучше назначать типа Long?
3.Имет ли какой-то смысл хранить изображения в таком виде массива, или таскать с собой "обычную" фотку проще и экономичнее, в плане скорости вывода на экран и занимаемой   ею памяти???

Отредактировано Lucagin (07.02.2011 17:35:16)

0

254

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

о большому счету это множество разноцветных пикселей. Т.е. я могу  создать пустое изображение 800х600, загрузить туда картинку и потом командой Point(x, y)считать  цвет в каждом пикселе этой картинки.

Можно.

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

Как мне теперь программой сохранить этот массив со значениями (в каком виде)

Примерно так:

Код:
Image = 0
ImageWidth=ImageWidth(Image)
ImageHeight=ImageHeight(Image)
Dim ArrayImage.l(ImageWidth, ImageHeight)
If StartDrawing(ImageOutput(Image))
  For x=0 To ImageWidth
    For y=0 To ImageHeight
      ArrayImage(x, y) = Point(x, y)
    Next y
  Next x
  StopDrawing()
EndIf
Lucagin написал(а):

Имет ли какой-то смысл хранить изображения в таком виде массива, или таскать с собой "обычную" фотку проще

JPG или PNG фотка лучше. Она будет иметь намного меньший размер, чем массив, размер которого будет сравним с размером BMP рисунка.

0

255

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

Примерно так:

Я наверно не так выразился, как сохранить значения в массив я знаю, а как мне сам массив значений сохранить на диске, чтобы потом из этого сохраненного массива даных, другая программа смогла считать эти данные и построить изображение… В каком виде его лучше сохранять: в виде текстового файла, или какой-то базы данных, чтобы вес этого файла-массива был минимальным?

Отредактировано Lucagin (08.02.2011 00:32:11)

0

256

Сохранение в файле:

Код:
Image = 0
ImageWidth=ImageWidth(Image)
ImageHeight=ImageHeight(Image)
Dim ArrayImage.l(ImageWidth, ImageHeight)
If StartDrawing(ImageOutput(Image))
  For x=0 To ImageWidth
    For y=0 To ImageHeight
      ArrayImage(x, y) = Point(x, y)
    Next y
  Next x
  StopDrawing()
EndIf

If CreateFile(0,"file.bin")
  WriteLong(0, ImageWidth)
  WriteLong(0, ImageHeight)
  WriteData(0,@ArrayImage(), ImageWidth*ImageHeight*4)
  CloseFile(0)
EndIf

Чтение из файла в массив:

Код:
If ReadFile(0,"file.bin")
  ImageWidth=ReadLong(0)
  ImageHeight=ReadLong(0)
  Dim ArrayImage.l(ImageWidth, ImageHeight)
  ReadData(0,@ArrayImage(), ImageWidth*ImageHeight*4)
  CloseFile(0)
EndIf

Здесь все упрощено до предела, но для надежности, нужно еще убедится в целостности данных в файле, ну и можно данные сжать с помощью PackMemory, чтобы меньше места файл занимал на диске.

0

257

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

Здесь все упрощено до предела, но для надежности, нужно еще убедится в целостности данных в файле, ну и можно данные сжать с помощью PackMemory, чтобы меньше места файл занимал на диске.

Спасибо, тонкости я в примерах работы с файлами посмотрю, главное принцип!!! :writing:

А в плане скорости вывода на экран что быстрее вывести Bmp, Jpеg или нарисовать фотку из значений массива…? Ведь  jpеg перед выводом на экран надо еще Декодировать UseJPEGImageDecoder(). Будет ли в случае массива  какой-то выигрыш в скорости или наоборот будет только потери скорости?

0

258

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

А в плане скорости вывода на экран что быстрее вывести Bmp, Jpеg или нарисовать фотку из значений массива…? Ведь  jpеg перед выводом на экран надо еще Декодировать UseJPEGImageDecoder(). Будет ли в случае массива  какой-то выигрыш в скорости или наоборот будет только потери скорости?

Декодирование происходит довольно быстро.
Думаю что использование массива не даст значительного прироста скорости.

0

259

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

Декодирование происходит довольно быстро.Думаю что использование массива не даст значительного прироста скорости.

Понятно, в любом случае, такой способ тоже где-то может пригодиться…. :о)
Еще раз спасибо за примеры и пояснения…!!!

0

260

Есть ещё интересный конвертер изображения в код, может уже видел... может натолкнет на идеи...

http://purebasic.info/phpBB2/viewtopic.php?t=37
http://purebasic.ucoz.com/publ/perevod_ … d/1-1-0-96

0

261

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

Есть ещё интересный конвертер изображения в код, может уже видел... может натолкнет на идеи...

Спасибо, очень интересно, буду изучать...!!! :writing:
И еще, спасибо тебе за твои сайты, очень полезные примеры там и вообще классно сделано!!! :cool:

0

262

Не совсем понятно, как работает округление при разных математических операциях???
Вот пример:

Код:
; Округление при вычитании дробного
Debug 64 - 2.23145
Debug l=(64 - 2.23145)
k=64 - 2.23145
Debug k

Debug ""

Debug 64 - 2.63145
Debug l=(64 - 2.63145)
k=64 - 2.63145
Debug k

; Округление при делении
Debug ""

a.f=213 / 8
Debug "a="+StrF(a)

b=Round(213 / 8,#PB_Round_Nearest)
Debug "b="+Str(b)

c=213 / 8
Debug "c="+Str(c)

Debug 213 / 8
Debug d=213 / 8

Получается, что  при вычитании дробного, при незначительном изменении записи, получается разный результат. Но как правило, получается согласно логике: Result.l = Round(Number.f, #PB_Round_Nearest)
При делении получается, что фактически идет деления нацело, т.е. берется только целая часть, а дробная не влияет на округление и отбрасывается??? Т.е. Деление  идет по логике Result.l = Round(Number.f, #PB_Round_Down). Правильно ли я понимаю правила округления, или что-то не учитываю???

И собственно вопрос, по какому правилу рассчитываются значения в нутри  подобных функций:

Offset.f = 32
For x.l = 220 To 1 Step -1
        Offset + 0.025
        Circle(Offset, 64 - Offset, x / 8, RGB(0, 255 - x, 0))
Next x
Внутри функции Circle(), например значение «64-32.25» будет чему равно??? 31 или 32 ???
И деление скажем 213/8, будет ли равно только целой части от деления, без влияния дробного значения, как получалось из верхнего примера???
Вот, на всякий случай, пример с рисованием, чтобы не составлять…

Код:
Enumeration
  #Window_0
EndEnumeration

Enumeration
  #Image_0
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 565, 85, 204, 204, "Window",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered )
      CreateImage(#Image_0,64,64)
      ImageGadget(#Image_0, 70, 60, 64, 64, Image0)
  EndIf
EndProcedure

Open_Window_0()
Global Offset.f = 32
If StartDrawing(ImageOutput(#Image_0))
        Box(0, 0, 64, 64, RGB(255, 255, 255))
        For x.l = 220 To 1 Step -1
            Offset + 0.025
            Circle(Offset, 64 - Offset, x / 8, RGB(0, 255 - x, 0))
            
            Debug x
            Debug 64 - Offset
              v.l=64 - Offset
            Debug v
            Debug ""
              g.f=(x / 8)
            Debug g
            l.l=x / 8
            Debug l
            Debug x / 8
            Debug ""
            Debug ""

          Next x
    StopDrawing()
       SetGadgetState(#Image_0,ImageID(#Image_0)) 
 EndIf
 
 
 Result.f = Abs(Number.f)

Repeat : event=WaitWindowEvent() : Until event=#PB_Event_CloseWindow

Отредактировано Lucagin (09.02.2011 20:47:54)

0

263

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

Debug l=(64 - 2.23145)

Такие записи не корректны и могут дать совсем не тот результат,что ожидается! Прочитай эту тему http://purebasic.info/phpBB2/viewtopic.php?t=1217

Надо так:

Код:
l=64 - 2.23145
Debug l
Lucagin написал(а):

Внутри функции Circle(), например значение «64-32.25» будет чему равно??? 31 или 32 ???

32

Код:
x=64-32.25
Debug x
Lucagin написал(а):

И деление скажем 213/8, будет ли равно только целой части от деления, без влияния дробного значения, как получалось из верхнего примера???

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

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

Вот, на всякий случай, пример с рисованием, чтобы не составлять…

Разве он неправильно выполняется?

0

264

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

Такие записи не корректны и могут дать совсем не тот результат,что ожидается! Прочитай эту тему http://purebasic.info/phpBB2/viewtopic.php?t=1217

Я тему читал, но она скорее философская, чем четко объясняющая логику компилятора в этих вопросах… :о))  В моем примере скобки на результат вроде  не влияли,но идею я понял, что правильнее в начале определять  переменную... :writing:

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

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

почему тогда с=26 а не 27???

Код:
a.f=213 / 8
Debug "a="+StrF(a)

b=Round(213 / 8,#PB_Round_Nearest)
Debug "b="+Str(b)

c=213 / 8
Debug "c="+Str(c)
Пётр написал(а):

Разве он неправильно выполняется?

Правильно наверно, это пример из раздела  спрайтов, хотел понять логику построения и столкнулся с «округлением»...

Отредактировано Lucagin (09.02.2011 21:59:56)

0

265

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

почему тогда с=26 а не 27???

Значит не зря есть спец. функции для округления.

0

266

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

Значит не зря есть спец. функции для округления.

Т.е. можно точно скачать что внутри функции Circle(), 213/8 ,будет равно 26 и вообще при делении, всегда действует логика «округления в меньшую строну, или тут опять неопределенность и лучше всегда использовать  Round() в таких местах??? :question:

При сложении, вычитании и умножении с дробными числами, работает логика как ты описал «округляет до ближайшего целого числа (0.5 и выше округляются до 1)»

Код:
d.f=0.027*21
Debug d
e=0.027*21
Debug e
Debug""
f.f=21-0.27
Debug f
g=21-0.27
Debug g
Debug""
h.f=21+0.54
Debug h
i=21+0.54
Debug i

Отредактировано Lucagin (09.02.2011 22:35:04)

0

267

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

Т.е. можно точно скачать что внутри функции Circle(), 213/8 ,будет равно 26 и вообще при делении, всегда действует логика «округления в меньшую строну, или тут опять неопределенность и лучше всегда использовать  Round() в таких местах???

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

PS.
Все эти действия (типа x=213/8) выполняются сопроцессором проца, а не программно.

0

268

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

Все эти действия (типа x=213/8) выполняются сопроцессором проца, а не программно.

А интересно, это значение может различаться, при выполнении одного кода на разных процессорах???

РS.
В случае с Circle(), деление так же происходит по логике «округление в меньшую строну».
Применение Round() дает окружность с радиусом на 1-н пиксель больше. Визуально все смотрится практически одинаково, но результаты всетаки разные…

Код:
Enumeration
  #Window_0
EndEnumeration

Enumeration
  #Image_0
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 565, 85, 204, 204, "Window",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered )
      CreateImage(#Image_0,204,204)
      ImageGadget(#Image_0, 0, 0, 204, 204, Image0)
  EndIf
EndProcedure

Open_Window_0()
Global Offset.f = 32
If StartDrawing(ImageOutput(#Image_0))
        Box(0, 0, 204, 204, RGB(255, 255, 255))
        For x.l = 220 To 1 Step -1
            Offset + 0.025
            
            ; Центры шаров остаят друг от друга Х+64, Y+64...
            Circle(Offset, 64 - Offset, x / 8, RGB(0, 255 - x, 0))
            Circle(64+Offset, 64 - Offset, Round(x / 8,#PB_Round_Nearest), RGB(0, 255 - x, 0))
            Circle(Offset, 128 - Offset, Round(x / 8,#PB_Round_Nearest), RGB(0, 255 - x, 0))
            Circle(64+Offset, 128 - Offset, x / 8, RGB(0, 255 - x, 0))
          Next x
          
          LineXY( 32-27, 10,32-27, 32+80,RGB(255,0,0))
          LineXY( 32+27, 10,32+27, 32+80,RGB(255,0,0))
                    
          Color2 = Point(64+32+10, 64-32)
          Color4 = Point(64+32+10, 128-32)
          Debug "Color2="+Str(Color2)
          Debug "Color4="+Str(Color4)
          
          
          
    StopDrawing()
       SetGadgetState(#Image_0,ImageID(#Image_0)) 
 EndIf
 
 
 Result.f = Abs(Number.f)

Repeat : event=WaitWindowEvent() : Until event=#PB_Event_CloseWindow

Отредактировано Lucagin (10.02.2011 00:55:08)

0

269

А есть ли в PB встроенные команды работы с реестром?Всю справку излазил, но не нашел... :question:    Как мне считать значение ключа в реестре: HKEY_CURRENT_USER\Software\Microsof t\Windows\CurrentVersion\Explorer\Shell Folders
ключ: Desktop?
И как еще в PB можно получить путь к папке «рабочий стол»??

Отредактировано Lucagin (10.02.2011 23:23:02)

0

270

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

А есть ли в PB встроенные команды работы с реестром?Всю справку излазил, но не нашел...

PureBasic кроссплатформенный, а в Linux и MacOS X нет реестра как такового. Поэтому встроенных функций тоже нет.
Они есть в библиотеке Droopy.
Смотри их описание в разделе Registry & INI -> Registry

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

И как еще в PB можно получить путь к папке «рабочий стол»??

Так же используем Droooy
Рабочий стол текущего юзера

Код:
Debug GetSpecialFolderLocation(16)

Всех юзеров

Код:
Debug GetSpecialFolderLocation(25)

0


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