PureBasic - форум

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

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


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


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

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

241

Ага, так не мигает. Спасибо.

0

242

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

Твой код не компилируется из-за нехватки рисунков.

Картинки в 200 посте.

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

Зачем постоянно создавать TextGadget? Поэтому и мерцает!

Даже и не знаю, зачам так сделал. Убрал, не мерцает, но виден белый квадрат.

0

243

При наложении полупрозрачной картинки получается такой эффект:
http://uploads.ru/i/x/Y/J/xYJak.gif
Это как-нибудь лечится? :dontknow:

0

244

Картинку накладывай на фоновый рисунок и таких проблем не будет.

0

245

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

Картинку накладывай на фоновый рисунок и таких проблем не будет.

Спасибо, но я имел ввиду это:
http://uploads.ru/i/j/U/g/jUgAO.gif

0

246

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

я имел ввиду это

Этот вариант не решает проблему? Рисованный интерфейс программы

0

247

Каюсь :blush: , грешен: упустил этот момент x=OpenWindow.

0

248

Сейчас единицы числа выводятся слева, а можно сделать чтобы выводились справа?
Пробовал так:

Код:
SetGadgetText(19, " " + Str(z))

не помогает.

Отредактировано max (12.05.2012 22:04:38)

0

249

Флаг #PB_Text_Right при создании TextGadget.

0

250

А ведь раньше использовал этот флаг.  :blush: Спасибо.

0

251

Не подскажите, почему этот код у меня не компилируется?

Код:
 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 секунд. Отключение."

0

252

У меня нормально работает совместно с этой версией библиотеки. http://purebasic.info/phpBB2/download.php?id=880

0

253

У меня такая же версия. В чем может быть причина? Пурик 4.60 x86.

0

254

Сложно сказать если у меня эта ошибка не возникает.
Когда пишет что отлаживаемое приложение не отвечает, это значит что программа повисла. Можно в пошаговом режиме посмотреть где это происходит.

0

255

Понял.

0

256

В связи с тем, что не могу скомпелировать, пошаговый режим тоже не могу использовать. Shift+F5 - ни где не виснет. Ставил контрольную точку в разные места.

0

257

А где сама библа лежит? У меня вместе с файлом.

0

258

Если эту строчку

Код:
CreateScroller(SCROLL)

комментировать, то прога запускается, но соответственно нет скроллинга. Пробовал и переустанавливать, и на 4.50 - результат один.

0

259

Я так полагаю, чтобы сделать CreatePopupMenu с картинками
http://uploads.ru/i/j/r/R/jrRTf.png
нужно использовать XP_Menu_Lib?

0

260

Необязательно.
Есть функция CreatePopupImageMenu().

0

261

Спасибо.

0

262

Привет!
Возникла проблема при соединении кода из 240 поста и кода бегущей строки.
Проблема с бегущей строкой:
http://uploads.ru/i/v/x/m/vxmoc.gif
Если в коде убрать строку

Код:
SetWindowLongPtr_(x,#GWL_EXSTYLE,GetWindowLongPtr_(x,#GWL_EXSTYLE)|#WS_EX_COMPOSITED)

бегущая строка работает, но появляется другая:
http://uploads.ru/i/O/I/F/OIFyh.gif
Как можно от этого избавится? :dontknow:

Код:
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

0

263

Как вариант, добавляем объявление структуры в начало программы:

Код:
          UpdatePos.RECT

и эти строки после SetGadgetText(19, Str(x)):

Код:
          SetRect_(@UpdatePos, 120, 120, 120+15, 120+15)
          InvalidateRect_(WindowID(0), @UpdatePos, 1)

Они нужны для принудительной прорисовки области окна с координатами 120, 120, 135, 135.

+1

264

Спасибо, сейчас попробую.

0

265

Все отлично работает. Спасибо.

0

266

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

Не подскажите, почему этот код у меня не компилируется?

Осмелюсь предположить из-за Kaspersky. Приостанови защиту и все скомилится

0

267

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

Осмелюсь предположить из-за Kaspersky. Приостанови защиту и все скомилится

Спасибо, помогло. Буду знать.

0

268

Привет.
Пытаюсь добавить обнаружение 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

И опять засада: текст в бегущей строке меняется только после перезапуска программы. Что не так делаю? :dontknow:

Отредактировано max (26.05.2012 15:18:53)

0

269

Там все довольно просто.
Получаем доступ к структуре 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

0

270

Что-то я видимо не допонял:

Код:
 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

потому что как ркботало, так и работает.

0


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