Ага, так не мигает. Спасибо.
Рисованный интерфейс программы
Сообщений 241 страница 270 из 302
Поделиться24212.05.2012 19:41:16
Твой код не компилируется из-за нехватки рисунков.
Картинки в 200 посте.
Зачем постоянно создавать TextGadget? Поэтому и мерцает!
Даже и не знаю, зачам так сделал. Убрал, не мерцает, но виден белый квадрат.
Поделиться24312.05.2012 20:16:07
При наложении полупрозрачной картинки получается такой эффект:
Это как-нибудь лечится? 
Поделиться24412.05.2012 20:21:19
Картинку накладывай на фоновый рисунок и таких проблем не будет.
Поделиться24512.05.2012 20:29:35
Картинку накладывай на фоновый рисунок и таких проблем не будет.
Спасибо, но я имел ввиду это:
Поделиться24612.05.2012 20:46:36
я имел ввиду это
Этот вариант не решает проблему? Рисованный интерфейс программы
Поделиться24712.05.2012 20:55:04
Каюсь
, грешен: упустил этот момент x=OpenWindow.
Поделиться24812.05.2012 21:51:33
Сейчас единицы числа выводятся слева, а можно сделать чтобы выводились справа?
Пробовал так:
SetGadgetText(19, " " + Str(z))
не помогает.
Отредактировано max (12.05.2012 22:04:38)
Поделиться24912.05.2012 22:27:35
Флаг #PB_Text_Right при создании TextGadget.
Поделиться25012.05.2012 22:49:38
А ведь раньше использовал этот флаг.
Спасибо.
Поделиться25117.05.2012 18:46:34
Не подскажите, почему этот код у меня не компилируется?
Global Win1.s="Авторы"
Global Win2.s="Настройки"
Global Win3.s="История"
Structure SCROLLER_STRUCT
scroll_hwnd.l ;handle of window where to draw
scroll_text.s ;pointer scrolltext
scroll_x.l ;x position
scroll_y.l ;y position
scroll_width.l ;width of scroller
scroll_hFont.l ;Handle of Font
scroll_textcolor.l ;example: 00F7DDCCh (00BBGGRR)
scroll_alpha.b ;value for transparency (if using it on WS_EX_LAYERED window)
scroll_wait.l ;wait time (milliseconds) before draw scrolltext
scroll_pause.b ;dont modify this! Use PauseScroller function!
scroll_speed.l ;скорость скроллинга (милисекунды)
scroll_hThread.l ;дескриптор потока
EndStructure
Import "TextScroller.lib"
CreateScroller(scr.l)
;PauseScroller (scr)
EndImport
x = OpenWindow(0, 0, 0, 550, 100, "TEXT SCROLLER", #PB_Window_SystemMenu |#PB_Window_ScreenCentered)
ContainerGadget(2, 10, 10, 180, 20, #PB_Container_Single)
SetGadgetColor(2, #PB_Gadget_BackColor, $000000)
SCROLLER1.SCROLLER_STRUCT
SCROLLER1\scroll_hwnd = x
SCROLLER1\scroll_text = Win1+" "+Win2+" "+Win3
SCROLLER1\scroll_x = 5
SCROLLER1\scroll_y = 10
SCROLLER1\scroll_width = 185
SCROLLER1\scroll_hFont = LoadFont(1, "Courier New", 12);, 16)
SCROLLER1\scroll_textcolor = RGB(0,128,255)
SCROLLER1\scroll_alpha = 200
SCROLLER1\scroll_speed = 20
CreateScroller(SCROLLER1)
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindowВыскакивает: "Отлаживаемое приложение не ответило в течении 5 секунд. Отключение."
Поделиться25217.05.2012 18:55:08
У меня нормально работает совместно с этой версией библиотеки. http://purebasic.info/phpBB2/download.php?id=880
Поделиться25317.05.2012 19:00:25
У меня такая же версия. В чем может быть причина? Пурик 4.60 x86.
Поделиться25417.05.2012 19:51:28
Сложно сказать если у меня эта ошибка не возникает.
Когда пишет что отлаживаемое приложение не отвечает, это значит что программа повисла. Можно в пошаговом режиме посмотреть где это происходит.
Поделиться25517.05.2012 19:53:58
Понял.
Поделиться25617.05.2012 20:50:33
В связи с тем, что не могу скомпелировать, пошаговый режим тоже не могу использовать. Shift+F5 - ни где не виснет. Ставил контрольную точку в разные места.
Поделиться25717.05.2012 21:18:30
А где сама библа лежит? У меня вместе с файлом.
Поделиться25818.05.2012 10:00:02
Если эту строчку
CreateScroller(SCROLL)
комментировать, то прога запускается, но соответственно нет скроллинга. Пробовал и переустанавливать, и на 4.50 - результат один.
Поделиться25918.05.2012 20:05:28
Я так полагаю, чтобы сделать CreatePopupMenu с картинками
нужно использовать XP_Menu_Lib?
Поделиться26018.05.2012 22:23:17
Необязательно.
Есть функция CreatePopupImageMenu().
Поделиться26119.05.2012 08:41:42
Спасибо.
Поделиться26221.05.2012 13:35:42
Привет!
Возникла проблема при соединении кода из 240 поста и кода бегущей строки.
Проблема с бегущей строкой:
Если в коде убрать строку
SetWindowLongPtr_(x,#GWL_EXSTYLE,GetWindowLongPtr_(x,#GWL_EXSTYLE)|#WS_EX_COMPOSITED)
бегущая строка работает, но появляется другая:
Как можно от этого избавится?
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_track1;***************************
; #H_track2;***************************
; #H_track3;***************************
; #H_track4;***************************
; #H_track5;***************************
; #H_track6;***************************
; #H_track7;***************************
; #H_track8;***************************
; #H_track9;***************************
; #H_track10;**************************
; #V_track1;***************************
; #V_track2;***************************
; #V_track3;***************************
; #V_track4;***************************
; #V_track5;***************************
; #V_track6;***************************
#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
#Skin_Image ;*********************************************************************
EndEnumeration
UsePNGImageDecoder()
Structure SCROLL_STRUCT
scroll_hwnd.l ;handle of window where to draw
scroll_text.s ;pointer scrolltext
scroll_x.l ;x position
scroll_y.l ;y position
scroll_width.l ;width of scroller
scroll_hFont.l ;Handle of Font
scroll_textcolor.l ;example: 00F7DDCCh (00BBGGRR)
scroll_alpha.b ;value for transparency (if using it on WS_EX_LAYERED window)
scroll_wait.l ;wait time (milliseconds) before draw scrolltext
scroll_pause.b ;dont modify this! Use PauseScroller function!
scroll_speed.l ;скорость скроллинга (милисекунды)
scroll_hThread.l ;дескриптор потока
EndStructure
Import "TextScroller.lib"
CreateScroller(scr.l)
PauseScroller (scr)
EndImport
HOLLOW_BRUSH=GetStockObject_(#HOLLOW_BRUSH)
Procedure Draw_y(x, y, Gadget, ImageID, Active_ImID=0)
GrabImage(#Skin_Image, #V_track, GadgetX(Gadget), GadgetY(Gadget), GadgetWidth(Gadget), GadgetHeight(Gadget))
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)
GrabImage(#Skin_Image, #H_track, GadgetX(Gadget), GadgetY(Gadget), GadgetWidth(Gadget), GadgetHeight(Gadget))
StartDrawing(CanvasOutput(Gadget))
DrawImage(ImageID(#H_track), 0, 0)
If Active_ImID
DrawAlphaImage(Active_ImID, 4, 0)
EndIf
DrawAlphaImage(ImageID, x, y)
StopDrawing()
EndProcedure
Procedure WindowCallback(hWnd, Msg, wParam, lParam)
Shared HOLLOW_BRUSH
Result = #PB_ProcessPureBasicEvents
If Msg = #WM_CTLCOLORSTATIC And GetDlgCtrlID_(lParam)=19
SetTextColor_(wParam, $FFFFFF)
SetBkMode_(wParam, #TRANSPARENT)
ProcedureReturn HOLLOW_BRUSH
EndIf
ProcedureReturn Result
EndProcedure
CatchImage(#Skin_Image, ?Skin_Image) ;**********************************************************
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)
x=OpenWindow(0, 0, 0, 200, 200, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
;SetWindowLongPtr_(x,#GWL_EXSTYLE,GetWindowLongPtr_(x,#GWL_EXSTYLE)|#WS_EX_COMPOSITED)
SetWindowCallback(@WindowCallback(), 0)
SetClassLongPtr_(WindowID(#Window_0), #GCL_HBRBACKGROUND, CreatePatternBrush_(ImageID(#Skin_Image)))
ContainerGadget(219, 5, 178, 190, 20);, #PB_Container_Single)
SetGadgetColor(219, #PB_Gadget_BackColor, $000000)
SCROLL.SCROLL_STRUCT
SCROLL\scroll_hwnd = x
SCROLL\scroll_text = "TEST ТЕСТ АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ абвгдеёжзийклмнопрстуфхцчшщъыьэюя 1234567890!~@#$№;%:?*()"
SCROLL\scroll_x = 5
SCROLL\scroll_y = 178
SCROLL\scroll_width = 185
SCROLL\scroll_hFont = LoadFont(2, "Times New Roman", 13, #PB_Font_Bold)
SCROLL\scroll_textcolor = RGB(0,128,255)
SCROLL\scroll_alpha = 200
SCROLL\scroll_speed = 20
CreateScroller(SCROLL)
CloseGadgetList()
CanvasGadget(20, 2, 5, 87, 15)
;GrabImage(#Skin_Image, #H_track1, 2, 5, 87, 15);*************************************************
Draw_x(0, 0, 20, ImageID(#H_knob1))
CanvasGadget(21, 2, 20, 87, 15)
;GrabImage(#Skin_Image, #H_track2, 2, 20, 87, 15);*************************************************
Draw_x(0, 0, 21, ImageID(#H_knob2))
CanvasGadget(22, 2, 35, 87, 15)
;GrabImage(#Skin_Image, #H_track3, 2, 35, 87, 15);*************************************************
Draw_x(0, 0, 22, ImageID(#H_knob3))
CanvasGadget(23, 2, 50, 87, 15)
;GrabImage(#Skin_Image, #H_track4, 2, 50, 87, 15);*************************************************
Draw_x(0, 0, 23, ImageID(#H_knob4))
CanvasGadget(24, 2, 65, 87, 15)
;GrabImage(#Skin_Image, #H_track5, 2, 65, 87, 15);*************************************************
Draw_x(0, 0, 24, ImageID(#H_knob5))
CanvasGadget(25, 89, 5, 87, 15)
;GrabImage(#Skin_Image, #H_track6, 89, 5, 87, 15);*************************************************
Draw_x(0, 0, 25, ImageID(#H_knob6))
CanvasGadget(26, 89, 20, 87, 15)
;GrabImage(#Skin_Image, #H_track7, 89, 20, 87, 15);*************************************************
Draw_x(0, 0, 26, ImageID(#H_knob7))
CanvasGadget(27, 89, 35, 87, 15)
;GrabImage(#Skin_Image, #H_track8, 89, 35, 87, 15);*************************************************
Draw_x(0, 0, 27, ImageID(#H_knob8))
CanvasGadget(28, 89, 50, 87, 15)
;GrabImage(#Skin_Image, #H_track9, 89, 50, 87, 15);*************************************************
Draw_x(0, 0, 28, ImageID(#H_knob9))
CanvasGadget(29, 89, 65, 87, 15)
;GrabImage(#Skin_Image, #H_track10, 89, 65, 87, 15);*************************************************
Draw_x(0, 0, 29, ImageID(#H_knob10))
CanvasGadget(30, 20, 80, 15, 87)
;GrabImage(#Skin_Image, #V_track1, 20, 80, 15, 87);*************************************************
Draw_y(0, 1, 30, ImageID(#V_knob1))
CanvasGadget(31, 35, 80, 15, 87)
;GrabImage(#Skin_Image, #V_track2, 35, 80, 15, 87);*************************************************
Draw_y(0, 1, 31, ImageID(#V_knob2))
CanvasGadget(32, 50, 80, 15, 87)
;GrabImage(#Skin_Image, #V_track3, 50, 80, 15, 87);*************************************************
Draw_y(0, 1, 32, ImageID(#V_knob3))
CanvasGadget(33, 65, 80, 15, 87)
;GrabImage(#Skin_Image, #V_track4, 65, 80, 15, 87);*************************************************
Draw_y(0, 1, 33, ImageID(#V_knob4))
CanvasGadget(34, 80, 80, 15, 87)
;GrabImage(#Skin_Image, #V_track5, 80, 80, 15, 87);*************************************************
Draw_y(0, 1, 34, ImageID(#V_knob5))
CanvasGadget(35, 95, 80, 15, 87)
;GrabImage(#Skin_Image, #V_track6, 95, 80, 15, 87);*************************************************
Draw_y(0, 1, 35, ImageID(#V_knob6))
For i=20 To 35
SetGadgetAttribute(i, #PB_Canvas_Cursor, #PB_Cursor_Hand)
Next i
TextGadget(19, 120, 120, 15, 15,"")
Repeat
Event = WaitWindowEvent()
Window = EventWindow()
If Event = #PB_Event_Gadget
Gadget=EventGadget()
;If Gadget>=30 And Gadget<=35
Type = EventType()
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_MouseWheel Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
If Type = #PB_EventType_MouseWheel
y=GetGadgetData(Gadget)-GetGadgetAttribute(Gadget, #PB_Canvas_WheelDelta)*2
Else
y=GetGadgetAttribute(Gadget, #PB_Canvas_MouseY)-12
EndIf
If y<1 : y=1 : EndIf
If y>87-23 : y = 87-23 : 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+1, 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_MouseWheel Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
If Type = #PB_EventType_MouseWheel
x=GetGadgetData(Gadget)-GetGadgetAttribute(Gadget, #PB_Canvas_WheelDelta)*2
Else
x=GetGadgetAttribute(Gadget, #PB_Canvas_MouseX)-12
EndIf
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)
SetGadgetText(19, Str(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
If Window = 0 And Event = #WM_MOUSEWHEEL
GetCursorPos_(@Cursor.POINT)
hWnd = WindowFromPoint_(Cursor\X|(Cursor\Y<<32))
Gadget=GetDlgCtrlID_(hWnd)
If Gadget>=20 And Gadget<=35
SendMessage_(hWnd, #WM_MOUSEWHEEL, EventwParam(), EventlParam())
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
DataSection
;{ ресурсы
Skin_Image:
IncludeBinary "Files\Skin_Image.png" ;********************************************************
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Поделиться26321.05.2012 16:29:37
Как вариант, добавляем объявление структуры в начало программы:
UpdatePos.RECT
и эти строки после SetGadgetText(19, Str(x)):
SetRect_(@UpdatePos, 120, 120, 120+15, 120+15)
InvalidateRect_(WindowID(0), @UpdatePos, 1)Они нужны для принудительной прорисовки области окна с координатами 120, 120, 135, 135.
Поделиться26421.05.2012 16:38:47
Спасибо, сейчас попробую.
Поделиться26521.05.2012 16:42:25
Все отлично работает. Спасибо.
Поделиться26621.05.2012 22:04:37
Не подскажите, почему этот код у меня не компилируется?
Осмелюсь предположить из-за Kaspersky. Приостанови защиту и все скомилится
Поделиться26725.05.2012 14:39:57
Осмелюсь предположить из-за Kaspersky. Приостанови защиту и все скомилится
Спасибо, помогло. Буду знать.
Поделиться26826.05.2012 15:17:52
Привет.
Пытаюсь добавить обнаружение HID-устройства к этому коду:
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
#Skin_Image
EndEnumeration
Global Win1.s = "Подключено HID-устройство"
Global Win2.s = "Устройство не обнаруженно"
#USB_PID = $2012 ; Идентификаторы USB устройства.
#USB_VID = $2004
UsePNGImageDecoder()
Structure SCROLL_STRUCT
scroll_hwnd.l ;handle of window where to draw
scroll_text.s ;pointer scrolltext
scroll_x.l ;x position
scroll_y.l ;y position
scroll_width.l ;width of scroller
scroll_hFont.l ;Handle of Font
scroll_textcolor.l ;example: 00F7DDCCh (00BBGGRR)
scroll_alpha.b ;value for transparency (if using it on WS_EX_LAYERED window)
scroll_wait.l ;wait time (milliseconds) before draw scrolltext
scroll_pause.b ;dont modify this! Use PauseScroller function!
scroll_speed.l ;скорость скроллинга (милисекунды)
scroll_hThread.l ;дескриптор потока
EndStructure
Import "TextScroller.lib"
CreateScroller(scr.l)
PauseScroller (scr)
EndImport
UpdatePos.RECT
HOLLOW_BRUSH=GetStockObject_(#HOLLOW_BRUSH)
Procedure FindDevice_Timer()
Static Old_Test
Shared W_DeviceHandle
Test=HID_Lib_DeviceTest(#USB_PID, #USB_VID)
If Test<>Old_Test
Old_Test=Test
If Test
HID_Lib_CloseDevice(W_DeviceHandle)
W_DeviceHandle=HID_Lib_OpenDevice(#USB_PID, #USB_VID)
Win1.s = "Подключено HID устройство"
Else
HID_Lib_CloseDevice(W_DeviceHandle)
W_DeviceHandle=0
Win2.s = "Устройство не обнаруженно"
EndIf
EndIf
EndProcedure
Procedure Draw_y(x, y, Gadget, ImageID, Active_ImID=0)
GrabImage(#Skin_Image, #V_track, GadgetX(Gadget), GadgetY(Gadget), GadgetWidth(Gadget), GadgetHeight(Gadget))
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)
GrabImage(#Skin_Image, #H_track, GadgetX(Gadget), GadgetY(Gadget), GadgetWidth(Gadget), GadgetHeight(Gadget))
StartDrawing(CanvasOutput(Gadget))
DrawImage(ImageID(#H_track), 0, 0)
If Active_ImID
DrawAlphaImage(Active_ImID, 4, 0)
EndIf
DrawAlphaImage(ImageID, x, y)
StopDrawing()
EndProcedure
Procedure WindowCallback(hWnd, Msg, wParam, lParam)
Shared HOLLOW_BRUSH
Result = #PB_ProcessPureBasicEvents
If Msg = #WM_CTLCOLORSTATIC And GetDlgCtrlID_(lParam)=19
SetTextColor_(wParam, $FFFFFF)
SetBkMode_(wParam, #TRANSPARENT)
ProcedureReturn HOLLOW_BRUSH
EndIf
ProcedureReturn Result
EndProcedure
CatchImage(#Skin_Image, ?Skin_Image)
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)
x=OpenWindow(0, 0, 0, 200, 200, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetWindowCallback(@WindowCallback(), 0)
SetClassLongPtr_(WindowID(#Window_0), #GCL_HBRBACKGROUND, CreatePatternBrush_(ImageID(#Skin_Image)))
ContainerGadget(219, 5, 178, 190, 20)
SetGadgetColor(219, #PB_Gadget_BackColor, $000000)
SCROLL.SCROLL_STRUCT
SCROLL\scroll_hwnd = x
SCROLL\scroll_text = Win2
SCROLL\scroll_x = 5
SCROLL\scroll_y = 178
SCROLL\scroll_width = 185
SCROLL\scroll_hFont = LoadFont(2, "Times New Roman", 13, #PB_Font_Bold)
SCROLL\scroll_textcolor = RGB(0,128,255)
SCROLL\scroll_alpha = 200
SCROLL\scroll_speed = 20
CreateScroller(SCROLL)
CloseGadgetList()
If HID_Lib_DeviceTest(#USB_PID, #USB_VID)
If SCROLL\scroll_hThread
TerminateThread_(SCROLL\scroll_hThread, 0)
InvalidateRect_(WindowID(#Window_0), 0, #True)
SCROLL\scroll_text = Win1
SCROLL\scroll_hFont = LoadFont(2, "Times New Roman", 13, #PB_Font_Bold)
SCROLL\scroll_textcolor = RGB(0,128,255)
CreateScroller(SCROLL)
EndIf
Else
If SCROLL\scroll_hThread
TerminateThread_(SCROLL\scroll_hThread, 0)
InvalidateRect_(WindowID(#Window_0), 0, #True)
SCROLL\scroll_text = Win2
SCROLL\scroll_hFont = LoadFont(2, "Times New Roman", 13, #PB_Font_Bold)
SCROLL\scroll_textcolor = RGB(0,128,255)
CreateScroller(SCROLL)
EndIf
EndIf
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, 1, 30, ImageID(#V_knob1))
CanvasGadget(31, 35, 80, 15, 87)
Draw_y(0, 1, 31, ImageID(#V_knob2))
CanvasGadget(32, 50, 80, 15, 87)
Draw_y(0, 1, 32, ImageID(#V_knob3))
CanvasGadget(33, 65, 80, 15, 87)
Draw_y(0, 1, 33, ImageID(#V_knob4))
CanvasGadget(34, 80, 80, 15, 87)
Draw_y(0, 1, 34, ImageID(#V_knob5))
CanvasGadget(35, 95, 80, 15, 87)
Draw_y(0, 1, 35, ImageID(#V_knob6))
For i=20 To 35
SetGadgetAttribute(i, #PB_Canvas_Cursor, #PB_Cursor_Hand)
Next i
TextGadget(19, 120, 120, 15, 15,"")
Repeat
Event = WaitWindowEvent()
Window = EventWindow()
If Event = #PB_Event_Gadget
Gadget=EventGadget()
;If Gadget>=30 And Gadget<=35
Type = EventType()
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_MouseWheel Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
If Type = #PB_EventType_MouseWheel
y=GetGadgetData(Gadget)-GetGadgetAttribute(Gadget, #PB_Canvas_WheelDelta)*2
Else
y=GetGadgetAttribute(Gadget, #PB_Canvas_MouseY)-12
EndIf
If y<1 : y=1 : EndIf
If y>87-23 : y = 87-23 : 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+1, 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_MouseWheel Or (Type = #PB_EventType_MouseMove And GetGadgetAttribute(Gadget, #PB_Canvas_Buttons) = #PB_Canvas_LeftButton)
If Type = #PB_EventType_MouseWheel
x=GetGadgetData(Gadget)-GetGadgetAttribute(Gadget, #PB_Canvas_WheelDelta)*2
Else
x=GetGadgetAttribute(Gadget, #PB_Canvas_MouseX)-12
EndIf
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)
SetGadgetText(19, Str(x))
SetRect_(@UpdatePos, 120, 120, 120+15, 120+15)
InvalidateRect_(WindowID(0), @UpdatePos, 1)
; Мышка или вошла в пределы регулятора или вышла из него.
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
If Window = 0 And Event = #WM_MOUSEWHEEL
GetCursorPos_(@Cursor.POINT)
hWnd = WindowFromPoint_(Cursor\X|(Cursor\Y<<32))
Gadget=GetDlgCtrlID_(hWnd)
If Gadget>=20 And Gadget<=35
SendMessage_(hWnd, #WM_MOUSEWHEEL, EventwParam(), EventlParam())
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
DataSection
;{ ресурсы
Skin_Image:
IncludeBinary "Files\Skin_Image.png"
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И опять засада: текст в бегущей строке меняется только после перезапуска программы. Что не так делаю? 
Отредактировано max (26.05.2012 15:18:53)
Поделиться26926.05.2012 22:49:29
Там все довольно просто.
Получаем доступ к структуре SCROLL в процедуре FindDevice_Timer() и записываем в SCROLL\scroll_text требуемый текст.
Только что проверил - работает без сбоев, текст меняется при подключении и отключении устройства.
Это лишнее.
If HID_Lib_DeviceTest(#USB_PID, #USB_VID)
If SCROLL\scroll_hThread
TerminateThread_(SCROLL\scroll_hThread, 0)
InvalidateRect_(WindowID(#Window_0), 0, #True)
SCROLL\scroll_text = Win1
SCROLL\scroll_hFont = LoadFont(2, "Times New Roman", 13, #PB_Font_Bold)
SCROLL\scroll_textcolor = RGB(0,128,255)
CreateScroller(SCROLL)
EndIf
Else
If SCROLL\scroll_hThread
TerminateThread_(SCROLL\scroll_hThread, 0)
InvalidateRect_(WindowID(#Window_0), 0, #True)
SCROLL\scroll_text = Win2
SCROLL\scroll_hFont = LoadFont(2, "Times New Roman", 13, #PB_Font_Bold)
SCROLL\scroll_textcolor = RGB(0,128,255)
CreateScroller(SCROLL)
EndIf
EndIfПоделиться27026.05.2012 23:47:59
Что-то я видимо не допонял:
Procedure FindDevice_Timer()
Static Old_Test
Shared W_DeviceHandle
Test=HID_Lib_DeviceTest(#USB_PID, #USB_VID)
If Test<>Old_Test
Old_Test=Test
If Test
HID_Lib_CloseDevice(W_DeviceHandle)
W_DeviceHandle=HID_Lib_OpenDevice(#USB_PID, #USB_VID)
SCROLL.SCROLL_STRUCT
SCROLL\scroll_text =Win1
Else
HID_Lib_CloseDevice(W_DeviceHandle)
W_DeviceHandle=0
SCROLL.SCROLL_STRUCT
SCROLL\scroll_text =Win2
EndIf
EndIf
EndProcedurпотому что как ркботало, так и работает.
Похожие темы
| Рисованный интерфейс FM | OpenSource | 27.04.2010 |
| Фон | Вопросы по PureBasic | 16.03.2014 |
| (Статья) Создаем VSM-модель для протеуса (DLL библиотека) | PureBasic для Windows | 17.04.2014 |
| Перевод книги "PureBasic - A Beginners Guide" | Материалы сайта | 04.05.2016 |