Ага, так не мигает. Спасибо.
Рисованный интерфейс программы
Сообщений 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 |