Возможно я туплю, но не могу понять как применить EditorGadget. Перевод справки ясности не внес.
Вот пример http://depositfiles.com/files/9mizc39jc
PureBasic - форум |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка
Возможно я туплю, но не могу понять как применить EditorGadget. Перевод справки ясности не внес.
Вот пример http://depositfiles.com/files/9mizc39jc
Спасибо Пётр!
У меня такой вопрос:
В меню есть параметр #PB_Menu_ModernLook . Такой стиль есть в винде? То есть можно ли это сделать средствами API, или это еще одна пуриковская библиотека?
В меню есть параметр #PB_Menu_ModernLook
Нет, у них самописная либа, поддерживающая данный стиль.
То есть можно ли это сделать средствами API
Как раз средствами API сделано, предварительно перевёв меню в режим OWNERDRAW
Понятно, спасибо.
Всем здравствуйте. вот код из CodeArchiv
InitNetwork() ExamineIPAddresses() NextIP = NextIPAddress() While NextIP Debug IPString(NextIP) NextIP = NextIPAddress() Wend
как изменить код так что бы создавался текстовый файл с именем пользователя windows , в него записывался ip дата и время и выводилось сообщение "Done"
Отредактировано neo (03.12.2010 16:40:43)
Procedure.s Get_UserName() Username.s = Space(512) nsize.l = 512 retour=GetUserName_(@Username, @nsize) If retour=0 Username="" Else Username=Left(Username, nsize) EndIf ProcedureReturn Username EndProcedure InitNetwork() UserName.s=Get_UserName() If UserName If CreateFile(0,"C:\"+UserName+".txt") WriteStringN(0, FormatDate("%mm/%dd/%yyyy %hh:%ii:%ss", Date()) ) WriteStringN(0, "" ) ExamineIPAddresses() NextIP = NextIPAddress() While NextIP WriteStringN(0, IPString(NextIP) ) NextIP = NextIPAddress() Wend CloseFile(0) MessageRequester("", "Done", #MB_OK|#MB_ICONINFORMATION) EndIf EndIf
Большое тебе спасибо
Здравствуйте, у меня есть вопрос по поводу консоли: оператор Input() работает со строковыми переменными, как мне можно ввести именно числовую переменную с клавиатуры, мне это нужно именно так, потому что я в консоли набираю цифру, к примеру 6 и после этого объявляется массив, размерность которого определяется этой числовой переменной с этим значением, И аналогично с командой Print, тоже вроде работает только со строковыми переменными, а как мне отобразить числовую?
Нужно использовать функции Val и Str для преобразования строки в число и числа в строку.
x.l=0 ; Числовая переменая If OpenConsole() PrintN("Введите число") x=Val(Input()) PrintN("Вы ввели число - "+Str(x)) Input() EndIf
Вот проект http://depositfiles.com/files/7xf0dlxns
Пётр, спасибо за помощь.
Всем привет!
max написал(а):Возможно я туплю, но не могу понять как применить EditorGadget. Перевод справки ясности не внес.
Вот пример http://depositfiles.com/files/9mizc39jc
Пётр не подскажите, как добавить несколько файлов?
Заранее спасибо!
Отредактировано max (06.12.2010 20:43:02)
как добавить несколько файлов?
Вот пример http://depositfiles.com/files/nmy8h034m
max написал(а):как добавить несколько файлов?
Вот пример http://depositfiles.com/files/nmy8h034m
Респект и уважуха!
Отредактировано max (07.12.2010 18:29:53)
Добрый день. Ребята, помогите новоначальному.
В программе 4-ре элемента ButtonImageGadget(), с установленным Flags(#PB_Button_Toggle)
В каждую кнопку (в нажатом положении) загружаю картинку. Эти 4-ре картинки по средствам CatchImage() встроены в код программы.
Далее через ResizeGadget() задаю возможность менять размер кнопок при изменении размера окна и хочу, чтобы при этом менялись и размеры изображений, закруженных в кнопки.
Но почему-то, при такой схеме, GetGadgetAttribute(#ButtonImage_1,#PB_Button_PressedImage) Возвращает НЕ идентификатор изображения, отображаемого при нажатии на кнопку, а адрес этого изображения в памяти??? (место в коде: ResizeImage(GetGadgetAttribute(k,#PB_Button_PressedImage),GadgetWidth(#ButtonImage_1), GadgetHeight(#ButtonImage_1)))
Подскажите, как правильно в PureBasic работать с изменением встроенных в код изображений при Resize элементов, в которые они загружены???
; PureBasic Visual Designer v3.95 build 1485 (PB4Code) ;- Window Constants ; Enumeration #Window_0 EndEnumeration ;- MenuBar Constants ; Enumeration #MenuBar_0 EndEnumeration ;- Gadget Constants ; Enumeration #ButtonImage_0 #ButtonImage_1 #ButtonImage_2 #ButtonImage_3 EndEnumeration ;- StatusBar Constants ; Enumeration #StatusBar_0 EndEnumeration ;- Image Plugins UseJPEGImageDecoder() ;- Image Globals Global Image0 Global Image1 Global Image2 Global Image3 ;- Catch Images Image0 = CatchImage(0, ?Image0) Image1 = CatchImage(1, ?Image1) Image2 = CatchImage(2, ?Image2) Image3 = CatchImage(3, ?Image3) ;- Images DataSection Image0: IncludeBinary "D:\Картинки\0.JPG" Image1: IncludeBinary "D:\Картинки\1.JPG" Image2: IncludeBinary "D:\Картинки\2.JPG" Image3: IncludeBinary "D:\Картинки\3.JPG" EndDataSection Procedure Open_Window_0() If OpenWindow(#Window_0, 586, 159, 292, 317, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar ) If CreateMenu(#MenuBar_0, WindowID(#Window_0)) MenuTitle("1") MenuTitle("2") MenuTitle("3") MenuTitle("4") EndIf If CreateStatusBar(#StatusBar_0, WindowID(#Window_0)) EndIf If CreateGadgetList(WindowID(#Window_0)) ButtonImageGadget(#ButtonImage_0, 20, 10, 120, 120, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_1, 150, 10, 120, 120, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_2, 20, 140, 120, 120, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_3, 150, 140, 120, 120, 0,#PB_Button_Toggle) SetGadgetAttribute(#ButtonImage_0,#PB_Button_PressedImage,Image0) SetGadgetAttribute(#ButtonImage_1,#PB_Button_PressedImage,Image1) SetGadgetAttribute(#ButtonImage_2,#PB_Button_PressedImage,Image2) SetGadgetAttribute(#ButtonImage_3,#PB_Button_PressedImage,Image3) EndIf EndIf EndProcedure Open_Window_0() Repeat Event=WaitWindowEvent() Gadget=EventGadget() Window=EventWindow() If Event=#PB_Event_SizeWindow L=0 For k = 0 To 3 If k=2 L=L+1 EndIf n=k-L*2 ResizeGadget(k, (n+1)*WindowWidth(#Window_0)/2-(WindowWidth(#Window_0)/2-4),(L+1)*WindowHeight(#Window_0)/2.35-WindowHeight(#Window_0)/2.35+8, WindowWidth(#Window_0)/2-8, WindowHeight(#Window_0)/2.35-8) ;ResizeImage(GetGadgetAttribute(k,#PB_Button_PressedImage),GadgetWidth(#ButtonImage_1), GadgetHeight(#ButtonImage_1)) ; <<<===!!!!!! Почему в этом месте команда GetGadgetAttribute(k,#PB_Button_PressedImage) Возвращает НЕ идентификатор изображения, отображаемого при нажатии на кнопку, а адрес изображения в памяти??? ;SetGadgetAttribute(k,#PB_Button_PressedImage,ImageID(GetGadgetAttribute(k,#PB_Button_PressedImage))) Next EndIf SmartWindowRefresh(#Window_0, 1) ResizeImage(0,GadgetWidth(#ButtonImage_0), GadgetHeight(#ButtonImage_0)) ; Вот здесь когда в ручную подставляю ID картинки все получается...Но почему-то происходит сильное мерцание!!? SetGadgetAttribute(#ButtonImage_0,#PB_Button_PressedImage,ImageID(0)) Until Event=#PB_Event_CloseWindow End
Отредактировано Lucagin (07.12.2010 19:07:02)
Но почему-то, при такой схеме, GetGadgetAttribute(#ButtonImage_1,#PB_Button_PressedImage) Возвращает НЕ идентификатор изображения, отображаемого при нажатии на кнопку, а адрес этого изображения в памяти???
А зачем нам получать ID картинки из кнопки?
Ведь известно какая картинка загружена в какую кнопку.
Поэтому можно изменить размер картинок и заново загрузить в кнопки.
Но есть один нюанс - изменять размеры нужно не оригиналов, а копий картинок, иначе при некотором числе изменений размеров, картинки сильно исказятся.
; PureBasic Visual Designer v3.95 build 1485 (PB4Code) ;- Window Constants ; Enumeration #Window_0 EndEnumeration ;- MenuBar Constants ; Enumeration #MenuBar_0 EndEnumeration ;- Gadget Constants ; Enumeration #ButtonImage_0 #ButtonImage_1 #ButtonImage_2 #ButtonImage_3 EndEnumeration ;- StatusBar Constants ; Enumeration #StatusBar_0 EndEnumeration ;- Image Plugins UseJPEGImageDecoder() ;- Image Globals Global Image0 Global Image1 Global Image2 Global Image3 ;- Catch Images Image0 = CatchImage(0, ?Image0) Image1 = CatchImage(1, ?Image1) Image2 = CatchImage(2, ?Image2) Image3 = CatchImage(3, ?Image3) For i=0 To 3 CopyImage(i, i+4) Next i ;- Images DataSection Image0: IncludeBinary "D:\Картинки\0.JPG" Image1: IncludeBinary "D:\Картинки\1.JPG" Image2: IncludeBinary "D:\Картинки\2.JPG" Image3: IncludeBinary "D:\Картинки\3.JPG" EndDataSection Procedure Open_Window_0() If OpenWindow(#Window_0, 586, 159, 292, 317, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar ) SmartWindowRefresh(#Window_0, 1) If CreateMenu(#MenuBar_0, WindowID(#Window_0)) MenuTitle("1") MenuTitle("2") MenuTitle("3") MenuTitle("4") EndIf If CreateStatusBar(#StatusBar_0, WindowID(#Window_0)) EndIf If CreateGadgetList(WindowID(#Window_0)) ButtonImageGadget(#ButtonImage_0, 20, 10, 120, 120, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_1, 150, 10, 120, 120, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_2, 20, 140, 120, 120, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_3, 150, 140, 120, 120, 0,#PB_Button_Toggle) SetGadgetAttribute(#ButtonImage_0,#PB_Button_PressedImage,Image0) SetGadgetAttribute(#ButtonImage_1,#PB_Button_PressedImage,Image1) SetGadgetAttribute(#ButtonImage_2,#PB_Button_PressedImage,Image2) SetGadgetAttribute(#ButtonImage_3,#PB_Button_PressedImage,Image3) EndIf EndIf EndProcedure Open_Window_0() Repeat Event=WaitWindowEvent() Gadget=EventGadget() Window=EventWindow() If Event=#PB_Event_SizeWindow L=0 For k = 0 To 3 If k=2 L=L+1 EndIf n=k-L*2 ResizeGadget(k, (n+1)*WindowWidth(#Window_0)/2-(WindowWidth(#Window_0)/2-4),(L+1)*WindowHeight(#Window_0)/2.35-WindowHeight(#Window_0)/2.35+8, WindowWidth(#Window_0)/2-8, WindowHeight(#Window_0)/2.35-8) CopyImage(k, k+4) ResizeImage(k+4,GadgetWidth(k), GadgetHeight(k)) ; <<<===!!!!!! Почему в этом месте команда GetGadgetAttribute(k,#PB_Button_PressedImage) Возвращает НЕ идентификатор изображения, отображаемого при нажатии на кнопку, а адрес изображения в памяти??? SetGadgetAttribute(k,#PB_Button_PressedImage,ImageID(k+4)) Next EndIf Until Event=#PB_Event_CloseWindow End
А зачем нам получать ID картинки из кнопки?Ведь известно какая картинка загружена в какую кнопку.
В том то и дело, что картинки в гаджеты загружаются случайным образом, и к моменту Resize, я не знаю какая картинка в каждой из них, для того и хотел использовать GetGadgetAttribute(). Цикл случайной загрузки картинок приводить не стал, чтобы не усложнять код...
Спасибо за идею с CopyImage() , про ухудшение картинок в справке ни слова.. :о))
Отредактировано Lucagin (07.12.2010 21:47:03)
В том то и дело, что картинки в гаджеты загружаются случайным образом, и к моменту Resize, я не знаю какая картинка в каждой из них
У каждого гаждета есть ячейка памяти, работать с которой можно с помощью функций GetGadgetData и SetGadgetData.
Там можно хранить номер рисунка, загруженого в кнопку.
У каждого гаждета есть ячейка памяти, работать с которой можно с помощью функций GetGadgetData и SetGadgetData.Там можно хранить номер рисунка, загруженого в кнопку.
Классная идея!!! Большущее Спасибо!!!
А еще такой вопрос. Как управлять программой с помощью вложенного меню (MenuItem()) понятно, для этого есть EventMenu(). А вот если я хочу чтобы какое-то действие происходило при нажатие не на вложенное меню, а на меню, созданное MenuTitle(). Скажем Старт => запуск программы, Выход => соответственно. Это как-то реализуемо?
; PureBasic Visual Designer v3.95 build 1485 (PB4Code) ;- Window Constants ; Enumeration #Window_0 EndEnumeration ;- MenuBar Constants ; Enumeration #MenuBar_0 EndEnumeration Procedure Open_Window_0() If OpenWindow(#Window_0, 796, 240, 600, 300, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar ) If CreateMenu(#MenuBar_0, WindowID(#Window_0)) MenuTitle("Старт") MenuTitle("Настройки") MenuTitle("Выход") EndIf If CreateGadgetList(WindowID(#Window_0)) EndIf EndIf EndProcedure Open_Window_0() Repeat Event=WaitWindowEvent() Until event=#PB_Event_CloseWindow
А вот если я хочу чтобы какое-то действие происходило при нажатие не на вложенное меню, а на меню, созданное MenuTitle(). Скажем Старт => запуск программы, Выход => соответственно. Это как-то реализуемо?
С помощью MenuItem.
; PureBasic Visual Designer v3.95 build 1485 (PB4Code) ;- Window Constants ; Enumeration #Window_0 EndEnumeration ;- MenuBar Constants ; Enumeration #MenuBar_0 EndEnumeration Procedure Open_Window_0() If OpenWindow(#Window_0, 796, 240, 600, 300, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered ) If CreateMenu(#MenuBar_0, WindowID(#Window_0)) MenuTitle("Старт") MenuItem(1,"Запуск программы") MenuItem(2,"Пункт 2") MenuTitle("Настройки") OpenSubMenu("Вложеное меню") MenuItem(4,"Пункт 1") MenuItem(5,"Пункт 2") MenuItem(6,"Пункт 3") MenuItem(7,"Пункт 4") CloseSubMenu() MenuItem(3,"Настроить программу") CloseSubMenu() MenuItem(8,"Выход") EndIf If CreateGadgetList(WindowID(#Window_0)) EndIf EndIf EndProcedure Open_Window_0() Repeat Event=WaitWindowEvent() If Event=#PB_Event_Menu Menu=EventMenu() If Menu=8 ; Пункт "Закрыть" Break ; Прерываем текущий цикл EndIf Debug "ID - "+Str(Menu)+" текст - "+GetMenuItemText(#MenuBar_0, Menu) EndIf Until event=#PB_Event_CloseWindow
С помощью MenuItem.
Огромное человеческое Спасибо!!! Сам бы я не один день убил, чтобы разъяснить все эти вопросы …
Отредактировано Lucagin (08.12.2010 02:31:49)
А почему здесь, если водить с картинки на картинку мышкой, то возникают какие-то паразитные мерцания. С этим как-то можно бороться???
; PureBasic Visual Designer v3.95 build 1485 (PB4Code) ;- Window Constants ; Enumeration #Window_0 EndEnumeration ;- MenuBar Constants ; Enumeration #MenuBar_0 EndEnumeration ;- Gadget Constants ; Enumeration #ButtonImage_0 #ButtonImage_1 #ButtonImage_2 #ButtonImage_3 EndEnumeration ;- StatusBar Constants ; Enumeration #StatusBar_0 EndEnumeration ;- Image Plugins UseJPEGImageDecoder() ;- Image Globals Global Image0 Global Image1 Global Image2 Global Image3 ;- Catch Images Image0 = CatchImage(0, ?Image0) Image1 = CatchImage(1, ?Image1) Image2 = CatchImage(2, ?Image2) Image3 = CatchImage(3, ?Image3) For i=0 To 3 CopyImage(i, i+4) Next i ;- Images DataSection Image0: IncludeBinary "D:\Картинки\0.JPG" Image1: IncludeBinary "D:\Картинки\1.JPG" Image2: IncludeBinary "D:\Картинки\2.JPG" Image3: IncludeBinary "D:\Картинки\3.JPG" EndDataSection Procedure Open_Window_0() If OpenWindow(#Window_0, 586, 159, 292, 317, "New window ( 0 )", #PB_Window_SystemMenu |#PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar ) SmartWindowRefresh(#Window_0, 1) If CreateMenu(#MenuBar_0, WindowID(#Window_0)) MenuTitle("1") MenuTitle("2") MenuTitle("3") MenuTitle("4") EndIf If CreateStatusBar(#StatusBar_0, WindowID(#Window_0)) EndIf If CreateGadgetList(WindowID(#Window_0)) ButtonImageGadget(#ButtonImage_0, 20, 10, 120, 120, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_1, 150, 10, 120, 120, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_2, 20, 140, 120, 120, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_3, 150, 140, 120, 120, 0,#PB_Button_Toggle) SetGadgetAttribute(#ButtonImage_0,#PB_Button_PressedImage,Image0) SetGadgetAttribute(#ButtonImage_1,#PB_Button_PressedImage,Image1) SetGadgetAttribute(#ButtonImage_2,#PB_Button_PressedImage,Image2) SetGadgetAttribute(#ButtonImage_3,#PB_Button_PressedImage,Image3) EndIf EndIf EndProcedure Open_Window_0() Repeat Event=WaitWindowEvent() Gadget=EventGadget() Window=EventWindow() If Event=#PB_Event_SizeWindow L=0 For k = 0 To 3 If k=2 L=L+1 EndIf n=k-L*2 ResizeGadget(k, (n+1)*WindowWidth(#Window_0)/2-(WindowWidth(#Window_0)/2-4), 6+(L)*(8+(WindowHeight(#Window_0)/2-StatusBarHeight(#StatusBar_0)/2-17)), WindowWidth(#Window_0)/2-8, WindowHeight(#Window_0)/2-StatusBarHeight(#StatusBar_0)/2-17) CopyImage(k, k+4) ResizeImage(k+4,GadgetWidth(k), GadgetHeight(k)) SetGadgetAttribute(k,#PB_Button_PressedImage,ImageID(k+4)) Next EndIf Until Event=#PB_Event_CloseWindow End
Отредактировано Lucagin (08.12.2010 13:28:54)
А почему здесь, если водить с картинки на картинку мышкой, то возникают какие-то паразитные мерцания. С этим как-то можно бороться???
У меня никаких мерцаний нет.
У меня никаких мерцаний нет.
Разверни окно на весь экран, загрузи в кнопки картинки (данные выше) , переведи каждую кнопку в положении нажато и переводи мышь (быстро) с одной картинки на другую...
У меня возникает эффект какого-то мерцания или дергания картинки...
При наведении (“отведении”) мышки на картинку происходит ее активация (что ли), что сопровождается одинарным быстрым морганием картинки, когда часто переводить мышку с картинки на картинку из этих быстрых одинарных морганий возникает неприятный эффект мерцания…
Отредактировано Lucagin (08.12.2010 13:40:37)
если водить с картинки на картинку мышкой, то возникают какие-то паразитные мерцания
Пробовал в WinXP и Win7 - мерцаний нет.
При наведении (“отведении”) мышки на картинку происходит ее активация (что ли), что сопровождается одинарным быстрым морганием картинки
У меня при этом картинка не мерцает.
У меня при этом картинка не мерцает.
Странно. может я в настройкав видюхи что-то намудрил...
Ладно, попробую на другом компе и на Висте...
Ещё такой вопрос!
Можно ли отключить возможность использования мыши (или хотя бы кликов) на какое-то время (скажем Delay(5000)). А то имеющиеся средства не совсем устраивают.
DisableGadget() не подходит, так как при Деактивации гаджета изображение на нем становится одноцветным (надо чтобы картинка не менялась).
Пытался использоваться DisableWindow(), но тоже не решает задачу. Если во время задержки и DisableWindow(#Window_0, 1) нажимать на гаджеты (кнопки), то их нажатие запоминается (в буфере что ли) и после активации окна эти нажатия все равно осуществляются.
Если в программе ( код представлен) нажать в меню “Delay(2000)” и во время задержки в 2-ве секунды быстро кликать по кнопкам, то после активации окна эти нажатия будут сделаны(можно судить по нажатым кнопкам)…
Как правильно сделать, чтобы за время задержки с кнопками ничего сделать было нельзя…?
; PureBasic Visual Designer v3.95 build 1485 (PB4Code) ;- Window Constants ; Enumeration #Window_0 EndEnumeration ;- MenuBar Constants ; Enumeration #MenuBar_0 EndEnumeration ;- Gadget Constants ; Enumeration #ButtonImage_0 #ButtonImage_1 #ButtonImage_2 #ButtonImage_3 #ButtonImage_4 #ButtonImage_5 #ButtonImage_6 #ButtonImage_7 EndEnumeration Procedure Open_Window_0() If OpenWindow(#Window_0, 591, 135, 814, 439, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar ) If CreateMenu(#MenuBar_0, WindowID(#Window_0)) MenuItem(1," Delay(2000)") MenuItem(2,"Выход") EndIf If CreateGadgetList(WindowID(#Window_0)) ButtonImageGadget(#ButtonImage_0, 60, 20, 140, 140, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_1, 240, 20, 140, 140, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_2, 420, 20, 140, 140, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_3, 600, 20, 140, 140, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_4, 60, 200, 140, 140, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_5, 240, 200, 140, 140, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_6, 420, 200, 140, 140, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_7, 600, 200, 140, 140, 0,#PB_Button_Toggle) SetGadgetAttribute(#ButtonImage_0,#PB_Button_PressedImage,0) SetGadgetAttribute(#ButtonImage_1,#PB_Button_PressedImage,0) SetGadgetAttribute(#ButtonImage_2,#PB_Button_PressedImage,0) SetGadgetAttribute(#ButtonImage_3,#PB_Button_PressedImage,0) SetGadgetAttribute(#ButtonImage_4,#PB_Button_PressedImage,0) SetGadgetAttribute(#ButtonImage_5,#PB_Button_PressedImage,0) SetGadgetAttribute(#ButtonImage_6,#PB_Button_PressedImage,0) SetGadgetAttribute(#ButtonImage_7,#PB_Button_PressedImage,0) EndIf EndIf EndProcedure Open_Window_0() Repeat Event=WaitWindowEvent() Menu=EventMenu() If Event=#PB_Event_Menu If Menu=2 Break ; Прерываем текущий цикл ElseIf menu=1 DisableWindow(#Window_0, 1) Delay(2000) DisableWindow(#Window_0, 0) EndIf EndIf Until Event=#PB_Event_CloseWindow End
Отредактировано Lucagin (08.12.2010 16:17:12)
Если во время задержки и DisableWindow(#Window_0, 1) нажимать на гаджеты (кнопки), то их нажатие запоминается (в буфере обмена что ли) и после активации окна эти нажатия все равно осуществляются.
Запоминается в системной очереди сообщений окна. Это происходит потому что не обрабатываются события окна.
Если программу слегка модифицировать - избавится от Delay(2000), а задержку выполнять с помощью таймера, то все работает как надо.
; PureBasic Visual Designer v3.95 build 1485 (PB4Code) ;- Window Constants ; Enumeration #Window_0 EndEnumeration ;- MenuBar Constants ; Enumeration #MenuBar_0 EndEnumeration ;- Gadget Constants ; Enumeration #ButtonImage_0 #ButtonImage_1 #ButtonImage_2 #ButtonImage_3 #ButtonImage_4 #ButtonImage_5 #ButtonImage_6 #ButtonImage_7 EndEnumeration Procedure Open_Window_0() If OpenWindow(#Window_0, 591, 135, 814, 439, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar ) If CreateMenu(#MenuBar_0, WindowID(#Window_0)) MenuItem(1," Delay(2000)") MenuItem(2,"Выход") EndIf If CreateGadgetList(WindowID(#Window_0)) ButtonImageGadget(#ButtonImage_0, 60, 20, 140, 140, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_1, 240, 20, 140, 140, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_2, 420, 20, 140, 140, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_3, 600, 20, 140, 140, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_4, 60, 200, 140, 140, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_5, 240, 200, 140, 140, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_6, 420, 200, 140, 140, 0,#PB_Button_Toggle) ButtonImageGadget(#ButtonImage_7, 600, 200, 140, 140, 0,#PB_Button_Toggle) SetGadgetAttribute(#ButtonImage_0,#PB_Button_PressedImage,0) SetGadgetAttribute(#ButtonImage_1,#PB_Button_PressedImage,0) SetGadgetAttribute(#ButtonImage_2,#PB_Button_PressedImage,0) SetGadgetAttribute(#ButtonImage_3,#PB_Button_PressedImage,0) SetGadgetAttribute(#ButtonImage_4,#PB_Button_PressedImage,0) SetGadgetAttribute(#ButtonImage_5,#PB_Button_PressedImage,0) SetGadgetAttribute(#ButtonImage_6,#PB_Button_PressedImage,0) SetGadgetAttribute(#ButtonImage_7,#PB_Button_PressedImage,0) EndIf EndIf EndProcedure Open_Window_0() Repeat Event=WaitWindowEvent() Menu=EventMenu() If Event=#PB_Event_Menu If Menu=2 Break ; Прерываем текущий цикл ElseIf menu=1 DisableWindow(#Window_0, 1) AddWindowTimer(#Window_0, 2, 2000) ; Теймер сработает через 2 секунды EndIf ElseIf Event=#PB_Event_Timer If EventTimer()=2 DisableWindow(#Window_0, 0) RemoveWindowTimer(#Window_0, 2) ; Выключаем таймер EndIf EndIf Until Event=#PB_Event_CloseWindow End
Если программу слегка модифицировать - избавится от Delay(2000), а задержку выполнять с помощью таймера, то все работает как надо.
Здорово. Большое спасибо!!!
А есть в PureBasik возможность вызвать событие. Например, клик мышки по такой-то кнопке, или двойной клик по ней? Например, в “Алгоритме 2.5” есть возможность вызвать событие, уже описанное в программе. Или в PB такие вещи решаются процедурами, т.е. заново описываем последствия события???
Грубо говоря, на кнопку СТАРТ навешена куча процедур, которые происходят при клике на нее. Могу ли я в определенный момент вызвать событие (клик кнопки СТАРТ ) или мне надо заново задавать вызов всех этих процедур если понадобиться???
Отредактировано Lucagin (08.12.2010 17:25:22)
Вопросы новичка (продолжение…) | Вопросы по PureBasic | 29.06.2024 |
Скорее, это теоретический вопрос о правах в директории. | OffTop | 16.09.2022 |
Вопрос по отладке | Вопросы по PureBasic | 26.01.2017 |
Три вопроса по созданию браузера. | Вопросы по PureBasic | 01.11.2010 |
вопрос о точности типов данных | Вопросы по PureBasic | 20.05.2021 |
Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка