Спасибо, надо чаще посещать этот сайт. 
Рисованный интерфейс программы
Сообщений 211 страница 240 из 302
Поделиться21110.05.2012 22:05:17
Поделиться21210.05.2012 22:55:04
Как-то странно ведет себя код с 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)
Поделиться21310.05.2012 23:12:05
Обычная подсказка тоже теряется.
Наверное особенность винды.
Поделиться21410.05.2012 23:17:07
Но при наведении на другой гаджет, а потом опять на этот, появляется.
Поделиться21511.05.2012 10:37:43
Ни чего лучшего не придумал, но тем не менее работает:
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Поделиться21611.05.2012 22:12:25
Попробовал сделать отключение подсказок, но что-то не так. При загрузке проги подсказки не активны, при нажатии на кнопку "Вкл./Выкл." подсказки появляются, при повторном нажатии на "Вкл./Выкл." подсказка над этой кнопкой проподает, на остальных есть. Нажимаю на другую кнопку - пропадает на ней. И так далее. И так, и сяк делал. Что не так делаю?
Уже который час бьюс, результат - ноль.
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)
Поделиться21711.05.2012 22:35:14
При каждом вызове процедуры 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Поделиться21811.05.2012 23:38:29
А еще правильнее сделать так:
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Зачем создавать много окон, если достаточно одного?
Поделиться21912.05.2012 09:35:25
То есть дело было в том, что создавалось много окон? Блин, столько времени убил. Спасибо.
Поделиться22012.05.2012 10:42:50
То есть дело было в том, что создавалось много окон?
Нет.
В том, что не запоминались хэндлы этих окон и поэтому обратится можно было только к созданному последним.
Поделиться22112.05.2012 11:05:05
Ясно. Возникла другая проблема: при нажатии на кнопки, кроме "Вкл./Выкл.", подсказки теряются. Думаю это из-за флага Flag_ToolTip. В нужном направлении копаю?
Поделиться22212.05.2012 11:09:08
max написал(а):То есть дело было в том, что создавалось много окон?
Нет.
В том, что не запоминались хэндлы этих окон и поэтому обратится можно было только к созданному последним.
Пропустил пост 217, вот и не понял.
Поделиться22312.05.2012 11:55:39
Думаю это из-за флага Flag_ToolTip.
Да, он устанавливается, но нигде не сбрасывается!
Вообще, это легко проверяется с помощью отладчика в пошаговом режиме.
Скажем, ставим точку остановки программы на обработчике кнопки с ИД 5. Нажимаем эту кнопку и смотрим пошагово как выполняется программа.
Поделиться22412.05.2012 11:58:13
Понал, сейчас попробую.
Поделиться22512.05.2012 12:33:07
Что-то не понял как работать с отладчиком. Ставлю точку F9, коипилирую прогу, нажимаю кнопку, прога виснет.
Поделиться22612.05.2012 12:40:28
Да, он устанавливается, но нигде не сбрасывается!
Сделал сброс, но результат тот же:
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Поделиться22712.05.2012 13:04:39
Ставлю точку F9, коипилирую прогу, нажимаю кнопку, прога виснет.
Прога не виснет, а ее останавливает отладчик.
Дальше можно работать с инструментами из меню "Отладчик". В частности, нажимая на F8, можно пошагово выполнять программу. Нажав на F7, программу можно запустить далее, до следующей точки остановки проги.
Более подробно написано здесь.
Сделал сброс, но результат тот же:
Смотри, когда Flag_ToolTip = 0 (выключены подсказки) то выполняется это:
DelBalloonTip(5)
BalloonTip(GadgetID(5), 5, "1")Когда же включены подсказки (Flag_ToolTip = 1) то выполняется это:
DelBalloonTip(5)
BalloonTip(GadgetID(5), 5, "")Где логика? И если уж подсказка удалена, то теряется смысл в строке BalloonTip(GadgetID(5), 5, "").
PS.
С помощью отладчика в пошаговом режиме, это можно увидеть.
Поделиться22812.05.2012 13:09:43
Спасибо, буду разбираться.
Поделиться22912.05.2012 13:28:36
Где логика?
У меня подсказки включены когда 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, "").
С этим согласен.
Поделиться23012.05.2012 13:31:24
У меня подсказки включены когда Flag_ToolTip = 0:
Только потом выполняется Flag_ToolTip = 1 и при кликах по кнопках выполняется:
DelBalloonTip(5)
BalloonTip(GadgetID(5), 5, "")Вот я и спрашиваю, где логика?
Поделиться23112.05.2012 13:38:25
Дошло, наконец-то:
Case 5
; If Flag_ToolTip = 1
; DelBalloonTip(5)
; BalloonTip(GadgetID(5), 5, "")
; ElseIf Flag_ToolTip = 0
DelBalloonTip(5)
BalloonTip(GadgetID(5), 5, "1")
; EndIfТак работает как надо. Спасибо.
Поделиться23212.05.2012 14:11:36
Код можно упростить.
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Поделиться23312.05.2012 14:18:18
Только хотел написать о трабле: при выключенных подсказках нажатие на любую кнопку их активирует. А тут уже это устранено. Спасибо.
Поделиться23412.05.2012 17:39:00
Что-бы менять цифры в гаджете, как на картинке:
есть только DrawText или еще что-нибудь?
Поделиться23512.05.2012 17:48:25
В каком именно гаджете, TextGadget?
Я уже не один раз просил все описывать в подробностях, чтобы не приходилось гадать.
Поделиться23612.05.2012 17:58:25
Мне нужно на форму выводить цифры, которые будут менятся. TextGadget не подходит, да DrawText тоже. Как можно вывести?
Поделиться23712.05.2012 18:13:03
Однако через Str().
Поделиться23812.05.2012 18:35:18
TextGadget не подходит, да DrawText тоже.
Почему?

Поделиться23912.05.2012 18:53:45
Почему?
Все подходит:
TextGadget(19, 120, 120, 15, 15,"")
SetGadgetText(19, Str(z))Но возникла другая проблема: текст мерцает:
Как можно от этого избавится?
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)
Поделиться24012.05.2012 19:26:49
У меня ничего не мерцает.
Можно попробовать так, может поможет.
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? Поэтому и мерцает!
Похожие темы
| Рисованный интерфейс FM | OpenSource | 27.04.2010 |
| Фон | Вопросы по PureBasic | 16.03.2014 |
| (Статья) Создаем VSM-модель для протеуса (DLL библиотека) | PureBasic для Windows | 17.04.2014 |
| Перевод книги "PureBasic - A Beginners Guide" | Материалы сайта | 04.05.2016 |