PureBasic - форум

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

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


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


Вопросы новичка

Сообщений 211 страница 240 из 1000

211

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

А разве такая запись не очищает?

Очищает.
Это я для примера.
Ну хорошо, может так понятней будет.

Код:
Dim Proba.l(10)
;
; Тут много чего делаем, в т. ч. и заполняем массив
;
For i=0 To 10 ; Очищаем массив
 Proba(i)=0
Next i
daiomik написал(а):

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

Вывод времени это разве не действие.
Может этот пример понятней будет.

Код:
 Procedure Tim()
   Beep_(800, 100) ; Звук из системного динамика
 EndProcedure
 
 OpenWindow(0,20,20,100,50,"Таймер",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 SetTimer_(WindowID(0),1,1000, @Tim())  ; Создание таймера
 Repeat                   
  Event=WaitWindowEvent()
 Until Event=#PB_Event_CloseWindow
daiomik написал(а):

СТранно, что в стандартном наборе PB нет нормального таймера.

А AddWindowTimer что по твоему?

0

212

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

А AddWindowTimer что по твоему?

просто у меня 4,31 PB. Щас переустановлю на новую.

0

213

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

просто у меня 4,31 PB. Щас переустановлю на новую.

Лучше когда в системе не одна версия!

0

214

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

Лучше когда в системе не одна версия!

Да, у меня их 8 установленно. :)

0

215

Вот пример расширения окна. Посмотрите, правильно ли я сделал? И еще: если я не хочу удалять таймер, а планирую только его приостановить, чем нужно воспользоваться?

Код:
Procedure okno() 
If WindowHeight(0)=>60
ResizeWindow(0, #PB_Ignore, #PB_Ignore, #PB_Ignore, WindowHeight(0)+1) 
If WindowHeight(0)=250
KillTimer_(WindowID(0),1)
EndIf 
EndIf 
EndProcedure 

OpenWindow(0, 253, 64, 367, 60,"",#PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
ButtonGadget(1, 120, 15, 115, 25, "Включить таймер")
SmartWindowRefresh(0, 1) 
Repeat
   Event=WaitWindowEvent()
   gadget=EventGadget()
   If event=#PB_Event_Gadget
     If gadget=1
    
          SetTimer_(WindowID(0), 1, 15, @okno() ) 
     EndIf
   EndIf  
  Until Event=#PB_Event_CloseWindow

0

216

Вот пример расширения окна. Посмотрите, правильно ли я сделал? И еще: если я не хочу удалять таймер, а планирую только его приостановить, чем нужно воспользоваться?

На мой взгляд все, что связано с таймером правильно. Что касается паузы, зачем? Когда надо кильнул, когда надо запустил.

0

217

Я анимацию окна делал вообще без таймера.

Код:
Procedure Animate_Winodw(State)
  If State=1 ; Развернуть окно
    For i=110 To 264 Step 2
      ResizeWindow(0,#PB_Ignore,#PB_Ignore,#PB_Ignore ,i )
      SetGadgetState(2,State)
      For x=1 To 10
        WindowEvent()
      Next x
      Delay(8)
    Next i
    
  Else ; Свернуть окно
    For i=264 To 110 Step -2
      ResizeWindow(0,#PB_Ignore,#PB_Ignore,#PB_Ignore ,i )
      SetGadgetState(2,State)
      For x=1 To 10
        WindowEvent()
      Next x
      Delay(8)
    Next i
  EndIf
EndProcedure

OpenWindow(0, 314, 315, 300, 110," - настройки",  #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CheckBoxGadget(2, 10, 90, 230, 15, "Включить слежение за температурой")

Repeat
   Event=WaitWindowEvent()
   If Event=#PB_Event_Gadget
     If EventGadget()=2
       x=GetGadgetState(2)
       Animate_Winodw(x)
     EndIf
   EndIf
   
Until Event=#PB_Event_CloseWindow

0

218

Добрый день. Массив я очистил, видимо дело в чемто другом. Гдето перемудрил. Вылазит ошибка чтото связаное с памятью. Если у кого есть возможность протестировать посмотрите в чем может быть проблема. Все мозги уже выкипели. И ещё вопрос , не могли бы вы на пальцах обьяснить как переводить в юникод исходники, написанные в винде. И почему в дебагере ни каким образом не отражаются русские буквы (в смысле в лине).

0

219

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

Вылазит ошибка чтото связаное с памятью.

Какое нужно выполнить действие, чтобы получить эту ошибку?

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

И ещё вопрос , не могли бы вы на пальцах обьяснить как переводить в юникод исходники, написанные в винде.

Создаём новый документ (открываем новую вкладку в пурике).
Заходим в настройки компилятора (меню "Компилятор" --> "Настройки компилятора") и активируем поддержку юникода редактора и компилятора.
http://s54.radikal.ru/i143/1004/c8/982c9ce6b6db.png

Если в окне нет пункта "Кодировка исходного файла" (версия пурика 4.40 или выше), то выставляем кодировку в меню "Файл".
http://i080.radikal.ru/1004/d9/11b99da0eaf8.png

После этого вводим текст проги или вставляем его из буфера обмена.
Сохраняем данные в файл.
Собственно всё.

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

И почему в дебагере ни каким образом не отражаются русские буквы (в смысле в лине).

Это надо у Фреда спросить.

0

220

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

Какое нужно выполнить действие, чтобы получить эту ошибку?

В топике №206 я привёл исходник в котором,если раскоментировать строки 165,166,167,227,228,229 и переслать с компа на комп папку затем вторую, то при отправке второй папки вылазит ошибка, а если не раскоментировать эти строки то  при передаче второй папки в архив добавляется первая папка.

0

221

Для очистки массивов не нужно их заново создавать, можно так очистить.

Код:
For i=0 To dirnum
  Dirlist$(i)=""
  Filecnt(i)=0
Next i

For i=0 To filenum
  Filelist$(i)=""
Next i

0

222

Большое спасибо. Разобрался. Одна из глобальных переменных хранящая количество пакуемых объектов не обнулялась.
За разъяснение про юникод спасибо вам Пётр, дошло. :idea:

0

223

Задачка такая: Есть некая картинка. Возможно ли сделать так, что бы при наведение на определенную ее часть она становилась активной, то есть можно было ее выбрать, нажать и в связи с тем, на какую часть я нажал уже будут соответствующие действия происходить. Как я думаю решение такой проблемы (замудрил): в гаджет контейнер разбить картинку на те составляющие которые мне нужны и уже отслеживать события отдельный картинок (типа пазлов). Но это решение очень громоздкое и нужно учесть, что на картинке будет около 20-50 составляющих.
PS: прошу прощение за корявый язык :)

0

224

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

Задачка такая: Есть некая картинка. Возможно ли сделать так, что бы при наведение на определенную ее часть она становилась активной, то есть можно было ее выбрать, нажать и в связи с тем, на какую часть я нажал уже будут соответствующие действия происходить. Как я думаю решение такой проблемы (замудрил): в гаджет контейнер разбить картинку на те составляющие которые мне нужны и уже отслеживать события отдельный картинок (типа пазлов). Но это решение очень громоздкое и нужно учесть, что на картинке будет около 20-50 составляющих. PS: прошу прощение за корявый язык

Я честно говоря не очень понял, ты хочешь увеличение по клику сделать?

0

225

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

ты хочешь увеличение по клику сделать?

нет  o.O . ВОт представь: Есть машина (картинка) в положение side (сбоку). Как можно добиться такого эффекта, при котором, при наведению, например, на колесо этой картинки можно было бы нажать ЛКМ и выскочило окно Debug("Колесо"). (В моем случае это другие действия). То же самое происходило при нажатии на области картинки на двери Debug("Дверь").  (Тут снова мое действие). И так далее с другими частями. Понятней?

0

226

Каждая картинка, должна быть в гаджете. Обработку большого кол-ва гаджетов можно посмотреть к примеру в СУДОКУ, там обрабатывается 81 гаджет.

0

227

Все равно при таком выходе четко не получится выделить определенную часть картинки, а просчет идет на каждый миллиметр. Ну вот по рисунку думаю станет понятней:
http://s13.radikal.ru/i186/1004/d0/95142f07569e.jpg

0

228

И с таким подходом, рисунков будет 50-100? Это немалая работа. Придется каждую часть рисунка определять координатами. И заносить потом в код. Здесь не получится шаблонная цикличная структура кода.

0

229

Хм., понятно. Ну буду что нибудь химичить

0

230

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

0

231

Можно ли как нибудь у гаджетов менять фоновый рисунок, а именно у frame 3D gadget??

0

232

Может я не правильно понял вопрос, вот код по  Возможно ли сделать так, что бы при наведение на определенную ее часть она становилась активной
http://www.mirashic.narod.ru/hhh.rar

Картинка одна - фоновая
На ней "ButtonID=ImageGadget" с 0 в качестве идентифик. картинки
Процедура определяющая над каким гаджетом мышка

код шаблонный - добавляешь гаджеты и определяешь над какой частью картинки они расположенны (ставишь в начале просто ButtonGadget, чтоб видеть его размеры и где он расположен )

Отредактировано mirashic (15.04.2010 19:35:54)

0

233

mirashic, да ты гений, спасибо тебе за пример, то что нужно. Осталось разобраться как он работает. Даже фон сделал как мне нужно  :cool:

0

234

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

Можно ли как нибудь у гаджетов менять фоновый рисунок, а именно у frame 3D gadget

Это просто рамка, не подерживающая картинки.

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

Код:
Procedure IsMouseOver(wnd, *x, *y) 
 GetWindowRect_(wnd,re.RECT) 
 GetCursorPos_(pt.POINT)
 Result = PtInRect_(@re, pt\x | (pt\y<<32) )
 If Result
   PokeI(*x, pt\x - re\left)
   PokeI(*y, pt\y - re\top)
 EndIf
ProcedureReturn Result 
EndProcedure 

UseJPEGImageDecoder()
CatchImage(1,?m1,?m2-?m1)
OpenWindow(0,0,0,220,500,"",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
TextGadget(1,10,4,200,16,"Мышь не на рисунке")
ImageGadget(2,4,24,211,471,ImageID(1))

Repeat
  Event=WaitWindowEvent()
  If Event=#WM_MOUSEMOVE
    If IsMouseOver(GadgetID(2), @x, @y) 
      SetGadgetText(1,"X = "+Str(x)+";  Y = "+Str(y))
    Else
      SetGadgetText(1,"Мышь не на рисунке")
    EndIf
  EndIf
Until Event=#PB_Event_CloseWindow
End

DataSection
 m1:
 IncludeBinary "95142f07569e.jpg"
 m2:
EndDataSection

http://depositfiles.com/files/rvzgr6ajk

0

235

Спасибо вам Пётр и mirashic, выручили. Даже идейку с координатами подкинули новую :) Вот проект забабахаю.

0

236

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

Код:
If IsMouseOver(GadgetID(2), @x, @y) 
      SetGadgetText(1,"X = "+Str(x)+";  Y = "+Str(y))

0

237

Примерно так

Код:
    If IsMouseOver(GadgetID(2), @x, @y)
       If x>=80 And x<=122 And y>=20 And y<=80
         SetGadgetText(1,"ГОЛОВА")
       Else
         SetGadgetText(1,"X = "+Str(x)+";  Y = "+Str(y))
       EndIf
    Else
      SetGadgetText(1,"Мышь не на рисунке")
    EndIf

0

238

Такой вопрос: по примеру mirashic пытаюсь сделать изменение курсора, но почему то пишет ошибку в этой строке: If IsMouseOver(GadgetID(2)) и говорит неверное число параматров:

Код:
Procedure EventButton19(Event, Gadget, Type, ImageGadget)  ;   Рука над гаджетами
If Event=#WM_MOUSEMOVE ; Переместилась мышка
 If IsMouseOver(GadgetID(2))
  If x>=80 And x<=122 And y>=20 And y<=80
   myCursor=LoadCursor_(0,#IDC_HAND) ; курсор рука 
   SetCursor_(myCursor) ; курсор рука
  EndIf
 EndIf
EndIf   
EndProcedure

0

239

daiomik ты сам себя запутываешь,  если используешь код Петра, то курсор рука :

       If x>=80 And x<=122 And y>=20 And y<=80
         SetGadgetText(1,"ГОЛОВА")
           SetGadgetText(1,"X = "+Str(x)+";  Y = "+Str(y))
           myCursor=LoadCursor_(0,#IDC_HAND) ; курсор рука
           SetCursor_(myCursor) ; курсор рука
       Else

а если процедура Рука над гаджетами то определять координаты  x и y  не надо.

Отредактировано mirashic (15.04.2010 21:03:07)

0

240

mirashic, точно, не досмотрел малец. Спасибо. Дальше по мозгую сам.))

0


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