PureBasic - форум

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

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


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


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

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

211

Спасибо, надо чаще посещать этот сайт. :)

0

212

Как-то странно ведет себя код с balloon`ом: при нажатии на кнопку подсказка теряется. Создавал сам в Visual Designer, эффект такой же. В чем может быть причина?
Нашел в код-архиве:

Код:
; German forum: http://www.purebasic.fr/german/viewtopic.php?t=1031&highlight=
; Author: Falko (updated for PB 4.00 by Andre)
; Date: 08. December 2004
; OS: Windows
; Demo: No


Enumeration 
  #Window_0 
EndEnumeration 

Enumeration 
  #Button_0 
EndEnumeration 


; BalloonTip Constants 
#TOOLTIP_NO_ICON      = 0 
#TOOLTIP_INFO_ICON    = 1 
#TOOLTIP_WARNING_ICON = 2 
#TOOLTIP_ERROR_ICON   = 3 
Global ToolTip 
Procedure BalloonTip(WindowID, Gadget, Text$ , Title$, Icon) 
  
  ToolTip=CreateWindowEx_(0,"ToolTips_Class32","",#WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON,0,0,0,0,WindowID,0,GetModuleHandle_(0),0) 
  SendMessage_(ToolTip,#TTM_SETTIPTEXTCOLOR,GetSysColor_(#COLOR_INFOTEXT),0) 
  SendMessage_(ToolTip,#TTM_SETTIPBKCOLOR,GetSysColor_(#COLOR_INFOBK),0) 
  SendMessage_(ToolTip,#TTM_SETMAXTIPWIDTH,0,180) 
  Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO) 
  Balloon\uFlags=#TTF_IDISHWND | #TTF_SUBCLASS 
  Balloon\hWnd=GadgetID(Gadget) 
  Balloon\uId=GadgetID(Gadget) 
  Balloon\lpszText=@Text$ 
  SendMessage_(ToolTip, #TTM_ADDTOOL, 0, Balloon) 
  If Title$ > "" 
    SendMessage_(ToolTip, #TTM_SETTITLE, Icon, @Title$) 
  EndIf 
  
EndProcedure 

Procedure DelBalloonTip(Gadget); Mein Tip (Falko) 
  Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO) 
  Balloon\hWnd=GadgetID(Gadget) 
  Balloon\uId=GadgetID(Gadget) 
  SendMessage_(ToolTip, #TTM_DELTOOL, 0, Balloon) 
EndProcedure 



Procedure Open_Window_0() 
  If OpenWindow(#Window_0, 338, -11, 178, 138, "Change BalloonTip",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar ) 
    If CreateGadgetList(WindowID(#Window_0)) 
      ButtonGadget(#Button_0, 20, 20, 140, 90, "Press button to change BalloonTip",#PB_Button_MultiLine) 
      BalloonTip(WindowID(#Window_0), #Button_0, "Test", "", #TOOLTIP_NO_ICON) 
      SendMessage_(#Window_0, #TTM_ACTIVATE, 0, 0) 
    EndIf 
  EndIf 
EndProcedure 

Open_Window_0() 


Repeat 
  
  Event = WaitWindowEvent() 
  
  If Event = #PB_Event_Gadget 
    
    ;Debug "WindowID: " + Str(EventWindowID()) 
    
    GadgetID = EventGadget() 
    
    If GadgetID = #Button_0 
      a=Random(2) 
      If a=0 
        Tip.s="Balloon 1" 
       ElseIf a=1 
        Tip="Balloon 2" 
       ElseIf a=2 
        Tip="Balloon 3" 
      EndIf      
    DelBalloonTip(#Button_0) 
    BalloonTip(WindowID(#Window_0), #Button_0, Tip, "", #TOOLTIP_NO_ICON) 
    EndIf 
    
  EndIf 
  
Until Event = #PB_Event_CloseWindow 

End 
;

тут не теряется из-зи обновления balloon.

Отредактировано max (10.05.2012 23:03:19)

0

213

Обычная подсказка тоже теряется.
Наверное особенность винды.

0

214

Но при наведении на другой гаджет, а потом опять на этот, появляется.

0

215

Ни чего лучшего не придумал, но тем не менее работает:

Код:
Enumeration
  #Window_0
EndEnumeration

Global ToolTip 

Procedure BalloonTip(WindowID, Gadget, Text$); , Title$, Icon)
  
  ToolTip=CreateWindowEx_(0,"ToolTips_Class32","",#WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON,0,0,0,0,WindowID,0,GetModuleHandle_(0),0)
  SendMessage_(ToolTip,#TTM_SETTIPTEXTCOLOR,GetSysColor_(#COLOR_INFOTEXT),0)
  SendMessage_(ToolTip,#TTM_SETTIPBKCOLOR,GetSysColor_(#COLOR_INFOBK),0)
  SendMessage_(ToolTip,#TTM_SETMAXTIPWIDTH,0,180)
  Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO)
  Balloon\uFlags=#TTF_IDISHWND | #TTF_SUBCLASS
  Balloon\hWnd=GadgetID(Gadget)
  Balloon\uId=GadgetID(Gadget)
  Balloon\lpszText=@Text$
  SendMessage_(ToolTip, #TTM_ADDTOOL, 0, Balloon)
  If Title$ > ""
    SendMessage_(ToolTip, #TTM_SETTITLE, Icon, @Title$)
  EndIf
  
EndProcedure

Procedure DelBalloonTip(Gadget); Mein Tip (Falko) 
  Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO) 
  Balloon\hWnd=GadgetID(Gadget) 
  Balloon\uId=GadgetID(Gadget) 
  SendMessage_(ToolTip, #TTM_DELTOOL, 0, Balloon) 
EndProcedure 

OpenWindow(#Window_0, 214, 0, 410, 210, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )

      ButtonGadget(1, 10, 170, 30, 30, "1")
      BalloonTip(GadgetID(1), 1, "1");, "", #TOOLTIP_NO_ICON)

      ButtonGadget(2, 10, 130, 30, 30, "2")
      BalloonTip(GadgetID(2), 2, "2");, "", #TOOLTIP_NO_ICON)
      
      ButtonGadget(3, 50, 90, 30, 30, "3")
      BalloonTip(GadgetID(3), 3, "3");, "", #TOOLTIP_NO_ICON)
      
      ButtonGadget(4, 90, 90, 30, 30, "4")
      BalloonTip(GadgetID(4), 4, "4");, "", #TOOLTIP_NO_ICON)
      
      ButtonGadget(5, 130, 90, 30, 30, "5")
      BalloonTip(GadgetID(5), 5, "5");, "", #TOOLTIP_NO_ICON)
      
      ButtonGadget(6, 170, 90, 30, 30, "6")
      BalloonTip(GadgetID(6), 6, "6");, "", #TOOLTIP_NO_ICON)
      
      ButtonGadget(7, 210, 90, 30, 30, "7")
      BalloonTip(GadgetID(7), 7, "7");, "", #TOOLTIP_NO_ICON)
      
      ButtonGadget(8, 250, 90, 30, 30, "8")
      BalloonTip(GadgetID(8), 8, "8");, "", #TOOLTIP_NO_ICON)
      
      ButtonGadget(9, 290, 90, 30, 30, "9")
      BalloonTip(GadgetID(9), 9, "9");, "", #TOOLTIP_NO_ICON)
      
      ButtonGadget(10, 330, 90, 30, 30, "10")
      BalloonTip(GadgetID(10), 10, "10");, "", #TOOLTIP_NO_ICON)
  
            
      SendMessage_(#Window_0, #TTM_ACTIVATE, 0, 0) 

Repeat 
  
  Event = WaitWindowEvent() 
  
  If Event = #PB_Event_Gadget 
    
    GadgetID = EventGadget() 
    
    Select GadgetID
        Case 1
    DelBalloonTip(1) 
    BalloonTip(GadgetID(1), 1, "1");, "", #TOOLTIP_NO_ICON)
        Case 2
    DelBalloonTip(2) 
    BalloonTip(GadgetID(2), 2, "2");, "", #TOOLTIP_NO_ICON)   
        Case 3
    DelBalloonTip(3) 
    BalloonTip(GadgetID(3), 3, "3");, "", #TOOLTIP_NO_ICON)
        Case 4
    DelBalloonTip(4) 
    BalloonTip(GadgetID(4), 4, "4");, "", #TOOLTIP_NO_ICON) 
            Case 5
    DelBalloonTip(5) 
    BalloonTip(GadgetID(5), 5, "5");, "", #TOOLTIP_NO_ICON)
        Case 6
    DelBalloonTip(6) 
    BalloonTip(GadgetID(6), 6, "6");, "", #TOOLTIP_NO_ICON)   
        Case 7
    DelBalloonTip(7) 
    BalloonTip(GadgetID(7), 7, "7");, "", #TOOLTIP_NO_ICON)
        Case 8
    DelBalloonTip(8) 
    BalloonTip(GadgetID(8), 8, "8");, "", #TOOLTIP_NO_ICON) 
            Case 9
    DelBalloonTip(9) 
    BalloonTip(GadgetID(9), 9, "9");, "", #TOOLTIP_NO_ICON)
        Case 10
    DelBalloonTip(10) 
    BalloonTip(GadgetID(10), 10, "10");, "", #TOOLTIP_NO_ICON)   
    
   EndSelect 
    
 EndIf   
  
Until Event = #PB_Event_CloseWindow

0

216

Попробовал сделать отключение подсказок, но что-то не так. При загрузке проги подсказки не активны, при нажатии на кнопку "Вкл./Выкл." подсказки появляются, при повторном нажатии на "Вкл./Выкл." подсказка над этой кнопкой проподает, на остальных есть. Нажимаю на другую кнопку - пропадает на ней. И так далее. И так, и сяк делал. Что не так делаю? :dontknow: Уже который час бьюс, результат - ноль. :tired:

Код:
Enumeration
  #Window_0
EndEnumeration

Global ToolTip 
Global Flag_ToolTip.b =0  

Procedure BalloonTip(WindowID, Gadget, Text$); , Title$, Icon)
  
  ToolTip=CreateWindowEx_(0,"ToolTips_Class32","",#WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON,0,0,0,0,WindowID,0,GetModuleHandle_(0),0)
  SendMessage_(ToolTip,#TTM_SETTIPTEXTCOLOR,GetSysColor_(#COLOR_INFOTEXT),0)
  SendMessage_(ToolTip,#TTM_SETTIPBKCOLOR,GetSysColor_(#COLOR_INFOBK),0)
  SendMessage_(ToolTip,#TTM_SETMAXTIPWIDTH,0,180)
  Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO)
  Balloon\uFlags=#TTF_IDISHWND | #TTF_SUBCLASS
  Balloon\hWnd=GadgetID(Gadget)
  Balloon\uId=GadgetID(Gadget)
  Balloon\lpszText=@Text$
  SendMessage_(ToolTip, #TTM_ADDTOOL, 0, Balloon)
  If Title$ > ""
    SendMessage_(ToolTip, #TTM_SETTITLE, Icon, @Title$)
  EndIf
  
EndProcedure

Procedure DelBalloonTip(Gadget); Mein Tip (Falko) 
  Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO) 
  Balloon\hWnd=GadgetID(Gadget) 
  Balloon\uId=GadgetID(Gadget) 
  SendMessage_(ToolTip, #TTM_DELTOOL, 0, Balloon) 
EndProcedure 

OpenWindow(#Window_0, 214, 0, 410, 210, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
      
      ButtonGadget(5, 130, 90, 30, 30, "5")
      ;BalloonTip(GadgetID(5), 5, "5");, "", #TOOLTIP_NO_ICON)
      
      ButtonGadget(6, 170, 90, 30, 30, "6")
      ;BalloonTip(GadgetID(6), 6, "6");, "", #TOOLTIP_NO_ICON)
      
      ButtonGadget(7, 210, 90, 30, 30, "7")
      ;BalloonTip(GadgetID(7), 7, "7");, "", #TOOLTIP_NO_ICON)
      
      ButtonGadget(8, 250, 90, 30, 30, "8")
      ;BalloonTip(GadgetID(8), 8, "8");, "", #TOOLTIP_NO_ICON)
      
      ButtonGadget(9, 290, 90, 30, 30, "9")
      ;BalloonTip(GadgetID(9), 9, "9");, "", #TOOLTIP_NO_ICON)
      
      ButtonGadget(10, 330, 90, 30, 30, "10")
      ;BalloonTip(GadgetID(10), 10, "10");, "", #TOOLTIP_NO_ICON)
      
      ButtonGadget(11, 130, 130, 70, 30, "Вкл./Выкл.")
      ;BalloonTip(GadgetID(11), 11, "Баллон");, "", #TOOLTIP_NO_ICON)
            
     ; SendMessage_(#Window_0, #TTM_ACTIVATE, 0, 0) 

Repeat 
  
  Event =  WaitWindowEvent() 
  Window = EventWindow() 
  Gadget = EventGadget()
  
  If Event = #PB_Event_Gadget 
    
        Select GadgetID
      Case 5        
        If Flag_ToolTip = 1          
          DelBalloonTip(5) 
         ; BalloonTip(GadgetID(5), 5, "")
        ElseIf Flag_ToolTip = 0
          DelBalloonTip(5) 
            BalloonTip(GadgetID(5), 5, "1")
            EndIf
          Case 6
            If Flag_ToolTip = 1
     DelBalloonTip(6) 
    BalloonTip(GadgetID(6), 6, "")             
              ElseIf Flag_ToolTip = 0
    DelBalloonTip(6) 
    BalloonTip(GadgetID(6), 6, "2")
    EndIf
  Case 7
    If Flag_ToolTip = 1
     DelBalloonTip(7) 
    BalloonTip(GadgetID(7), 7, "")     
      ElseIf Flag_ToolTip = 0
    DelBalloonTip(7) 
    BalloonTip(GadgetID(7), 7, "3")
    EndIf
  Case 8
    If Flag_ToolTip = 1
    DelBalloonTip(8) 
    BalloonTip(GadgetID(8), 8, "")      
      ElseIf Flag_ToolTip = 0
    DelBalloonTip(8) 
    BalloonTip(GadgetID(8), 8, "4")
    EndIf
  Case 9
    If Flag_ToolTip = 1
    DelBalloonTip(9) 
    BalloonTip(GadgetID(9), 9, "")      
      ElseIf Flag_ToolTip = 0
    DelBalloonTip(9) 
    BalloonTip(GadgetID(9), 9, "5")
    EndIf
  Case 10
    If Flag_ToolTip = 1
    DelBalloonTip(10) 
    BalloonTip(GadgetID(10), 10, "")       
      ElseIf Flag_ToolTip = 0
    DelBalloonTip(10) 
    BalloonTip(GadgetID(10), 10, "6")  
    EndIf
  Case 11
    If Flag_ToolTip = 1
    DelBalloonTip(11) 
    BalloonTip(GadgetID(11), 11, "")      
      ElseIf Flag_ToolTip = 0
    DelBalloonTip(11) 
    BalloonTip(GadgetID(11), 11, "7")  
    EndIf
    
EndSelect 
      Type=EventType()
Select Gadget 
           
          Case 11
               Toggle = Toggle ! 1
               If Toggle
                 Flag_ToolTip = 1
                 BalloonTip(GadgetID(5), 5, "1");, "", #TOOLTIP_NO_ICON)
                 BalloonTip(GadgetID(6), 6, "2");, "", #TOOLTIP_NO_ICON)
                 BalloonTip(GadgetID(7), 7, "3");, "", #TOOLTIP_NO_ICON)
                 BalloonTip(GadgetID(8), 8, "4");, "", #TOOLTIP_NO_ICON)
                 BalloonTip(GadgetID(9), 9, "5");, "", #TOOLTIP_NO_ICON)
                 BalloonTip(GadgetID(10), 10, "6");, "", #TOOLTIP_NO_ICON)
                 BalloonTip(GadgetID(11), 11, "7");
                 SendMessage_(#Window_0, #TTM_ACTIVATE, 0, 0)
               Else
              If Flag_ToolTip = 1
                 For i = 5 To 11
                   DelBalloonTip(i) 
               ;  BalloonTip(GadgetID(i), i, "");, "", #TOOLTIP_NO_ICON)
               Next i
               EndIf
               EndIf
            
        EndSelect
    
 EndIf   
  
Until Event = #PB_Event_CloseWindow

Отредактировано max (11.05.2012 22:15:10)

0

217

При каждом вызове процедуры BalloonTip(), в переменой ToolTip оказывается хэндл окна подсказки, а так как переменная одна, то предыдущее значения теряется.
Поэтому и не удаляется потому что хэндлы потеряны.

Я бы порекомендовал бы привязать структуру к гаджету (пример в кнопках картинках и во вращающихся регуляторах) и в ней хранить все что нужно, но проще для понимания будет использование WinAPI функций GetProp и SetProp. Поищи в гугле их описание.

Код:
Enumeration
  #Window_0
EndEnumeration

;Global ToolTip 
Global Flag_ToolTip.b =0

Procedure DelBalloonTip(Gadget); Mein Tip (Falko) 
  ToolTip=GetProp_(GadgetID(Gadget), "BalloonTip")
  If ToolTip
    Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO) 
    Balloon\hWnd=GadgetID(Gadget) 
    Balloon\uId=GadgetID(Gadget) 
    SendMessage_(ToolTip, #TTM_DELTOOL, 0, Balloon)
    RemoveProp_(GadgetID(Gadget), "BalloonTip")
  EndIf
EndProcedure   

Procedure BalloonTip(WindowID, Gadget, Text$); , Title$, Icon)
  
  If GetProp_(GadgetID(Gadget), "BalloonTip")
    DelBalloonTip(Gadget)
  EndIf
  
  ToolTip=CreateWindowEx_(0,"ToolTips_Class32","",#WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON,0,0,0,0,WindowID,0,GetModuleHandle_(0),0)
  SendMessage_(ToolTip,#TTM_SETTIPTEXTCOLOR,GetSysColor_(#COLOR_INFOTEXT),0)
  SendMessage_(ToolTip,#TTM_SETTIPBKCOLOR,GetSysColor_(#COLOR_INFOBK),0)
  SendMessage_(ToolTip,#TTM_SETMAXTIPWIDTH,0,180)
  Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO)
  Balloon\uFlags=#TTF_IDISHWND | #TTF_SUBCLASS
  Balloon\hWnd=GadgetID(Gadget)
  Balloon\uId=GadgetID(Gadget)
  Balloon\lpszText=@Text$
  SendMessage_(ToolTip, #TTM_ADDTOOL, 0, Balloon)
  If Title$ > ""
    SendMessage_(ToolTip, #TTM_SETTITLE, Icon, @Title$)
  EndIf
  
  SetProp_(GadgetID(Gadget), "BalloonTip", ToolTip)
  
EndProcedure


OpenWindow(#Window_0, 214, 0, 410, 210, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )

ButtonGadget(5, 130, 90, 30, 30, "5")
;BalloonTip(GadgetID(5), 5, "5");, "", #TOOLTIP_NO_ICON)

ButtonGadget(6, 170, 90, 30, 30, "6")
;BalloonTip(GadgetID(6), 6, "6");, "", #TOOLTIP_NO_ICON)

ButtonGadget(7, 210, 90, 30, 30, "7")
;BalloonTip(GadgetID(7), 7, "7");, "", #TOOLTIP_NO_ICON)

ButtonGadget(8, 250, 90, 30, 30, "8")
;BalloonTip(GadgetID(8), 8, "8");, "", #TOOLTIP_NO_ICON)

ButtonGadget(9, 290, 90, 30, 30, "9")
;BalloonTip(GadgetID(9), 9, "9");, "", #TOOLTIP_NO_ICON)

ButtonGadget(10, 330, 90, 30, 30, "10")
;BalloonTip(GadgetID(10), 10, "10");, "", #TOOLTIP_NO_ICON)

ButtonGadget(11, 130, 130, 70, 30, "Вкл./Выкл.")
;BalloonTip(GadgetID(11), 11, "Баллон");, "", #TOOLTIP_NO_ICON)

; SendMessage_(#Window_0, #TTM_ACTIVATE, 0, 0) 

Repeat 
  
  Event =  WaitWindowEvent() 
  Window = EventWindow() 
  Gadget = EventGadget()
  
  If Event = #PB_Event_Gadget 
    
    Select Gadget
      Case 5        
        If Flag_ToolTip = 1          
          DelBalloonTip(5) 
          ; BalloonTip(GadgetID(5), 5, "")
        ElseIf Flag_ToolTip = 0
          DelBalloonTip(5) 
          BalloonTip(GadgetID(5), 5, "1")
        EndIf
      Case 6
        If Flag_ToolTip = 1
          DelBalloonTip(6) 
          BalloonTip(GadgetID(6), 6, "")             
        ElseIf Flag_ToolTip = 0
          DelBalloonTip(6) 
          BalloonTip(GadgetID(6), 6, "2")
        EndIf
      Case 7
        If Flag_ToolTip = 1
          DelBalloonTip(7) 
          BalloonTip(GadgetID(7), 7, "")     
        ElseIf Flag_ToolTip = 0
          DelBalloonTip(7) 
          BalloonTip(GadgetID(7), 7, "3")
        EndIf
      Case 8
        If Flag_ToolTip = 1
          DelBalloonTip(8) 
          BalloonTip(GadgetID(8), 8, "")      
        ElseIf Flag_ToolTip = 0
          DelBalloonTip(8) 
          BalloonTip(GadgetID(8), 8, "4")
        EndIf
      Case 9
        If Flag_ToolTip = 1
          DelBalloonTip(9) 
          BalloonTip(GadgetID(9), 9, "")      
        ElseIf Flag_ToolTip = 0
          DelBalloonTip(9) 
          BalloonTip(GadgetID(9), 9, "5")
        EndIf
      Case 10
        If Flag_ToolTip = 1
          DelBalloonTip(10) 
          BalloonTip(GadgetID(10), 10, "")       
        ElseIf Flag_ToolTip = 0
          DelBalloonTip(10) 
          BalloonTip(GadgetID(10), 10, "6")  
        EndIf
      Case 11
        If Flag_ToolTip = 1
          DelBalloonTip(11) 
          BalloonTip(GadgetID(11), 11, "")      
        ElseIf Flag_ToolTip = 0
          DelBalloonTip(11) 
          BalloonTip(GadgetID(11), 11, "7")  
        EndIf
        
    EndSelect 
    Type=EventType()
    Select Gadget 
        
      Case 11
        Toggle = Toggle ! 1
        If Toggle
          Flag_ToolTip = 1
          BalloonTip(GadgetID(5), 5, "1");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(6), 6, "2");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(7), 7, "3");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(8), 8, "4");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(9), 9, "5");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(10), 10, "6");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(11), 11, "7");
          SendMessage_(#Window_0, #TTM_ACTIVATE, 0, 0)
        Else
          If Flag_ToolTip = 1
            For i = 5 To 11
              DelBalloonTip(i) 
              ;  BalloonTip(GadgetID(i), i, "");, "", #TOOLTIP_NO_ICON)
            Next i
          EndIf
        EndIf
        
    EndSelect
    
  EndIf   
  
Until Event = #PB_Event_CloseWindow

0

218

А еще правильнее сделать так:

Код:
Enumeration
  #Window_0
EndEnumeration

Global ToolTip 
Global Flag_ToolTip.b =0

Procedure DelBalloonTip(Gadget); Mein Tip (Falko) 
    Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO) 
    Balloon\hWnd=GadgetID(Gadget) 
    Balloon\uId=GadgetID(Gadget) 
    SendMessage_(ToolTip, #TTM_DELTOOL, 0, Balloon)
EndProcedure   

Procedure BalloonTip(WindowID, Gadget, Text$); , Title$, Icon)

  Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO)
  Balloon\uFlags=#TTF_IDISHWND | #TTF_SUBCLASS
  Balloon\hWnd=GadgetID(Gadget)
  Balloon\uId=GadgetID(Gadget)
  Balloon\lpszText=@Text$
  SendMessage_(ToolTip, #TTM_ADDTOOL, 0, Balloon)
  If Title$ > ""
    SendMessage_(ToolTip, #TTM_SETTITLE, Icon, @Title$)
  EndIf
  
EndProcedure


OpenWindow(#Window_0, 214, 0, 410, 210, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )

  ToolTip=CreateWindowEx_(0,"ToolTips_Class32","",#WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON,0,0,0,0,WindowID(#Window_0),0,GetModuleHandle_(0),0)
  SendMessage_(ToolTip,#TTM_SETTIPTEXTCOLOR,GetSysColor_(#COLOR_INFOTEXT),0)
  SendMessage_(ToolTip,#TTM_SETTIPBKCOLOR,GetSysColor_(#COLOR_INFOBK),0)
  SendMessage_(ToolTip,#TTM_SETMAXTIPWIDTH,0,180)


ButtonGadget(5, 130, 90, 30, 30, "5")
;BalloonTip(GadgetID(5), 5, "5");, "", #TOOLTIP_NO_ICON)

ButtonGadget(6, 170, 90, 30, 30, "6")
;BalloonTip(GadgetID(6), 6, "6");, "", #TOOLTIP_NO_ICON)

ButtonGadget(7, 210, 90, 30, 30, "7")
;BalloonTip(GadgetID(7), 7, "7");, "", #TOOLTIP_NO_ICON)

ButtonGadget(8, 250, 90, 30, 30, "8")
;BalloonTip(GadgetID(8), 8, "8");, "", #TOOLTIP_NO_ICON)

ButtonGadget(9, 290, 90, 30, 30, "9")
;BalloonTip(GadgetID(9), 9, "9");, "", #TOOLTIP_NO_ICON)

ButtonGadget(10, 330, 90, 30, 30, "10")
;BalloonTip(GadgetID(10), 10, "10");, "", #TOOLTIP_NO_ICON)

ButtonGadget(11, 130, 130, 70, 30, "Вкл./Выкл.")
;BalloonTip(GadgetID(11), 11, "Баллон");, "", #TOOLTIP_NO_ICON)

; SendMessage_(#Window_0, #TTM_ACTIVATE, 0, 0) 

Repeat 
  
  Event =  WaitWindowEvent() 
  Window = EventWindow() 
  Gadget = EventGadget()
  
  If Event = #PB_Event_Gadget 
    
    Select Gadget
      Case 5        
        If Flag_ToolTip = 1          
          DelBalloonTip(5) 
          ; BalloonTip(GadgetID(5), 5, "")
        ElseIf Flag_ToolTip = 0
          DelBalloonTip(5) 
          BalloonTip(GadgetID(5), 5, "1")
        EndIf
      Case 6
        If Flag_ToolTip = 1
          DelBalloonTip(6) 
          BalloonTip(GadgetID(6), 6, "")             
        ElseIf Flag_ToolTip = 0
          DelBalloonTip(6) 
          BalloonTip(GadgetID(6), 6, "2")
        EndIf
      Case 7
        If Flag_ToolTip = 1
          DelBalloonTip(7) 
          BalloonTip(GadgetID(7), 7, "")     
        ElseIf Flag_ToolTip = 0
          DelBalloonTip(7) 
          BalloonTip(GadgetID(7), 7, "3")
        EndIf
      Case 8
        If Flag_ToolTip = 1
          DelBalloonTip(8) 
          BalloonTip(GadgetID(8), 8, "")      
        ElseIf Flag_ToolTip = 0
          DelBalloonTip(8) 
          BalloonTip(GadgetID(8), 8, "4")
        EndIf
      Case 9
        If Flag_ToolTip = 1
          DelBalloonTip(9) 
          BalloonTip(GadgetID(9), 9, "")      
        ElseIf Flag_ToolTip = 0
          DelBalloonTip(9) 
          BalloonTip(GadgetID(9), 9, "5")
        EndIf
      Case 10
        If Flag_ToolTip = 1
          DelBalloonTip(10) 
          BalloonTip(GadgetID(10), 10, "")       
        ElseIf Flag_ToolTip = 0
          DelBalloonTip(10) 
          BalloonTip(GadgetID(10), 10, "6")  
        EndIf
      Case 11
        If Flag_ToolTip = 1
          DelBalloonTip(11) 
          BalloonTip(GadgetID(11), 11, "")      
        ElseIf Flag_ToolTip = 0
          DelBalloonTip(11) 
          BalloonTip(GadgetID(11), 11, "7")  
        EndIf
        
    EndSelect 
    Type=EventType()
    Select Gadget 
        
      Case 11
        Toggle = Toggle ! 1
        If Toggle
          Flag_ToolTip = 1
          BalloonTip(GadgetID(5), 5, "1");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(6), 6, "2");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(7), 7, "3");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(8), 8, "4");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(9), 9, "5");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(10), 10, "6");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(11), 11, "7");
          SendMessage_(#Window_0, #TTM_ACTIVATE, 0, 0)
        Else
          If Flag_ToolTip = 1
            For i = 5 To 11
              DelBalloonTip(i) 
              ;  BalloonTip(GadgetID(i), i, "");, "", #TOOLTIP_NO_ICON)
            Next i
          EndIf
        EndIf
        
    EndSelect
    
  EndIf   
  
Until Event = #PB_Event_CloseWindow

Зачем создавать много окон, если достаточно одного?

+1

219

То есть дело было в том, что создавалось много окон? Блин, столько времени убил. Спасибо.

0

220

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

То есть дело было в том, что создавалось много окон?

Нет.
В том, что не запоминались хэндлы этих окон и поэтому обратится можно было только к созданному последним.

0

221

Ясно. Возникла другая проблема: при нажатии на кнопки, кроме "Вкл./Выкл.", подсказки теряются. Думаю это из-за флага Flag_ToolTip. В нужном направлении копаю?

0

222

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

То есть дело было в том, что создавалось много окон?

Нет.
В том, что не запоминались хэндлы этих окон и поэтому обратится можно было только к созданному последним.

Пропустил пост 217, вот и не понял.

0

223

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

Думаю это из-за флага Flag_ToolTip.

Да, он устанавливается, но нигде не сбрасывается!

Вообще, это легко проверяется с помощью отладчика в пошаговом режиме.
Скажем, ставим точку остановки программы на обработчике кнопки с ИД 5. Нажимаем эту кнопку и смотрим пошагово как выполняется программа.

0

224

Понал, сейчас попробую.

0

225

Что-то не понял как работать с отладчиком. Ставлю точку F9, коипилирую прогу, нажимаю кнопку, прога виснет.

0

226

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

Да, он устанавливается, но нигде не сбрасывается!

Сделал сброс, но результат тот же:

Код:
Case 11
        Toggle = Toggle ! 1
        If Toggle
        If  Flag_ToolTip = 0
          BalloonTip(GadgetID(5), 5, "1");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(6), 6, "2");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(7), 7, "3");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(8), 8, "4");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(9), 9, "5");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(10), 10, "6");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(11), 11, "7");
          SendMessage_(#Window_0, #TTM_ACTIVATE, 0, 0)
          Flag_ToolTip = 1
          EndIf
        Else
          If Flag_ToolTip = 1
            For i = 5 To 11
              DelBalloonTip(i) 
              ;  BalloonTip(GadgetID(i), i, "");, "", #TOOLTIP_NO_ICON)
            Next i
            Flag_ToolTip = 0
          EndIf
        EndIf

0

227

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

Ставлю точку F9, коипилирую прогу, нажимаю кнопку, прога виснет.

Прога не виснет, а ее останавливает отладчик.
Дальше можно работать с инструментами из меню "Отладчик". В частности, нажимая на F8, можно пошагово выполнять программу. Нажав на F7, программу можно запустить далее, до следующей точки остановки проги.
Более подробно написано здесь.

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

Сделал сброс, но результат тот же:

Смотри, когда Flag_ToolTip = 0 (выключены подсказки) то выполняется это:

Код:
          DelBalloonTip(5) 
          BalloonTip(GadgetID(5), 5, "1")

Когда же включены подсказки (Flag_ToolTip = 1) то выполняется это:

Код:
           DelBalloonTip(5) 
           BalloonTip(GadgetID(5), 5, "")

Где логика? И если уж подсказка удалена, то теряется смысл в строке BalloonTip(GadgetID(5), 5, "").

PS.
С помощью отладчика в пошаговом режиме, это можно увидеть.

0

228

Спасибо, буду разбираться.

0

229

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

Где логика?

У меня подсказки включены когда Flag_ToolTip = 0:

Код:
If  Flag_ToolTip = 0
          BalloonTip(GadgetID(5), 5, "1");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(6), 6, "2");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(7), 7, "3");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(8), 8, "4");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(9), 9, "5");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(10), 10, "6");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(11), 11, "7");
          SendMessage_(#Window_0, #TTM_ACTIVATE, 0, 0)
          Flag_ToolTip = 1
          EndIf

и выключены когда Flag_ToolTip = 1:

Код:
If Flag_ToolTip = 1
            For i = 5 To 11
              DelBalloonTip(i) 
              ;  BalloonTip(GadgetID(i), i, "");, "", #TOOLTIP_NO_ICON)
            Next i
            Flag_ToolTip = 0
          EndIf
Пётр написал(а):

И если уж подсказка удалена, то теряется смысл в строке BalloonTip(GadgetID(5), 5, "").

С этим согласен.

0

230

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

У меня подсказки включены когда Flag_ToolTip = 0:

Только потом выполняется Flag_ToolTip = 1 и при кликах по кнопках выполняется:

Код:
           DelBalloonTip(5) 
           BalloonTip(GadgetID(5), 5, "")

Вот я и спрашиваю, где логика?

+1

231

Дошло, наконец-то:

Код:
      Case 5        
;        If Flag_ToolTip = 1          
;          DelBalloonTip(5) 
       ;   BalloonTip(GadgetID(5), 5, "")
  ;      ElseIf Flag_ToolTip = 0
          DelBalloonTip(5) 
          BalloonTip(GadgetID(5), 5, "1")
    ;    EndIf

Так работает как надо. Спасибо.

0

232

Код можно упростить.

Код:
Enumeration
  #Window_0
EndEnumeration

Global ToolTip 
Global Flag_ToolTip.b =0

Procedure DelBalloonTip(Gadget); Mein Tip (Falko) 
    Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO) 
    Balloon\hWnd=GadgetID(Gadget) 
    Balloon\uId=GadgetID(Gadget) 
    SendMessage_(ToolTip, #TTM_DELTOOL, 0, Balloon)
EndProcedure   

Procedure BalloonTip(WindowID, Gadget, Text$); , Title$, Icon)

  Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO)
  Balloon\uFlags=#TTF_IDISHWND | #TTF_SUBCLASS
  Balloon\hWnd=GadgetID(Gadget)
  Balloon\uId=GadgetID(Gadget)
  Balloon\lpszText=@Text$
  SendMessage_(ToolTip, #TTM_ADDTOOL, 0, Balloon)
  If Title$ > ""
    SendMessage_(ToolTip, #TTM_SETTITLE, Icon, @Title$)
  EndIf
  
EndProcedure

Procedure ToolTip_Update(Gadget, Text$) ; Change the text of the ToolTip
  ttChange.TOOLINFO\cbSize = SizeOf(TOOLINFO) 
  ttChange\hWnd = GadgetID(Gadget)  
  ttChange\uId = GadgetID(Gadget) 
  ttChange\lpszText = @Text$ 
  SendMessage_(ToolTip, #TTM_UPDATETIPTEXT, 0, ttChange) 
EndProcedure


OpenWindow(#Window_0, 214, 0, 410, 210, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )

  ToolTip=CreateWindowEx_(0,"ToolTips_Class32","",#WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON,0,0,0,0,WindowID(#Window_0),0,GetModuleHandle_(0),0)
  SendMessage_(ToolTip,#TTM_SETTIPTEXTCOLOR,GetSysColor_(#COLOR_INFOTEXT),0)
  SendMessage_(ToolTip,#TTM_SETTIPBKCOLOR,GetSysColor_(#COLOR_INFOBK),0)
  SendMessage_(ToolTip,#TTM_SETMAXTIPWIDTH,0,180)


ButtonGadget(5, 130, 90, 30, 30, "5")

ButtonGadget(6, 170, 90, 30, 30, "6")

ButtonGadget(7, 210, 90, 30, 30, "7")

ButtonGadget(8, 250, 90, 30, 30, "8")

ButtonGadget(9, 290, 90, 30, 30, "9")

ButtonGadget(10, 330, 90, 30, 30, "10")

ButtonGadget(11, 130, 130, 70, 30, "Вкл./Выкл.")

Repeat 
  
  Event =  WaitWindowEvent() 
  Window = EventWindow() 
  Gadget = EventGadget()
  
  If Event = #PB_Event_Gadget 
    
    Select Gadget
      Case 5 
        ToolTip_Update(5, "1")
      Case 6
        ToolTip_Update(6, "2")
      Case 7 
        ToolTip_Update(7, "3")
      Case 8
        ToolTip_Update(8, "4")
      Case 9 
        ToolTip_Update(9, "5")
      Case 10 
        ToolTip_Update(10, "6")  
      Case 11
        ;ToolTip_Update(11, "7")  
        
        Toggle = Toggle ! 1
        If Toggle
          BalloonTip(GadgetID(5), 5, "1");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(6), 6, "2");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(7), 7, "3");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(8), 8, "4");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(9), 9, "5");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(10), 10, "6");, "", #TOOLTIP_NO_ICON)
          BalloonTip(GadgetID(11), 11, "7");
        Else
          For i = 5 To 11
            DelBalloonTip(i) 
          Next i
        EndIf
        
    EndSelect
    
    
  EndIf   
  
Until Event = #PB_Event_CloseWindow

+1

233

Только хотел написать о трабле: при выключенных подсказках нажатие на любую кнопку их активирует. А тут уже это устранено. Спасибо.

0

234

Что-бы менять цифры в гаджете, как на картинке:
http://uploads.ru/i/U/P/X/UPXH3.gif
есть только DrawText или еще что-нибудь?

0

235

В каком именно гаджете, TextGadget?
Я уже не один раз просил все описывать в подробностях, чтобы не приходилось гадать.

0

236

Мне нужно на форму выводить цифры, которые будут менятся. TextGadget не подходит, да DrawText тоже. Как можно вывести?

0

237

Однако через Str().

0

238

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

TextGadget не подходит, да DrawText тоже.

Почему? :confused:  :dontknow:

0

239

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

Почему?

Все подходит:

Код:
TextGadget(19, 120, 120, 15, 15,"")
                  SetGadgetText(19, Str(z))

Но возникла другая проблема: текст мерцает:
http://uploads.ru/i/l/k/t/lktoY.gif
Как можно от этого избавится?

Код:
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
  #Color_Red
  #Color_Orange
  #Color_Yellow
  #Color_Green
  #Color_Blue
  #Color_Violet
  #Color_White
  #Skin_Image ;*********************************************************************
EndEnumeration

UsePNGImageDecoder()

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

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(#Color_Red, ?Color_Red)   
CatchImage(#Color_Orange, ?Color_Orange) 
CatchImage(#Color_Yellow, ?Color_Yellow) 
CatchImage(#Color_Green, ?Color_Green) 
CatchImage(#Color_Blue, ?Color_Blue) 
CatchImage(#Color_Violet, ?Color_Violet) 
CatchImage(#Color_White, ?Color_White)
CatchImage(#Light_Button_Enable, ?Light_Button_Enable)

OpenWindow(0, 0, 0, 174, 162, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

;ImageGadget(12,2,2,67,67,ImageID(#Light_Button_Enable)) : DisableGadget(12, #True)
SetClassLongPtr_(WindowID(#Window_0), #GCL_HBRBACKGROUND, CreatePatternBrush_(ImageID(#Skin_Image)))

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

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<=28
          Active_ImID=ImageID(#H_knob_Light3)
        ElseIf Gadget=29
          Active_ImID=ImID
        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)
                    
          Pos_x=GetGadgetData(Gadget)
          Select Gadget
          Case 29            
            z = Pos_x/10
                  TextGadget(19, 120, 120, 15, 15,"")
                  SetGadgetText(19, Str(z))
          Select z            
          Case 0
            ImID = ImageID(#Color_Red)  
          Case 1
            ImID = ImageID(#Color_Orange)
          Case 2
            ImID = ImageID(#Color_Yellow)
          Case 3
            ImID = ImageID(#Color_Green)
          Case 4
            ImID = ImageID(#Color_Blue)
          Case 5
            ImID = ImageID(#Color_Violet)
          Case 6          
            ImID = ImageID(#Color_White)
      EndSelect

      EndSelect
          
          ; Мышка или вошла в пределы регулятора или вышла из него.
        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"
  
    Color_Red:
  IncludeBinary "Files\Color_Red.png" 
  
  Color_Orange:
  IncludeBinary "Files\Color_Orange.png"
  
  Color_Yellow:
  IncludeBinary "Files\Color_Yellow.png"
    
  Color_Green:
  IncludeBinary "Files\Color_Green.png"
  
  Color_Blue:
  IncludeBinary "Files\Color_Blue.png"
  
  Color_Violet:
  IncludeBinary "Files\Color_Violet.png"
    
  Color_White:
  IncludeBinary "Files\Color_White.png"
  
  Light_Button_Enable:
  IncludeBinary "Files\Knob_pointer_White_Long.png"
  ;}
EndDataSection

Отредактировано max (12.05.2012 18:54:48)

0

240

У меня ничего не мерцает. :dontknow:
Можно попробовать так, может поможет. :writing:

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

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, 174, 162, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetWindowLongPtr_(x,#GWL_EXSTYLE,GetWindowLongPtr_(x,#GWL_EXSTYLE)|#WS_EX_COMPOSITED)
SetWindowCallback(@WindowCallback(), 0)

;ImageGadget(12,2,2,67,67,ImageID(#Light_Button_Enable)) : DisableGadget(12, #True)
SetClassLongPtr_(WindowID(#Window_0), #GCL_HBRBACKGROUND, CreatePatternBrush_(ImageID(#Skin_Image)))

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

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

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

0


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