PureBasic - форум

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

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


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Рисованный интерфейс программы


Рисованный интерфейс программы

Сообщений 151 страница 180 из 302

151

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

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

К примеру, нам надо узнать что в этих параметрах для события #WM_MOUSEMOVE.
Вводим в гугле WM_MOUSEMOVE и первой же ссылкой будет эта. http://msdn.microsoft.com/en-us/library … p/ms645616
А немного ниже, эта (тоже самое но на русском). http://vsokovikov.narod.ru/New_MSDN_API … semove.htm
Там все написано.

0

152

Спасибо, что-то начинает складыватся. Теперь надо попробовать код написать.

0

153

Привет.
Наткнулся на один момент: если в этом коде раскоментировать 78 строчку, то бегунки по контуру изображения начинают "тормозить". Можно от этого избавится?

Код:
Enumeration 
  #Window_0
  #fon
  #Hide
  #Light_Button_Enable
  #Light_Button
  #Light_Button_On
  #Light_Auto
  #Light_Auto_On
  #Light_Help
  #Light_Help_On
  #Light_Down_Enable
  #Light_Pause
  #Light_Power
  #Light_Mode
  #Light_Tune
  #Light_Battery
  #Knob_pointer_White_Long
  #text
  #H_track
  #V_track  
  #H_knob1
  #H_knob2
  #H_knob3
  #H_knob4
  #H_knob5
  #H_knob6
  #H_knob7
  #H_knob8
  #H_knob9
  #H_knob10  
  #V_knob1
  #V_knob2
  #V_knob3
  #V_knob4
  #V_knob5
  #V_knob6
EndEnumeration

UsePNGImageDecoder()

Procedure Draw_y(x, y, Gadget, ImageID)
  StartDrawing(CanvasOutput(Gadget))
  DrawImage(ImageID(#V_track), 0, 0)
  DrawAlphaImage(ImageID, x, y)
  StopDrawing()
EndProcedure

Procedure Draw_x(x, y, Gadget, ImageID)
  StartDrawing(CanvasOutput(Gadget))
  DrawImage(ImageID(#H_track), 0, 0)
  DrawAlphaImage(ImageID, x, y)
  StopDrawing()
EndProcedure

CatchImage(#H_track, ?H_track)   
CatchImage(#H_knob1, ?H_knob1) 
CatchImage(#H_knob2, ?H_knob2) 
CatchImage(#H_knob3, ?H_knob3)   
CatchImage(#H_knob4, ?H_knob4) 
CatchImage(#H_knob5, ?H_knob5)
CatchImage(#H_knob6, ?H_knob6) 
CatchImage(#H_knob7, ?H_knob7) 
CatchImage(#H_knob8, ?H_knob8)   
CatchImage(#H_knob9, ?H_knob9) 
CatchImage(#H_knob10, ?H_knob10)
CatchImage(#V_track, ?V_track)   
CatchImage(#V_knob1, ?V_knob1) 
CatchImage(#V_knob2, ?V_knob2) 
CatchImage(#V_knob3, ?V_knob3) 
CatchImage(#V_knob4, ?V_knob4) 
CatchImage(#V_knob5, ?V_knob5) 
CatchImage(#V_knob6, ?V_knob6) 
CatchImage(#Light_Button_Enable, ?Light_Button_Enable)

OpenWindow(0, 0, 0, 180, 170, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

;ImageGadget(12,2,2,67,67,ImageID(#Light_Button_Enable))

CanvasGadget(20, 2, 5, 87, 15)
Draw_x(0, 0, 20, ImageID(#H_knob1))
CanvasGadget(21, 2, 20, 87, 15)
Draw_x(0, 0, 21, ImageID(#H_knob2))
CanvasGadget(22, 2, 35, 87, 15)
Draw_x(0, 0, 22, ImageID(#H_knob3))
CanvasGadget(23, 2, 50, 87, 15)
Draw_x(0, 0, 23, ImageID(#H_knob4))
CanvasGadget(24, 2, 65, 87, 15)
Draw_x(0, 0, 24, ImageID(#H_knob5))
CanvasGadget(25, 89, 5, 87, 15)
Draw_x(0, 0, 25, ImageID(#H_knob6))
CanvasGadget(26, 89, 20, 87, 15)
Draw_x(0, 0, 26, ImageID(#H_knob7))
CanvasGadget(27, 89, 35, 87, 15)
Draw_x(0, 0, 27, ImageID(#H_knob8))
CanvasGadget(28, 89, 50, 87, 15)
Draw_x(0, 0, 28, ImageID(#H_knob9))
CanvasGadget(29, 89, 65, 87, 15)
Draw_x(0, 0, 29, ImageID(#H_knob10))
CanvasGadget(30, 20, 80, 15, 87)
Draw_y(0, 0, 30, ImageID(#V_knob1))
CanvasGadget(31, 35, 80, 15, 87)
Draw_y(0, 0, 31, ImageID(#V_knob2))
CanvasGadget(32, 50, 80, 15, 87)
Draw_y(0, 0, 32, ImageID(#V_knob3))
CanvasGadget(33, 65, 80, 15, 87)
Draw_y(0, 0, 33, ImageID(#V_knob4))
CanvasGadget(34, 80, 80, 15, 87)
Draw_y(0, 0, 34, ImageID(#V_knob5))
CanvasGadget(35, 95, 80, 15, 87)
Draw_y(0, 0, 35, ImageID(#V_knob6))

Repeat
  Event =  WaitWindowEvent() 
  
  If Event = #PB_Event_Gadget
    Gadget=EventGadget()
    If Gadget>=30 And Gadget<=35
      Type = EventType()
      
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        y=GetGadgetAttribute(Gadget, #PB_Canvas_MouseY)-12
        If y<0 : y=0 : EndIf
        If y>87-24 : y = 87-24 : EndIf
        Draw_y(0, y, Gadget, ImageID(Gadget))
      EndIf
      
    EndIf
    
  EndIf

  
    If Event = #PB_Event_Gadget
    Gadget=EventGadget()
    If Gadget>=20 And Gadget<=29
      Type = EventType()
      
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        x=GetGadgetAttribute(Gadget, #PB_Canvas_MouseX)-12
        If x<0 : x=0 : EndIf
        If x>87-24 : x = 87-24 : EndIf
        Draw_x(x, 0, Gadget, ImageID(Gadget))
      EndIf
      
    EndIf
      
    EndIf
  
      
Until Event = #PB_Event_CloseWindow


DataSection
;{ ресурсы
 
  H_track:
  IncludeBinary "Files\H.png"
  
  H_knob1:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob2:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob3:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob4:
  IncludeBinary "Files\H-knob3.png"
  
  H_knob5:
  IncludeBinary "Files\H-knob3.png"
    
  H_knob6:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob7:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob8:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob9:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob10:
  IncludeBinary "Files\H-knob2.png"
  
  V_track:
  IncludeBinary "Files\V.png"
  
  V_knob1:
  IncludeBinary "Files\V-knob1.png"
  
  V_knob2:
  IncludeBinary "Files\V-knob2.png"
  
  V_knob3:
  IncludeBinary "Files\V-knob3.png"
  
  V_knob4:
  IncludeBinary "Files\V-knob4.png"
  
  V_knob5:
  IncludeBinary "Files\V-knob5.png"
  
  V_knob6:
  IncludeBinary "Files\V-knob6.png" 
  
 Light_Button_Enable:
 IncludeBinary "Files\Knob_pointer_White_Long.png"
;}
EndDataSection

Отредактировано max (07.05.2012 13:33:27)

0

154

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

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

Смысл в этой строке?

0

155

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

0

156

Код:
ImageGadget(12,2,2,67,67,ImageID(#Light_Button_Enable)) : DisableGadget(12, #True)

0

157

Ага, теперь как надо, спасибо. Ушла и другая проблема: окно нельзя было переместить.

0

158

Сделал изменение курсора:

Код:
      If Event = #PB_Event_Gadget
    Gadget=EventGadget()
    If Gadget>=20 And Gadget<=35
      Type = EventType()
      
      If Type = #PB_EventType_MouseMove 
        GetGadgetAttribute(Gadget, #PB_Canvas_Cursor)
        SetGadgetAttribute(Gadget, #PB_Canvas_Cursor, #PB_Cursor_Hand)
        EndIf
      
    EndIf
      
    EndIf

Теперь осталось сделать подсветку при наведении. Отлавливать планирую через #PB_EventType_MouseMove , а вот как рисунок вставить, проблема. Была идея сделать ImageGadget`ы, отключить их и при наведении активировать. Но так как CanvasGadget не поддерживает прозрачность, даже и не знаю.

0

159

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

Сделал изменение курсора:

Достаточно одного вызова:

Код:
SetGadgetAttribute(Gadget, #PB_Canvas_Cursor, #PB_Cursor_Hand)

после создания Canvas. Повторять многократно не имеет смысла.

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

Теперь осталось сделать подсветку при наведении. Отлавливать планирую через #PB_EventType_MouseMove

Для этого есть пара событий:

Код:
  #PB_EventType_MouseEnter      : The mouse cursor entered the gadget
  #PB_EventType_MouseLeave      : The mouse cursor left the gadget
max написал(а):

а вот как рисунок вставить, проблема.

Почему?
Разве нельзя вставить его в CanvasGadget? Если нет, то почему?

0

160

Код:
        If Event = #PB_Event_Gadget
    Gadget=EventGadget()
      Type = EventType()
         If Type = #PB_EventType_MouseMove 
        SetGadgetAttribute(Gadget, #PB_Canvas_Cursor, #PB_Cursor_Hand)
        EndIf      
    EndIf

Так тоже работает, спасибо.

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

Для этого есть пара событий:

То есть первое - когда курсор над гаджетом, второе- когда покинул?

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

Разве нельзя вставить его в CanvasGadget? Если нет, то почему?

Я тоже об этом думал, только пока не сообразмл, как нужно сделать: процедуру или новые канвасы создавать?

0

161

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

То есть первое - когда курсор над гаджетом

Нет, когда только входит в область гаджета. Затем его сменяет #PB_EventType_MouseMove - перемещение курсора над гаждетом.

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

Я тоже об этом думал, только пока не сообразмл, как нужно сделать

Как и в предыдущих случаях, см. процедуру Draw.

0

162

Если правильно понял:

Код:
Procedure Draw_z(x, y, Gadget, ImageID)
  StartDrawing(CanvasOutput(Gadget))
  ;DrawImage(ImageID(#V_track), 0, 0)
  DrawAlphaImage(ImageID, x, y)
  StopDrawing()
EndProcedure
Код:
CanvasGadget(36, 2, 5, 87, 15)
Draw_z(0, 0, 36, ImageID(#H_knob_Light1))

А вот тут все:

Код:
    If Event = #PB_Event_Gadget
    Gadget=EventGadget()
    If Gadget=36
      Type = EventType()
      
      If Type = #PB_EventType_MouseEnter 
       If Type = #PB_EventType_MouseMove

        Draw_z(0, y, Gadget, ImageID(Gadget))
 EndIf
      EndIf
      
    EndIf
    
  EndI

0

163

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

If Type = #PB_EventType_MouseEnter
       If Type = #PB_EventType_MouseMove

        Draw_z(0, y, Gadget, ImageID(Gadget))
EndIf
      EndIf

Разве одна и та же переменная может иметь одновременно различные значения?
Надо так:

Код:
 If Type = #PB_EventType_MouseEnter Or Type = #PB_EventType_MouseMove
        Draw_z(0, y, Gadget, ImageID(Gadget))
      EndIf

0

164

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

Код:
Enumeration 
  #Window_0
  #fon
  #Hide
  #Light_Button_Enable
  #Light_Button
  #Light_Button_On
  #Light_Auto
  #Light_Auto_On
  #Light_Help
  #Light_Help_On
  #Light_Down_Enable
  #Light_Pause
  #Light_Power
  #Light_Mode
  #Light_Tune
  #Light_Battery
  #Knob_pointer_White_Long
  #text
  #H_track
  #V_track  
  #H_knob1
  #H_knob2
  #H_knob3
  #H_knob4
  #H_knob5
  #H_knob6
  #H_knob7
  #H_knob8
  #H_knob9
  #H_knob10  
  #V_knob1
  #V_knob2
  #V_knob3
  #V_knob4
  #V_knob5
  #V_knob6
  #H_knob_Light1
EndEnumeration

UsePNGImageDecoder()

Procedure Draw_y(x, y, Gadget, ImageID)
  StartDrawing(CanvasOutput(Gadget))
  DrawImage(ImageID(#V_track), 0, 0)
  DrawAlphaImage(ImageID, x, y)
  StopDrawing()
EndProcedure

Procedure Draw_x(x, y, Gadget, ImageID)
  StartDrawing(CanvasOutput(Gadget))
  DrawImage(ImageID(#H_track), 0, 0)
  DrawAlphaImage(ImageID, x, y)
  StopDrawing()
EndProcedure

Procedure Draw_z(x, y, Gadget, ImageID)
  StartDrawing(CanvasOutput(Gadget))
  ;DrawImage(ImageID, x, y)
  DrawAlphaImage(ImageID, x, y)
  StopDrawing()
EndProcedure

CatchImage(#H_track, ?H_track)   
CatchImage(#H_knob1, ?H_knob1) 
CatchImage(#H_knob2, ?H_knob2) 
CatchImage(#H_knob3, ?H_knob3)   
CatchImage(#H_knob4, ?H_knob4) 
CatchImage(#H_knob5, ?H_knob5)
CatchImage(#H_knob6, ?H_knob6) 
CatchImage(#H_knob7, ?H_knob7) 
CatchImage(#H_knob8, ?H_knob8)   
CatchImage(#H_knob9, ?H_knob9) 
CatchImage(#H_knob10, ?H_knob10)
CatchImage(#H_knob_Light1, ?H_knob_Light1)
CatchImage(#V_track, ?V_track)   
CatchImage(#V_knob1, ?V_knob1) 
CatchImage(#V_knob2, ?V_knob2) 
CatchImage(#V_knob3, ?V_knob3) 
CatchImage(#V_knob4, ?V_knob4) 
CatchImage(#V_knob5, ?V_knob5) 
CatchImage(#V_knob6, ?V_knob6) 
CatchImage(#Light_Button_Enable, ?Light_Button_Enable)

OpenWindow(0, 0, 0, 180, 170, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

ImageGadget(12,2,2,67,67,ImageID(#Light_Button_Enable)) : DisableGadget(12, #True)

CanvasGadget(20, 2, 5, 87, 15)
Draw_x(0, 0, 20, ImageID(#H_knob1))
CanvasGadget(21, 2, 20, 87, 15)
Draw_x(0, 0, 21, ImageID(#H_knob2))
CanvasGadget(22, 2, 35, 87, 15)
Draw_x(0, 0, 22, ImageID(#H_knob3))
CanvasGadget(23, 2, 50, 87, 15)
Draw_x(0, 0, 23, ImageID(#H_knob4))
CanvasGadget(24, 2, 65, 87, 15)
Draw_x(0, 0, 24, ImageID(#H_knob5))
CanvasGadget(25, 89, 5, 87, 15)
Draw_x(0, 0, 25, ImageID(#H_knob6))
CanvasGadget(26, 89, 20, 87, 15)
Draw_x(0, 0, 26, ImageID(#H_knob7))
CanvasGadget(27, 89, 35, 87, 15)
Draw_x(0, 0, 27, ImageID(#H_knob8))
CanvasGadget(28, 89, 50, 87, 15)
Draw_x(0, 0, 28, ImageID(#H_knob9))
CanvasGadget(29, 89, 65, 87, 15)
Draw_x(0, 0, 29, ImageID(#H_knob10))
CanvasGadget(30, 20, 80, 15, 87)
Draw_y(0, 0, 30, ImageID(#V_knob1))
CanvasGadget(31, 35, 80, 15, 87)
Draw_y(0, 0, 31, ImageID(#V_knob2))
CanvasGadget(32, 50, 80, 15, 87)
Draw_y(0, 0, 32, ImageID(#V_knob3))
CanvasGadget(33, 65, 80, 15, 87)
Draw_y(0, 0, 33, ImageID(#V_knob4))
CanvasGadget(34, 80, 80, 15, 87)
Draw_y(0, 0, 34, ImageID(#V_knob5))
CanvasGadget(35, 95, 80, 15, 87)
Draw_y(0, 0, 35, ImageID(#V_knob6))
CanvasGadget(36, 2, 5, 87, 15)
Draw_z(0, 0, 36, ImageID(#H_knob_Light1))

Repeat
  Event =  WaitWindowEvent() 
  
  If Event = #PB_Event_Gadget
    Gadget=EventGadget()
    If Gadget>=30 And Gadget<=35
      Type = EventType()
      
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        y=GetGadgetAttribute(Gadget, #PB_Canvas_MouseY)-12
        If y<0 : y=0 : EndIf
        If y>87-24 : y = 87-24 : EndIf
        Draw_y(0, y, Gadget, ImageID(Gadget))
      EndIf
      
    EndIf
    
  EndIf

  
    If Event = #PB_Event_Gadget
    Gadget=EventGadget()
    If Gadget>=20 And Gadget<=29
      Type = EventType()
      
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        x=GetGadgetAttribute(Gadget, #PB_Canvas_MouseX)-12
        If x<0 : x=0 : EndIf
        If x>87-24 : x = 87-24 : EndIf
        Draw_x(x, 0, Gadget, ImageID(Gadget))
      EndIf
      
    EndIf
      
  EndIf
  
    If Event = #PB_Event_Gadget
    Gadget=EventGadget()
    If Gadget=36
      Type = EventType()
      
      If Type = #PB_EventType_MouseEnter Or Type = #PB_EventType_MouseMove
        Draw_z(0, 0, Gadget, ImageID(Gadget))
      EndIf
        
    EndIf
    
  EndIf
  
        If Event = #PB_Event_Gadget
    Gadget=EventGadget()
    ;If Gadget>=20 And Gadget<=35
      Type = EventType()
      
      If Type = #PB_EventType_MouseMove 
        ;GetGadgetAttribute(Gadget, #PB_Canvas_Cursor)
        SetGadgetAttribute(Gadget, #PB_Canvas_Cursor, #PB_Cursor_Hand)
        EndIf
      
    ;EndIf
      
    EndIf
  
      
Until Event = #PB_Event_CloseWindow


DataSection
;{ ресурсы
 
  H_track:
  IncludeBinary "Files\H.png"
  
  H_knob1:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob2:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob3:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob4:
  IncludeBinary "Files\H-knob3.png"
  
  H_knob5:
  IncludeBinary "Files\H-knob3.png"
    
  H_knob6:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob7:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob8:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob9:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob10:
  IncludeBinary "Files\H-knob2.png"
  
  V_track:
  IncludeBinary "Files\V.png"
  
  V_knob1:
  IncludeBinary "Files\V-knob1.png"
  
  V_knob2:
  IncludeBinary "Files\V-knob2.png"
  
  V_knob3:
  IncludeBinary "Files\V-knob3.png"
  
  V_knob4:
  IncludeBinary "Files\V-knob4.png"
  
  V_knob5:
  IncludeBinary "Files\V-knob5.png"
  
  V_knob6:
  IncludeBinary "Files\V-knob6.png" 
  
  H_knob_Light1:
  IncludeBinary "Files\H-knob1_Light.png"
  
 Light_Button_Enable:
 IncludeBinary "Files\Knob_pointer_White_Long.png"
;}
EndDataSection

Чуствую надо еще координаты передавать через #PB_Canvas_MouseX, #PB_Canvas_MouseY:

Код:
х = GetGadgetAttribute (Gadget, #PB_Canvas_MouseX) 
у = GetGadgetAttribute (Gadget, #PB_Canvas_MouseY)

Отредактировано max (07.05.2012 21:58:24)

0

165

Попробовал так:

Код:
Enumeration 
  #Window_0
  #fon
  #Hide
  #Light_Button_Enable
  #Light_Button
  #Light_Button_On
  #Light_Auto
  #Light_Auto_On
  #Light_Help
  #Light_Help_On
  #Light_Down_Enable
  #Light_Pause
  #Light_Power
  #Light_Mode
  #Light_Tune
  #Light_Battery
  #Knob_pointer_White_Long
  #text
  #H_track
  #V_track  
  #H_knob1
  #H_knob2
  #H_knob3
  #H_knob4
  #H_knob5
  #H_knob6
  #H_knob7
  #H_knob8
  #H_knob9
  #H_knob10  
  #V_knob1
  #V_knob2
  #V_knob3
  #V_knob4
  #V_knob5
  #V_knob6
  #H_knob_Light1
EndEnumeration

UsePNGImageDecoder()

Procedure Draw_y(x, y, Gadget, ImageID)
  StartDrawing(CanvasOutput(Gadget))
  DrawImage(ImageID(#V_track), 0, 0)
  DrawAlphaImage(ImageID, x, y)
  StopDrawing()
EndProcedure

Procedure Draw_x(x, y, Gadget, ImageID)
  StartDrawing(CanvasOutput(Gadget))
  DrawImage(ImageID(#H_track), 0, 0)
  DrawAlphaImage(ImageID, x, y)
  StopDrawing()
EndProcedure

Procedure Draw_z(x, y, Gadget, ImageID)
  StartDrawing(CanvasOutput(Gadget))
  DrawImage(ImageID(#H_track), 0, 0)
  DrawAlphaImage(ImageID, x, y)
  StopDrawing()
EndProcedure

CatchImage(#H_track, ?H_track)   
CatchImage(#H_knob1, ?H_knob1) 
CatchImage(#H_knob2, ?H_knob2) 
CatchImage(#H_knob3, ?H_knob3)   
CatchImage(#H_knob4, ?H_knob4) 
CatchImage(#H_knob5, ?H_knob5)
CatchImage(#H_knob6, ?H_knob6) 
CatchImage(#H_knob7, ?H_knob7) 
CatchImage(#H_knob8, ?H_knob8)   
CatchImage(#H_knob9, ?H_knob9) 
CatchImage(#H_knob10, ?H_knob10)
CatchImage(#H_knob_Light1, ?H_knob_Light1)
CatchImage(#V_track, ?V_track)   
CatchImage(#V_knob1, ?V_knob1) 
CatchImage(#V_knob2, ?V_knob2) 
CatchImage(#V_knob3, ?V_knob3) 
CatchImage(#V_knob4, ?V_knob4) 
CatchImage(#V_knob5, ?V_knob5) 
CatchImage(#V_knob6, ?V_knob6) 
CatchImage(#Light_Button_Enable, ?Light_Button_Enable)

OpenWindow(0, 0, 0, 180, 170, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

ImageGadget(12,2,2,67,67,ImageID(#Light_Button_Enable)) : DisableGadget(12, #True)

CanvasGadget(20, 2, 5, 87, 15)
Draw_x(0, 0, 20, ImageID(#H_knob1))
CanvasGadget(21, 2, 20, 87, 15)
Draw_x(0, 0, 21, ImageID(#H_knob2))
CanvasGadget(22, 2, 35, 87, 15)
Draw_x(0, 0, 22, ImageID(#H_knob3))
CanvasGadget(23, 2, 50, 87, 15)
Draw_x(0, 0, 23, ImageID(#H_knob4))
CanvasGadget(24, 2, 65, 87, 15)
Draw_x(0, 0, 24, ImageID(#H_knob5))
CanvasGadget(25, 89, 5, 87, 15)
Draw_x(0, 0, 25, ImageID(#H_knob6))
CanvasGadget(26, 89, 20, 87, 15)
Draw_x(0, 0, 26, ImageID(#H_knob7))
CanvasGadget(27, 89, 35, 87, 15)
Draw_x(0, 0, 27, ImageID(#H_knob8))
CanvasGadget(28, 89, 50, 87, 15)
Draw_x(0, 0, 28, ImageID(#H_knob9))
CanvasGadget(29, 89, 65, 87, 15)
Draw_x(0, 0, 29, ImageID(#H_knob10))
CanvasGadget(30, 20, 80, 15, 87)
Draw_y(0, 0, 30, ImageID(#V_knob1))
CanvasGadget(31, 35, 80, 15, 87)
Draw_y(0, 0, 31, ImageID(#V_knob2))
CanvasGadget(32, 50, 80, 15, 87)
Draw_y(0, 0, 32, ImageID(#V_knob3))
CanvasGadget(33, 65, 80, 15, 87)
Draw_y(0, 0, 33, ImageID(#V_knob4))
CanvasGadget(34, 80, 80, 15, 87)
Draw_y(0, 0, 34, ImageID(#V_knob5))
CanvasGadget(35, 95, 80, 15, 87)
Draw_y(0, 0, 35, ImageID(#V_knob6))
CanvasGadget(36, 2, 5, 87, 15)
Draw_z(4, 0, 36, ImageID(#H_knob_Light1))

Repeat
  Event =  WaitWindowEvent() 
  
  If Event = #PB_Event_Gadget
    Gadget=EventGadget()
    If Gadget>=30 And Gadget<=35
      Type = EventType()
      
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        y=GetGadgetAttribute(Gadget, #PB_Canvas_MouseY)-12
        If y<0 : y=0 : EndIf
        If y>87-24 : y = 87-24 : EndIf
        Draw_y(0, y, Gadget, ImageID(Gadget))
      EndIf
      
    EndIf
    
  EndIf

  
    If Event = #PB_Event_Gadget
    Gadget=EventGadget()
    If Gadget>=20 And Gadget<=29
      Type = EventType()
      
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        x=GetGadgetAttribute(Gadget, #PB_Canvas_MouseX)-12
        If x<0 : x=0 : EndIf
        If x>87-24 : x = 87-24 : EndIf
        Draw_x(x, 0, Gadget, ImageID(Gadget))
      EndIf
      
    EndIf
      
  EndIf
  
    If Event = #PB_Event_Gadget
    Gadget=EventGadget()
    If Gadget=36
      Type = EventType()
      
      If Type = #PB_EventType_MouseEnter Or Type = #PB_EventType_MouseMove
        x=GetGadgetAttribute(Gadget, #PB_Canvas_MouseX) 
        y=GetGadgetAttribute(Gadget, #PB_Canvas_MouseY)
        Draw_z(x, y, Gadget, ImageID(Gadget))
      EndIf
        
    EndIf
    
  EndIf
  
        If Event = #PB_Event_Gadget
    Gadget=EventGadget()
    ;If Gadget>=20 And Gadget<=35
      Type = EventType()
      
      If Type = #PB_EventType_MouseMove 
        ;GetGadgetAttribute(Gadget, #PB_Canvas_Cursor)
        SetGadgetAttribute(Gadget, #PB_Canvas_Cursor, #PB_Cursor_Hand)
        EndIf
      
    ;EndIf
      
    EndIf
  
      
Until Event = #PB_Event_CloseWindow


DataSection
;{ ресурсы
 
  H_track:
  IncludeBinary "Files\H.png"
  
  H_knob1:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob2:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob3:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob4:
  IncludeBinary "Files\H-knob3.png"
  
  H_knob5:
  IncludeBinary "Files\H-knob3.png"
    
  H_knob6:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob7:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob8:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob9:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob10:
  IncludeBinary "Files\H-knob2.png"
  
  V_track:
  IncludeBinary "Files\V.png"
  
  V_knob1:
  IncludeBinary "Files\V-knob1.png"
  
  V_knob2:
  IncludeBinary "Files\V-knob2.png"
  
  V_knob3:
  IncludeBinary "Files\V-knob3.png"
  
  V_knob4:
  IncludeBinary "Files\V-knob4.png"
  
  V_knob5:
  IncludeBinary "Files\V-knob5.png"
  
  V_knob6:
  IncludeBinary "Files\V-knob6.png" 
  
  H_knob_Light1:
  IncludeBinary "Files\H-knob1_Light.png"
  
 Light_Button_Enable:
 IncludeBinary "Files\Knob_pointer_White_Long.png"
;}
EndDataSection

В результате это:
http://uploads.ru/i/t/2/V/t2VHm.png
Что-то не так в процедуре?

Отредактировано max (07.05.2012 22:19:48)

0

166

Что-то не соображу, гдг не так сделал. Может кто ткнуть носом?

0

167

По порядку.
Это сообщение было проигнорировано. Вопросы новичка (продолжение…)

после создания Canvas. Повторять многократно не имеет смысла.

Я думал что это побудит убрать строки из главного цикла программы:

Код:
  If Event = #PB_Event_Gadget
    Gadget=EventGadget()
    ;If Gadget>=20 And Gadget<=35
    Type = EventType()
    
    If Type = #PB_EventType_MouseMove 
      ;GetGadgetAttribute(Gadget, #PB_Canvas_Cursor)
      SetGadgetAttribute(Gadget, #PB_Canvas_Cursor, #PB_Cursor_Hand)
    EndIf
    
    ;EndIf
    
  EndIf

которые одно заменить на цикл, расположенный сразу после создания гаджетов (до главного цикла).

Код:
For i=20 To 36
  SetGadgetAttribute(i, #PB_Canvas_Cursor, #PB_Cursor_Hand)
Next i
max написал(а):

Что-то не соображу, гдг не так сделал. Может кто ткнуть носом?

Это что и зачем?

Код:
  If Event = #PB_Event_Gadget
    Gadget=EventGadget()
    If Gadget=36
      Type = EventType()
      
      If Type = #PB_EventType_MouseEnter Or Type = #PB_EventType_MouseMove
        x=GetGadgetAttribute(Gadget, #PB_Canvas_MouseX) 
        y=GetGadgetAttribute(Gadget, #PB_Canvas_MouseY)
        Draw_z(x, y, Gadget, ImageID(Gadget))
      EndIf
      
    EndIf
    
  EndIf

Как этот код должен работать? Что выполнять?

--------------------------

Теперь давай включим логику и подумаем.
Нам нужно нарисовать на Canvas, фон регулятора, затем, если курсор на нем, то еще и подсветку, а затем бегунок (именно в такой последовательности, поскольку рисунки накладываются друг на друга). А что в коде?

Код (только горизонтальные регуляторы, а сделать подсветку вертикальных (по аналогии с горизонтальными), будет домашним заданием).

Код:
Enumeration 
  #Window_0
  #fon
  #Hide
  #Light_Button_Enable
  #Light_Button
  #Light_Button_On
  #Light_Auto
  #Light_Auto_On
  #Light_Help
  #Light_Help_On
  #Light_Down_Enable
  #Light_Pause
  #Light_Power
  #Light_Mode
  #Light_Tune
  #Light_Battery
  #Knob_pointer_White_Long
  #text
  #H_track
  #V_track  
  #H_knob1
  #H_knob2
  #H_knob3
  #H_knob4
  #H_knob5
  #H_knob6
  #H_knob7
  #H_knob8
  #H_knob9
  #H_knob10  
  #V_knob1
  #V_knob2
  #V_knob3
  #V_knob4
  #V_knob5
  #V_knob6
  #H_knob_Light1
EndEnumeration

UsePNGImageDecoder()

Procedure Draw_y(x, y, Gadget, ImageID, Active_ImID=0)
  StartDrawing(CanvasOutput(Gadget))
  DrawImage(ImageID(#V_track), 0, 0)
  If Active_ImID
    DrawAlphaImage(Active_ImID, 0, 0)
  EndIf
  DrawAlphaImage(ImageID, x, y)
  StopDrawing()
EndProcedure

Procedure Draw_x(x, y, Gadget, ImageID, Active_ImID=0)
  StartDrawing(CanvasOutput(Gadget))
  DrawImage(ImageID(#H_track), 0, 0)
  If Active_ImID
    DrawAlphaImage(Active_ImID, 4, 0)
  EndIf
  DrawAlphaImage(ImageID, x, y)
  StopDrawing()
EndProcedure


CatchImage(#H_track, ?H_track)   
CatchImage(#H_knob1, ?H_knob1) 
CatchImage(#H_knob2, ?H_knob2) 
CatchImage(#H_knob3, ?H_knob3)   
CatchImage(#H_knob4, ?H_knob4) 
CatchImage(#H_knob5, ?H_knob5)
CatchImage(#H_knob6, ?H_knob6) 
CatchImage(#H_knob7, ?H_knob7) 
CatchImage(#H_knob8, ?H_knob8)   
CatchImage(#H_knob9, ?H_knob9) 
CatchImage(#H_knob10, ?H_knob10)
CatchImage(#H_knob_Light1, ?H_knob_Light1)
CatchImage(#V_track, ?V_track)   
CatchImage(#V_knob1, ?V_knob1) 
CatchImage(#V_knob2, ?V_knob2) 
CatchImage(#V_knob3, ?V_knob3) 
CatchImage(#V_knob4, ?V_knob4) 
CatchImage(#V_knob5, ?V_knob5) 
CatchImage(#V_knob6, ?V_knob6) 
CatchImage(#Light_Button_Enable, ?Light_Button_Enable)

OpenWindow(0, 0, 0, 180, 170, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

ImageGadget(12,2,2,67,67,ImageID(#Light_Button_Enable)) : DisableGadget(12, #True)

CanvasGadget(20, 2, 5, 87, 15)
Draw_x(0, 0, 20, ImageID(#H_knob1))
CanvasGadget(21, 2, 20, 87, 15)
Draw_x(0, 0, 21, ImageID(#H_knob2))
CanvasGadget(22, 2, 35, 87, 15)
Draw_x(0, 0, 22, ImageID(#H_knob3))
CanvasGadget(23, 2, 50, 87, 15)
Draw_x(0, 0, 23, ImageID(#H_knob4))
CanvasGadget(24, 2, 65, 87, 15)
Draw_x(0, 0, 24, ImageID(#H_knob5))
CanvasGadget(25, 89, 5, 87, 15)
Draw_x(0, 0, 25, ImageID(#H_knob6))
CanvasGadget(26, 89, 20, 87, 15)
Draw_x(0, 0, 26, ImageID(#H_knob7))
CanvasGadget(27, 89, 35, 87, 15)
Draw_x(0, 0, 27, ImageID(#H_knob8))
CanvasGadget(28, 89, 50, 87, 15)
Draw_x(0, 0, 28, ImageID(#H_knob9))
CanvasGadget(29, 89, 65, 87, 15)
Draw_x(0, 0, 29, ImageID(#H_knob10))
CanvasGadget(30, 20, 80, 15, 87)
Draw_y(0, 0, 30, ImageID(#V_knob1))
CanvasGadget(31, 35, 80, 15, 87)
Draw_y(0, 0, 31, ImageID(#V_knob2))
CanvasGadget(32, 50, 80, 15, 87)
Draw_y(0, 0, 32, ImageID(#V_knob3))
CanvasGadget(33, 65, 80, 15, 87)
Draw_y(0, 0, 33, ImageID(#V_knob4))
CanvasGadget(34, 80, 80, 15, 87)
Draw_y(0, 0, 34, ImageID(#V_knob5))
CanvasGadget(35, 95, 80, 15, 87)
Draw_y(0, 0, 35, ImageID(#V_knob6))
CanvasGadget(36, 2, 5, 87, 15)
Draw_x(0, 0, 36, ImageID(#H_knob1))


For i=20 To 36
  SetGadgetAttribute(i, #PB_Canvas_Cursor, #PB_Cursor_Hand)
Next i

Repeat
  Event =  WaitWindowEvent() 
  
  If Event = #PB_Event_Gadget
    Gadget=EventGadget()
    If Gadget>=30 And Gadget<=35
      Type = EventType()
      
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        y=GetGadgetAttribute(Gadget, #PB_Canvas_MouseY)-12
        If y<0 : y=0 : EndIf
        If y>87-24 : y = 87-24 : EndIf
        
        Draw_y(0, y, Gadget, ImageID(Gadget), 0)
      EndIf
      
    EndIf
    
    
    If Gadget>=20 And Gadget<=29
      Type = EventType()
      
      ; Перемещение бегунка.
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        x=GetGadgetAttribute(Gadget, #PB_Canvas_MouseX)-12
        If x<0 : x=0 : EndIf
        If x>87-24 : x = 87-24 : EndIf
        
        Draw_x(x, 0, Gadget, ImageID(Gadget), ImageID(#H_knob_Light1))
        SetGadgetData(Gadget, x)
        
      ; Мышка или вошла в пределы регулятора или вышла из него.
      ElseIf Type = #PB_EventType_MouseEnter Or Type = #PB_EventType_MouseLeave
        
        If Type = #PB_EventType_MouseLeave ; Мышь вышла с пределов регулятора.
          Active_ImID=0
        Else
          Active_ImID=ImageID(#H_knob_Light1)
        EndIf
        x=GetGadgetData(Gadget)
        Draw_x(x, 0, Gadget, ImageID(Gadget), Active_ImID)
        
      EndIf
      
    EndIf
    
    
  EndIf
  

  
  
Until Event = #PB_Event_CloseWindow


DataSection
  ;{ ресурсы
  
  H_track:
  IncludeBinary "Files\H.png"
  
  H_knob1:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob2:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob3:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob4:
  IncludeBinary "Files\H-knob3.png"
  
  H_knob5:
  IncludeBinary "Files\H-knob3.png"
  
  H_knob6:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob7:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob8:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob9:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob10:
  IncludeBinary "Files\H-knob2.png"
  
  V_track:
  IncludeBinary "Files\V.png"
  
  V_knob1:
  IncludeBinary "Files\V-knob1.png"
  
  V_knob2:
  IncludeBinary "Files\V-knob2.png"
  
  V_knob3:
  IncludeBinary "Files\V-knob3.png"
  
  V_knob4:
  IncludeBinary "Files\V-knob4.png"
  
  V_knob5:
  IncludeBinary "Files\V-knob5.png"
  
  V_knob6:
  IncludeBinary "Files\V-knob6.png" 
  
  H_knob_Light1:
  IncludeBinary "Files\H-knob1_Light.png"
  
  Light_Button_Enable:
  IncludeBinary "Files\Knob_pointer_White_Long.png"
  ;}
EndDataSection

0

168

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

Я думал что это побудит убрать строки из главного цикла программы:
которые одно заменить на цикл, расположенный сразу после создания гаджетов (до главного цикла).
А что в коде?

Балбес, согласен.

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

Что выполнять?

Ну типа передавать положение курсора, результат написал выше.

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

Код (только горизонтальные регуляторы, а сделать подсветку вертикальных (по аналогии с горизонтальными), будет домашним заданием).

Спасибо, пошел выполнять. :)

Отредактировано max (08.05.2012 12:42:35)

0

169

Выполнил:

Код:
    If Gadget>=30 And Gadget<=35
      Type = EventType()
     ; Перемещение вертикального бегунка. 
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        y=GetGadgetAttribute(Gadget, #PB_Canvas_MouseY)-12
        If y<0 : y=0 : EndIf
        If y>87-24 : y = 87-24 : EndIf
        
        Draw_y(0, y, Gadget, ImageID(Gadget), ImageID(#V_knob_Light1))
        SetGadgetData(Gadget, y)
        ; Мышка или вошла в пределы регулятора или вышла из него.
        ElseIf Type = #PB_EventType_MouseEnter Or Type = #PB_EventType_MouseLeave
        
        If Type = #PB_EventType_MouseLeave ; Мышь вышла с передлов регулятора.
          Active_ImID=0
        Else
          Active_ImID=ImageID(#V_knob_Light1)
        EndIf
        y=GetGadgetData(Gadget)
        Draw_y(0, y, Gadget, ImageID(Gadget), Active_ImID)
        
      EndIf
      
    EndIf

Теперь согласно картинке:
http://uploads.ru/i/u/4/X/u4XE7.png
Самый простой способ(но не оптимальный), на мой взглад, это как то так:

Код:
    If Gadget>=20 And Gadget<=22
      Type = EventType()
    ; Перемещение горизонтального бегунка.
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        x=GetGadgetAttribute(Gadget, #PB_Canvas_MouseX)-12
        If x<0 : x=0 : EndIf
        If x>87-24 : x = 87-24 : EndIf
        
        Draw_x(x, 0, Gadget, ImageID(Gadget), ImageID(#H_knob_Light1))
        SetGadgetData(Gadget, x)
        
      ; Мышка или вошла в пределы регулятора или вышла из него.
      ElseIf Type = #PB_EventType_MouseEnter Or Type = #PB_EventType_MouseLeave
        
        If Type = #PB_EventType_MouseLeave ; Мышь вышла с передлов регулятора.
          Active_ImID=0
        Else
          Active_ImID=ImageID(#H_knob_Light1)
        EndIf
        x=GetGadgetData(Gadget)
        Draw_x(x, 0, Gadget, ImageID(Gadget), Active_ImID)
        
      EndIf
      
    EndIf

    If Gadget>=23 And Gadget<=24
      Type = EventType()
    ; Перемещение горизонтального бегунка.
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        x=GetGadgetAttribute(Gadget, #PB_Canvas_MouseX)-12
        If x<0 : x=0 : EndIf
        If x>87-24 : x = 87-24 : EndIf
        
        Draw_x(x, 0, Gadget, ImageID(Gadget), ImageID(#H_knob_Light2))
        SetGadgetData(Gadget, x)
        
      ; Мышка или вошла в пределы регулятора или вышла из него.
      ElseIf Type = #PB_EventType_MouseEnter Or Type = #PB_EventType_MouseLeave
        
        If Type = #PB_EventType_MouseLeave ; Мышь вышла с передлов регулятора.
          Active_ImID=0
        Else
          Active_ImID=ImageID(#H_knob_Light2)
        EndIf
        x=GetGadgetData(Gadget)
        Draw_x(x, 0, Gadget, ImageID(Gadget), Active_ImID)
        
      EndIf
      
    EndIf

    If Gadget>=25 And Gadget<=29
      Type = EventType()
    ; Перемещение горизонтального бегунка.
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        x=GetGadgetAttribute(Gadget, #PB_Canvas_MouseX)-12
        If x<0 : x=0 : EndIf
        If x>87-24 : x = 87-24 : EndIf
        
        Draw_x(x, 0, Gadget, ImageID(Gadget), ImageID(#H_knob_Light3))
        SetGadgetData(Gadget, x)
        
      ; Мышка или вошла в пределы регулятора или вышла из него.
      ElseIf Type = #PB_EventType_MouseEnter Or Type = #PB_EventType_MouseLeave
        
        If Type = #PB_EventType_MouseLeave ; Мышь вышла с передлов регулятора.
          Active_ImID=0
        Else
          Active_ImID=ImageID(#H_knob_Light3)
        EndIf
        x=GetGadgetData(Gadget)
        Draw_x(x, 0, Gadget, ImageID(Gadget), Active_ImID)
        
      EndIf
      
    EndIf

ну или добавить еще один параметр в процедуру, который при определенном гаджете будет загружать поределенный рисунок. Я прав?

Отредактировано max (08.05.2012 14:11:55)

0

170

А если сделать так?

Код:
      If Gadget>=20 And Gadget<=22
        Active_ImID=ImageID(#H_knob_Light1)
      ElseIf Gadget>=23 And Gadget<=24
        Active_ImID=ImageID(#H_knob_Light2)
      ElseIf Gadget>=25 And Gadget<=29
        Active_ImID=ImageID(#H_knob_Light3)
      EndIf
      
      Type = EventType()
    ; Перемещение горизонтального бегунка.
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        x=GetGadgetAttribute(Gadget, #PB_Canvas_MouseX)-12
        If x<0 : x=0 : EndIf
        If x>87-24 : x = 87-24 : EndIf
        
        Draw_x(x, 0, Gadget, ImageID(Gadget), Active_ImID)
        SetGadgetData(Gadget, x)
        
      ; Мышка или вошла в пределы регулятора или вышла из него.
      ElseIf Type = #PB_EventType_MouseEnter Or Type = #PB_EventType_MouseLeave
        
        If Type = #PB_EventType_MouseLeave ; Мышь вышла с пределов регулятора.
          Active_ImID=0
        EndIf
        x=GetGadgetData(Gadget)
        Draw_x(x, 0, Gadget, ImageID(Gadget), Active_ImID)
        
      EndIf

0

171

Ну да, так проще, согласен.

0

172

Чет ни чего не понимаю: сделал

Код:
Enumeration 
  #Window_0
  #fon
  #Hide
  #Light_Button_Enable
  #Light_Button
  #Light_Button_On
  #Light_Auto
  #Light_Auto_On
  #Light_Help
  #Light_Help_On
  #Light_Down_Enable
  #Light_Pause
  #Light_Power
  #Light_Mode
  #Light_Tune
  #Light_Battery
  #Knob_pointer_White_Long
  #text
  #H_track
  #V_track  
  #H_knob1
  #H_knob2
  #H_knob3
  #H_knob4
  #H_knob5
  #H_knob6
  #H_knob7
  #H_knob8
  #H_knob9
  #H_knob10  
  #V_knob1
  #V_knob2
  #V_knob3
  #V_knob4
  #V_knob5
  #V_knob6
  #H_knob_Light1
  #H_knob_Light2
  #H_knob_Light3
  #V_knob_Light1
  #V_knob_Light2
  #V_knob_Light3
EndEnumeration

UsePNGImageDecoder()

Procedure Draw_y(x, y, Gadget, ImageID, Active_ImID=0)
  StartDrawing(CanvasOutput(Gadget))
  DrawImage(ImageID(#V_track), 0, 0)
  If Active_ImID
    DrawAlphaImage(Active_ImID, 0, 4)
  EndIf
  DrawAlphaImage(ImageID, x, y)
  StopDrawing()
EndProcedure

Procedure Draw_x(x, y, Gadget, ImageID, Active_ImID=0)
  StartDrawing(CanvasOutput(Gadget))
  DrawImage(ImageID(#H_track), 0, 0)
  If Active_ImID
    DrawAlphaImage(Active_ImID, 4, 0)
  EndIf
  DrawAlphaImage(ImageID, x, y)
  StopDrawing()
EndProcedure


CatchImage(#H_track, ?H_track)   
CatchImage(#H_knob1, ?H_knob1) 
CatchImage(#H_knob2, ?H_knob2) 
CatchImage(#H_knob3, ?H_knob3)   
CatchImage(#H_knob4, ?H_knob4) 
CatchImage(#H_knob5, ?H_knob5)
CatchImage(#H_knob6, ?H_knob6) 
CatchImage(#H_knob7, ?H_knob7) 
CatchImage(#H_knob8, ?H_knob8)   
CatchImage(#H_knob9, ?H_knob9) 
CatchImage(#H_knob10, ?H_knob10)
CatchImage(#H_knob_Light1, ?H_knob_Light1)
CatchImage(#H_knob_Light2, ?H_knob_Light2)
CatchImage(#H_knob_Light3, ?H_knob_Light3)
CatchImage(#V_knob_Light1, ?V_knob_Light1)
CatchImage(#V_knob_Light2, ?V_knob_Light2)
CatchImage(#V_knob_Light3, ?V_knob_Light3)
CatchImage(#V_track, ?V_track)   
CatchImage(#V_knob1, ?V_knob1) 
CatchImage(#V_knob2, ?V_knob2) 
CatchImage(#V_knob3, ?V_knob3) 
CatchImage(#V_knob4, ?V_knob4) 
CatchImage(#V_knob5, ?V_knob5) 
CatchImage(#V_knob6, ?V_knob6) 
CatchImage(#Light_Button_Enable, ?Light_Button_Enable)

OpenWindow(0, 0, 0, 180, 170, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

;ImageGadget(12,2,2,67,67,ImageID(#Light_Button_Enable)) : DisableGadget(12, #True)

CanvasGadget(20, 2, 5, 87, 15)
Draw_x(0, 0, 20, ImageID(#H_knob1))
CanvasGadget(21, 2, 20, 87, 15)
Draw_x(0, 0, 21, ImageID(#H_knob2))
CanvasGadget(22, 2, 35, 87, 15)
Draw_x(0, 0, 22, ImageID(#H_knob3))
CanvasGadget(23, 2, 50, 87, 15)
Draw_x(0, 0, 23, ImageID(#H_knob4))
CanvasGadget(24, 2, 65, 87, 15)
Draw_x(0, 0, 24, ImageID(#H_knob5))
CanvasGadget(25, 89, 5, 87, 15)
Draw_x(0, 0, 25, ImageID(#H_knob6))
CanvasGadget(26, 89, 20, 87, 15)
Draw_x(0, 0, 26, ImageID(#H_knob7))
CanvasGadget(27, 89, 35, 87, 15)
Draw_x(0, 0, 27, ImageID(#H_knob8))
CanvasGadget(28, 89, 50, 87, 15)
Draw_x(0, 0, 28, ImageID(#H_knob9))
CanvasGadget(29, 89, 65, 87, 15)
Draw_x(0, 0, 29, ImageID(#H_knob10))
CanvasGadget(30, 20, 80, 15, 87)
Draw_y(0, 0, 30, ImageID(#V_knob1))
CanvasGadget(31, 35, 80, 15, 87)
Draw_y(0, 0, 31, ImageID(#V_knob2))
CanvasGadget(32, 50, 80, 15, 87)
Draw_y(0, 0, 32, ImageID(#V_knob3))
CanvasGadget(33, 65, 80, 15, 87)
Draw_y(0, 0, 33, ImageID(#V_knob4))
CanvasGadget(34, 80, 80, 15, 87)
Draw_y(0, 0, 34, ImageID(#V_knob5))
CanvasGadget(35, 95, 80, 15, 87)
Draw_y(0, 0, 35, ImageID(#V_knob6))

For i=20 To 35
  SetGadgetAttribute(i, #PB_Canvas_Cursor, #PB_Cursor_Hand)
Next i

Repeat
  Event =  WaitWindowEvent() 
  
  If Event = #PB_Event_Gadget
    Gadget=EventGadget()
    
      If Gadget>=30 And Gadget<=31
        Active_ImID=ImageID(#V_knob_Light1)
      ElseIf Gadget>=32 And Gadget<=33
        Active_ImID=ImageID(#V_knob_Light2)
      ElseIf Gadget>=34 And Gadget<=35
        Active_ImID=ImageID(#V_knob_Light3)
      EndIf
      Type = EventType()
     ; Перемещение вертикального бегунка. 
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        y=GetGadgetAttribute(Gadget, #PB_Canvas_MouseY)-12
        If y<0 : y=0 : EndIf
        If y>87-24 : y = 87-24 : EndIf
        
        Draw_y(0, y, Gadget, ImageID(Gadget), Active_ImID)
        SetGadgetData(Gadget, y)
        
        ; Мышка или вошла в пределы регулятора или вышла из него.
        ElseIf Type = #PB_EventType_MouseEnter Or Type = #PB_EventType_MouseLeave
        
        If Type = #PB_EventType_MouseLeave ; Мышь вышла с передлов регулятора.
          Active_ImID=0
        EndIf
        y=GetGadgetData(Gadget)
        Draw_y(0, y, Gadget, ImageID(Gadget), Active_ImID)
        
      EndIf
      
      If Gadget>=20 And Gadget<=22
        Active_ImID=ImageID(#H_knob_Light1)
      ElseIf Gadget>=23 And Gadget<=24
        Active_ImID=ImageID(#H_knob_Light2)
      ElseIf Gadget>=25 And Gadget<=29
        Active_ImID=ImageID(#H_knob_Light3)
      EndIf
      
      Type = EventType()
    ; Перемещение горизонтального бегунка.
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        x=GetGadgetAttribute(Gadget, #PB_Canvas_MouseX)-12
        If x<0 : x=0 : EndIf
        If x>87-24 : x = 87-24 : EndIf
        
        Draw_x(x, 0, Gadget, ImageID(Gadget), Active_ImID)
        SetGadgetData(Gadget, x)
        
      ; Мышка или вошла в пределы регулятора или вышла из него.
      ElseIf Type = #PB_EventType_MouseEnter Or Type = #PB_EventType_MouseLeave
        
        If Type = #PB_EventType_MouseLeave ; Мышь вышла с пределов регулятора.
          Active_ImID=0
        EndIf
        x=GetGadgetData(Gadget)
        Draw_x(x, 0, Gadget, ImageID(Gadget), Active_ImID)
        
      EndIf
    
    
  EndIf
  

  
  
Until Event = #PB_Event_CloseWindow


DataSection
  ;{ ресурсы
  
  H_track:
  IncludeBinary "Files\H.png"
  
  H_knob1:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob2:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob3:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob4:
  IncludeBinary "Files\H-knob3.png"
  
  H_knob5:
  IncludeBinary "Files\H-knob3.png"
  
  H_knob6:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob7:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob8:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob9:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob10:
  IncludeBinary "Files\H-knob2.png"
  
  V_track:
  IncludeBinary "Files\V.png"
  
  V_knob1:
  IncludeBinary "Files\V-knob1.png"
  
  V_knob2:
  IncludeBinary "Files\V-knob2.png"
  
  V_knob3:
  IncludeBinary "Files\V-knob3.png"
  
  V_knob4:
  IncludeBinary "Files\V-knob4.png"
  
  V_knob5:
  IncludeBinary "Files\V-knob5.png"
  
  V_knob6:
  IncludeBinary "Files\V-knob6.png" 
  
  H_knob_Light1:
  IncludeBinary "Files\H-knob1_Light.png"
  
  H_knob_Light2:
  IncludeBinary "Files\H-knob3_Light.png"
    
  H_knob_Light3:
  IncludeBinary "Files\H-knob2_Light.png"
  
  V_knob_Light1:
  IncludeBinary "Files\V-knob1_Light.png"
  
  V_knob_Light2:
  IncludeBinary "Files\V-knob2_Light.png"
    
  V_knob_Light3:
  IncludeBinary "Files\V-knob3_Light.png"
  
  Light_Button_Enable:
  IncludeBinary "Files\Knob_pointer_White_Long.png"
  ;}
EndDataSection

а вертикальные слайдеры портатся:
http://uploads.ru/i/z/O/2/zO2NY.png
При чем если делаю так:

Код:
Enumeration 
  #Window_0
  #fon
  #Hide
  #Light_Button_Enable
  #Light_Button
  #Light_Button_On
  #Light_Auto
  #Light_Auto_On
  #Light_Help
  #Light_Help_On
  #Light_Down_Enable
  #Light_Pause
  #Light_Power
  #Light_Mode
  #Light_Tune
  #Light_Battery
  #Knob_pointer_White_Long
  #text
  #H_track
  #V_track  
  #H_knob1
  #H_knob2
  #H_knob3
  #H_knob4
  #H_knob5
  #H_knob6
  #H_knob7
  #H_knob8
  #H_knob9
  #H_knob10  
  #V_knob1
  #V_knob2
  #V_knob3
  #V_knob4
  #V_knob5
  #V_knob6
  #H_knob_Light1
  #H_knob_Light2
  #H_knob_Light3
  #V_knob_Light1
EndEnumeration

UsePNGImageDecoder()

Procedure Draw_y(x, y, Gadget, ImageID, Active_ImID=0)
  StartDrawing(CanvasOutput(Gadget))
  DrawImage(ImageID(#V_track), 0, 0)
  If Active_ImID
    DrawAlphaImage(Active_ImID, 0, 4)
  EndIf
  DrawAlphaImage(ImageID, x, y)
  StopDrawing()
EndProcedure

Procedure Draw_x(x, y, Gadget, ImageID, Active_ImID=0)
  StartDrawing(CanvasOutput(Gadget))
  DrawImage(ImageID(#H_track), 0, 0)
  If Active_ImID
    DrawAlphaImage(Active_ImID, 4, 0)
  EndIf
  DrawAlphaImage(ImageID, x, y)
  StopDrawing()
EndProcedure


CatchImage(#H_track, ?H_track)   
CatchImage(#H_knob1, ?H_knob1) 
CatchImage(#H_knob2, ?H_knob2) 
CatchImage(#H_knob3, ?H_knob3)   
CatchImage(#H_knob4, ?H_knob4) 
CatchImage(#H_knob5, ?H_knob5)
CatchImage(#H_knob6, ?H_knob6) 
CatchImage(#H_knob7, ?H_knob7) 
CatchImage(#H_knob8, ?H_knob8)   
CatchImage(#H_knob9, ?H_knob9) 
CatchImage(#H_knob10, ?H_knob10)
CatchImage(#H_knob_Light1, ?H_knob_Light1)
CatchImage(#H_knob_Light2, ?H_knob_Light2)
CatchImage(#H_knob_Light3, ?H_knob_Light3)
CatchImage(#V_knob_Light1, ?V_knob_Light1)
CatchImage(#V_track, ?V_track)   
CatchImage(#V_knob1, ?V_knob1) 
CatchImage(#V_knob2, ?V_knob2) 
CatchImage(#V_knob3, ?V_knob3) 
CatchImage(#V_knob4, ?V_knob4) 
CatchImage(#V_knob5, ?V_knob5) 
CatchImage(#V_knob6, ?V_knob6) 
CatchImage(#Light_Button_Enable, ?Light_Button_Enable)

OpenWindow(0, 0, 0, 180, 170, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

;ImageGadget(12,2,2,67,67,ImageID(#Light_Button_Enable)) : DisableGadget(12, #True)

CanvasGadget(20, 2, 5, 87, 15)
Draw_x(0, 0, 20, ImageID(#H_knob1))
CanvasGadget(21, 2, 20, 87, 15)
Draw_x(0, 0, 21, ImageID(#H_knob2))
CanvasGadget(22, 2, 35, 87, 15)
Draw_x(0, 0, 22, ImageID(#H_knob3))
CanvasGadget(23, 2, 50, 87, 15)
Draw_x(0, 0, 23, ImageID(#H_knob4))
CanvasGadget(24, 2, 65, 87, 15)
Draw_x(0, 0, 24, ImageID(#H_knob5))
CanvasGadget(25, 89, 5, 87, 15)
Draw_x(0, 0, 25, ImageID(#H_knob6))
CanvasGadget(26, 89, 20, 87, 15)
Draw_x(0, 0, 26, ImageID(#H_knob7))
CanvasGadget(27, 89, 35, 87, 15)
Draw_x(0, 0, 27, ImageID(#H_knob8))
CanvasGadget(28, 89, 50, 87, 15)
Draw_x(0, 0, 28, ImageID(#H_knob9))
CanvasGadget(29, 89, 65, 87, 15)
Draw_x(0, 0, 29, ImageID(#H_knob10))
CanvasGadget(30, 20, 80, 15, 87)
Draw_y(0, 0, 30, ImageID(#V_knob1))
CanvasGadget(31, 35, 80, 15, 87)
Draw_y(0, 0, 31, ImageID(#V_knob2))
CanvasGadget(32, 50, 80, 15, 87)
Draw_y(0, 0, 32, ImageID(#V_knob3))
CanvasGadget(33, 65, 80, 15, 87)
Draw_y(0, 0, 33, ImageID(#V_knob4))
CanvasGadget(34, 80, 80, 15, 87)
Draw_y(0, 0, 34, ImageID(#V_knob5))
CanvasGadget(35, 95, 80, 15, 87)
Draw_y(0, 0, 35, ImageID(#V_knob6))

For i=20 To 35
  SetGadgetAttribute(i, #PB_Canvas_Cursor, #PB_Cursor_Hand)
Next i

Repeat
  Event =  WaitWindowEvent() 
  
  If Event = #PB_Event_Gadget
    Gadget=EventGadget()
    If Gadget>=30 And Gadget<=35
      Type = EventType()
     ; Перемещение вертикального бегунка. 
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        y=GetGadgetAttribute(Gadget, #PB_Canvas_MouseY)-12
        If y<0 : y=0 : EndIf
        If y>87-24 : y = 87-24 : EndIf
        
        Draw_y(0, y, Gadget, ImageID(Gadget), ImageID(#V_knob_Light1))
        SetGadgetData(Gadget, y)
        ; Мышка или вошла в пределы регулятора или вышла из него.
        ElseIf Type = #PB_EventType_MouseEnter Or Type = #PB_EventType_MouseLeave
        
        If Type = #PB_EventType_MouseLeave ; Мышь вышла с передлов регулятора.
          Active_ImID=0
        Else
          Active_ImID=ImageID(#V_knob_Light1)
        EndIf
        y=GetGadgetData(Gadget)
        Draw_y(0, y, Gadget, ImageID(Gadget), Active_ImID)
        
      EndIf
      
    EndIf
    
    
If Gadget>=20 And Gadget<=22
      Type = EventType()
    ; Перемещение горизонтального бегунка.
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        x=GetGadgetAttribute(Gadget, #PB_Canvas_MouseX)-12
        If x<0 : x=0 : EndIf
        If x>87-24 : x = 87-24 : EndIf
        
        Draw_x(x, 0, Gadget, ImageID(Gadget), ImageID(#H_knob_Light1))
        SetGadgetData(Gadget, x)
        
      ; Мышка или вошла в пределы регулятора или вышла из него.
      ElseIf Type = #PB_EventType_MouseEnter Or Type = #PB_EventType_MouseLeave
        
        If Type = #PB_EventType_MouseLeave ; Мышь вышла с передлов регулятора.
          Active_ImID=0
        Else
          Active_ImID=ImageID(#H_knob_Light1)
        EndIf
        x=GetGadgetData(Gadget)
        Draw_x(x, 0, Gadget, ImageID(Gadget), Active_ImID)
        
      EndIf
      
    EndIf

    If Gadget>=23 And Gadget<=24
      Type = EventType()
    ; Перемещение горизонтального бегунка.
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        x=GetGadgetAttribute(Gadget, #PB_Canvas_MouseX)-12
        If x<0 : x=0 : EndIf
        If x>87-24 : x = 87-24 : EndIf
        
        Draw_x(x, 0, Gadget, ImageID(Gadget), ImageID(#H_knob_Light2))
        SetGadgetData(Gadget, x)
        
      ; Мышка или вошла в пределы регулятора или вышла из него.
      ElseIf Type = #PB_EventType_MouseEnter Or Type = #PB_EventType_MouseLeave
        
        If Type = #PB_EventType_MouseLeave ; Мышь вышла с передлов регулятора.
          Active_ImID=0
        Else
          Active_ImID=ImageID(#H_knob_Light2)
        EndIf
        x=GetGadgetData(Gadget)
        Draw_x(x, 0, Gadget, ImageID(Gadget), Active_ImID)
        
      EndIf
      
    EndIf

    If Gadget>=25 And Gadget<=29
      Type = EventType()
    ; Перемещение горизонтального бегунка.
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        x=GetGadgetAttribute(Gadget, #PB_Canvas_MouseX)-12
        If x<0 : x=0 : EndIf
        If x>87-24 : x = 87-24 : EndIf
        
        Draw_x(x, 0, Gadget, ImageID(Gadget), ImageID(#H_knob_Light3))
        SetGadgetData(Gadget, x)
        
      ; Мышка или вошла в пределы регулятора или вышла из него.
      ElseIf Type = #PB_EventType_MouseEnter Or Type = #PB_EventType_MouseLeave
        
        If Type = #PB_EventType_MouseLeave ; Мышь вышла с передлов регулятора.
          Active_ImID=0
        Else
          Active_ImID=ImageID(#H_knob_Light3)
        EndIf
        x=GetGadgetData(Gadget)
        Draw_x(x, 0, Gadget, ImageID(Gadget), Active_ImID)
        
      EndIf
      
    EndIf
    
    
  EndIf
  

  
  
Until Event = #PB_Event_CloseWindow


DataSection
  ;{ ресурсы
  
  H_track:
  IncludeBinary "Files\H.png"
  
  H_knob1:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob2:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob3:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob4:
  IncludeBinary "Files\H-knob3.png"
  
  H_knob5:
  IncludeBinary "Files\H-knob3.png"
  
  H_knob6:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob7:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob8:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob9:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob10:
  IncludeBinary "Files\H-knob2.png"
  
  V_track:
  IncludeBinary "Files\V-slider.png"
  
  V_knob1:
  IncludeBinary "Files\V-knob1.png"
  
  V_knob2:
  IncludeBinary "Files\V-knob2.png"
  
  V_knob3:
  IncludeBinary "Files\V-knob3.png"
  
  V_knob4:
  IncludeBinary "Files\V-knob4.png"
  
  V_knob5:
  IncludeBinary "Files\V-knob5.png"
  
  V_knob6:
  IncludeBinary "Files\V-knob6.png" 
  
  H_knob_Light1:
  IncludeBinary "Files\H-knob1_Light.png"
  
  H_knob_Light2:
  IncludeBinary "Files\H-knob3_Light.png"
    
  H_knob_Light3:
  IncludeBinary "Files\H-knob2_Light.png"
  
  V_knob_Light1:
  IncludeBinary "Files\V-knob1_Light.png"
  
  Light_Button_Enable:
  IncludeBinary "Files\Knob_pointer_White_Long.png"
  ;}
EndDataSection

то все нормально.

Отредактировано max (08.05.2012 15:05:36)

0

173

Код:
Enumeration 
  #Window_0
  #fon
  #Hide
  #Light_Button_Enable
  #Light_Button
  #Light_Button_On
  #Light_Auto
  #Light_Auto_On
  #Light_Help
  #Light_Help_On
  #Light_Down_Enable
  #Light_Pause
  #Light_Power
  #Light_Mode
  #Light_Tune
  #Light_Battery
  #Knob_pointer_White_Long
  #text
  #H_track
  #V_track  
  #H_knob1
  #H_knob2
  #H_knob3
  #H_knob4
  #H_knob5
  #H_knob6
  #H_knob7
  #H_knob8
  #H_knob9
  #H_knob10  
  #V_knob1
  #V_knob2
  #V_knob3
  #V_knob4
  #V_knob5
  #V_knob6
  #H_knob_Light1
  #H_knob_Light2
  #H_knob_Light3
  #V_knob_Light1
  #V_knob_Light2
  #V_knob_Light3
EndEnumeration

UsePNGImageDecoder()

Procedure Draw_y(x, y, Gadget, ImageID, Active_ImID=0)
  StartDrawing(CanvasOutput(Gadget))
  DrawImage(ImageID(#V_track), 0, 0)
  If Active_ImID
    DrawAlphaImage(Active_ImID, 0, 4)
  EndIf
  DrawAlphaImage(ImageID, x, y)
  StopDrawing()
EndProcedure

Procedure Draw_x(x, y, Gadget, ImageID, Active_ImID=0)
  StartDrawing(CanvasOutput(Gadget))
  DrawImage(ImageID(#H_track), 0, 0)
  If Active_ImID
    DrawAlphaImage(Active_ImID, 4, 0)
  EndIf
  DrawAlphaImage(ImageID, x, y)
  StopDrawing()
EndProcedure


CatchImage(#H_track, ?H_track)   
CatchImage(#H_knob1, ?H_knob1) 
CatchImage(#H_knob2, ?H_knob2) 
CatchImage(#H_knob3, ?H_knob3)   
CatchImage(#H_knob4, ?H_knob4) 
CatchImage(#H_knob5, ?H_knob5)
CatchImage(#H_knob6, ?H_knob6) 
CatchImage(#H_knob7, ?H_knob7) 
CatchImage(#H_knob8, ?H_knob8)   
CatchImage(#H_knob9, ?H_knob9) 
CatchImage(#H_knob10, ?H_knob10)
CatchImage(#H_knob_Light1, ?H_knob_Light1)
CatchImage(#H_knob_Light2, ?H_knob_Light2)
CatchImage(#H_knob_Light3, ?H_knob_Light3)
CatchImage(#V_knob_Light1, ?V_knob_Light1)
CatchImage(#V_knob_Light2, ?V_knob_Light2)
CatchImage(#V_knob_Light3, ?V_knob_Light3)
CatchImage(#V_track, ?V_track)   
CatchImage(#V_knob1, ?V_knob1) 
CatchImage(#V_knob2, ?V_knob2) 
CatchImage(#V_knob3, ?V_knob3) 
CatchImage(#V_knob4, ?V_knob4) 
CatchImage(#V_knob5, ?V_knob5) 
CatchImage(#V_knob6, ?V_knob6) 
CatchImage(#Light_Button_Enable, ?Light_Button_Enable)

OpenWindow(0, 0, 0, 180, 170, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

;ImageGadget(12,2,2,67,67,ImageID(#Light_Button_Enable)) : DisableGadget(12, #True)

CanvasGadget(20, 2, 5, 87, 15)
Draw_x(0, 0, 20, ImageID(#H_knob1))
CanvasGadget(21, 2, 20, 87, 15)
Draw_x(0, 0, 21, ImageID(#H_knob2))
CanvasGadget(22, 2, 35, 87, 15)
Draw_x(0, 0, 22, ImageID(#H_knob3))
CanvasGadget(23, 2, 50, 87, 15)
Draw_x(0, 0, 23, ImageID(#H_knob4))
CanvasGadget(24, 2, 65, 87, 15)
Draw_x(0, 0, 24, ImageID(#H_knob5))
CanvasGadget(25, 89, 5, 87, 15)
Draw_x(0, 0, 25, ImageID(#H_knob6))
CanvasGadget(26, 89, 20, 87, 15)
Draw_x(0, 0, 26, ImageID(#H_knob7))
CanvasGadget(27, 89, 35, 87, 15)
Draw_x(0, 0, 27, ImageID(#H_knob8))
CanvasGadget(28, 89, 50, 87, 15)
Draw_x(0, 0, 28, ImageID(#H_knob9))
CanvasGadget(29, 89, 65, 87, 15)
Draw_x(0, 0, 29, ImageID(#H_knob10))
CanvasGadget(30, 20, 80, 15, 87)
Draw_y(0, 0, 30, ImageID(#V_knob1))
CanvasGadget(31, 35, 80, 15, 87)
Draw_y(0, 0, 31, ImageID(#V_knob2))
CanvasGadget(32, 50, 80, 15, 87)
Draw_y(0, 0, 32, ImageID(#V_knob3))
CanvasGadget(33, 65, 80, 15, 87)
Draw_y(0, 0, 33, ImageID(#V_knob4))
CanvasGadget(34, 80, 80, 15, 87)
Draw_y(0, 0, 34, ImageID(#V_knob5))
CanvasGadget(35, 95, 80, 15, 87)
Draw_y(0, 0, 35, ImageID(#V_knob6))

For i=20 To 35
  SetGadgetAttribute(i, #PB_Canvas_Cursor, #PB_Cursor_Hand)
Next i

Repeat
  Event =  WaitWindowEvent() 
  
  If Event = #PB_Event_Gadget
    Gadget=EventGadget()
    
    If Gadget>=30 And Gadget<=35
      If Gadget>=30 And Gadget<=31
        Active_ImID=ImageID(#V_knob_Light1)
      ElseIf Gadget>=32 And Gadget<=33
        Active_ImID=ImageID(#V_knob_Light2)
      ElseIf Gadget>=34 And Gadget<=35
        Active_ImID=ImageID(#V_knob_Light3)
      EndIf
      Type = EventType()
     ; Перемещение вертикального бегунка. 
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        y=GetGadgetAttribute(Gadget, #PB_Canvas_MouseY)-12
        If y<0 : y=0 : EndIf
        If y>87-24 : y = 87-24 : EndIf
        
        Draw_y(0, y, Gadget, ImageID(Gadget), Active_ImID)
        SetGadgetData(Gadget, y)
        
        ; Мышка или вошла в пределы регулятора или вышла из него.
        ElseIf Type = #PB_EventType_MouseEnter Or Type = #PB_EventType_MouseLeave
        
        If Type = #PB_EventType_MouseLeave ; Мышь вышла с передлов регулятора.
          Active_ImID=0
        EndIf
        y=GetGadgetData(Gadget)
        Draw_y(0, y, Gadget, ImageID(Gadget), Active_ImID)
        
      EndIf
      
    EndIf
    
    If Gadget>=20 And Gadget<=29
      If Gadget>=20 And Gadget<=22
        Active_ImID=ImageID(#H_knob_Light1)
      ElseIf Gadget>=23 And Gadget<=24
        Active_ImID=ImageID(#H_knob_Light2)
      ElseIf Gadget>=25 And Gadget<=29
        Active_ImID=ImageID(#H_knob_Light3)
      EndIf
      
      Type = EventType()
    ; Перемещение горизонтального бегунка.
      If Type = #PB_EventType_LeftClick Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
        x=GetGadgetAttribute(Gadget, #PB_Canvas_MouseX)-12
        If x<0 : x=0 : EndIf
        If x>87-24 : x = 87-24 : EndIf
        
        Draw_x(x, 0, Gadget, ImageID(Gadget), Active_ImID)
        SetGadgetData(Gadget, x)
        
      ; Мышка или вошла в пределы регулятора или вышла из него.
      ElseIf Type = #PB_EventType_MouseEnter Or Type = #PB_EventType_MouseLeave
        
        If Type = #PB_EventType_MouseLeave ; Мышь вышла с пределов регулятора.
          Active_ImID=0
        EndIf
        x=GetGadgetData(Gadget)
        Draw_x(x, 0, Gadget, ImageID(Gadget), Active_ImID)
        
      EndIf
    
    EndIf
    
  EndIf
  

  
  
Until Event = #PB_Event_CloseWindow



DataSection
  ;{ ресурсы
  
  H_track:
  IncludeBinary "Files\H.png"
  
  H_knob1:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob2:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob3:
  IncludeBinary "Files\H-knob1.png"
  
  H_knob4:
  IncludeBinary "Files\H-knob3.png"
  
  H_knob5:
  IncludeBinary "Files\H-knob3.png"
  
  H_knob6:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob7:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob8:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob9:
  IncludeBinary "Files\H-knob2.png"
  
  H_knob10:
  IncludeBinary "Files\H-knob2.png"
  
  V_track:
  IncludeBinary "Files\V.png"
  
  V_knob1:
  IncludeBinary "Files\V-knob1.png"
  
  V_knob2:
  IncludeBinary "Files\V-knob2.png"
  
  V_knob3:
  IncludeBinary "Files\V-knob3.png"
  
  V_knob4:
  IncludeBinary "Files\V-knob4.png"
  
  V_knob5:
  IncludeBinary "Files\V-knob5.png"
  
  V_knob6:
  IncludeBinary "Files\V-knob6.png" 
  
  H_knob_Light1:
  IncludeBinary "Files\H-knob1_Light.png"
  
  H_knob_Light2:
  IncludeBinary "Files\H-knob3_Light.png"
    
  H_knob_Light3:
  IncludeBinary "Files\H-knob2_Light.png"
  
  V_knob_Light1:
  IncludeBinary "Files\V-knob1_Light.png"
  
  V_knob_Light2:
  IncludeBinary "Files\V-knob2_Light.png"
    
  V_knob_Light3:
  IncludeBinary "Files\V-knob3_Light.png"
  
  Light_Button_Enable:
  IncludeBinary "Files\Knob_pointer_White_Long.png"
  ;}
EndDataSection

+1

174

Спасибо.

0

175

Почему-то не могу закрыть окно, вызываемое при нажатии на кнопку "Е".

0

176

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

Почему-то не могу закрыть окно

Должно быть не просто Close_0(Event), а

Код:
  If Window = #Window_0
    Close_0(Event)
  EndIf

Иначе возникает конфликт из-за этой строки:

Код:
SendMessage_(WindowID(#Window_0),#WM_NCLBUTTONDOWN, #HTCAPTION,0)

когда активно другое окно программы. При клике левой кнопкой мышки по другому окну, активируется основное! Поэтому клик по кнопке не воспринимается, ведь он происходит по отпусканию кнопки мыши, а не по нажатию.

0

177

Ясно, буду знать. Спасибо.

0

178

Решил добавить прокрутку колесом мыши. Использовал флаги: #PB_EventType_MouseWheel, #PB_EventType_Focus, #PB_Canvas_WheelDelta - вычитал, они нужны для работы с колесом мыши. Но как всегда грабли - не работает. Подозреваю, что не так использовал флаги. Можете посмотреть?

Код:
     ; Перемещение вертикального бегунка. 
      If Type = #PB_EventType_Focus Or (Type = #PB_EventType_MouseWheel And GetGadgetAttribute(Gadget, #PB_Canvas_WheelDelta)); = PB_Canvas_LeftButton)
        y=GetGadgetAttribute(Gadget, #PB_Canvas_MouseY)-12
        If y<0 : y=0 : EndIf
        If y>87-24 : y = 87-24 : EndIf
        
        Draw_y(0, y, Gadget, ImageID(Gadget), Active_ImID)
        SetGadgetData(Gadget, y)
        
        ; Мышка или вошла в пределы регулятора или вышла из него.
        ElseIf Type = #PB_EventType_MouseEnter Or Type = #PB_EventType_MouseLeave
        
        If Type = #PB_EventType_MouseLeave ; Мышь вышла с передлов регулятора.
          Active_ImID=0
        EndIf
        y=GetGadgetData(Gadget)
        Draw_y(0, y, Gadget, ImageID(Gadget), Active_ImID)
        
      EndIf

0

179

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

Использовал флаги: #PB_EventType_MouseWheel, #PB_EventType_Focus, #PB_Canvas_WheelDelta - вычитал, они нужны для работы с колесом мыши. Но как всегда грабли - не работает.

Нужен флаг #PB_Canvas_Keyboard.
В справке про это написано.

This means that the #PB_Canvas_Keyboard flag has to be set on gadget creation to allow keyboard events. On Windows, the #PB_EventType_MouseWheel event is also only reported if the gadget has keyboard focus.

И #PB_EventType_MouseWheel, #PB_EventType_Focus, #PB_Canvas_WheelDelta, это типы событий и параметры, а не флаги.

Читай справку.

#PB_Canvas_WheelDelta
Returns the movement of the mouse wheel in the current event in multiples of 1 or -1. A positive value indicates that the wheel was moved up (away from the user) and a negative value indicates that the wheel was moved down (towards the user). This attribute is 0 if the current event is not a #PB_EventType_MouseWheel event.

Я это пробовал, но прокрутка присутствует только когда гаджет в фокусе, так что не вариант.

0

180

Ее и читал, вот это строчка выбила:

Код:
The #PB_Canvas_Keyboard flag is required to receive any keyboard events in the gadget

Я вот не совсем понял, фокус чего?

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

Я это пробовал, но прокрутка присутствует только когда гаджет в фокусе, так что не вариант.

А есть ли другой вариант? И вообще стоит-ли заморачиваться?

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

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Рисованный интерфейс программы