Спасибо, надо чаще посещать этот сайт.
Рисованный интерфейс программы
Сообщений 211 страница 240 из 302
Поделиться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 |