PureBasic - форум

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

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


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка


Вопросы новичка

Сообщений 811 страница 840 из 1000

811

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

Возможно я туплю, но не могу понять как применить EditorGadget. Перевод справки ясности не внес.

Вот пример http://depositfiles.com/files/9mizc39jc

0

812

Спасибо Пётр!

0

813

У меня такой вопрос:

В меню есть параметр #PB_Menu_ModernLook . Такой стиль есть в винде? То есть можно ли это сделать средствами API, или это еще одна пуриковская библиотека?

0

814

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

В меню есть параметр #PB_Menu_ModernLook

Нет, у них самописная либа, поддерживающая данный стиль.

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

То есть можно ли это сделать средствами API

Как раз средствами API сделано, предварительно перевёв меню в режим OWNERDRAW

0

815

Понятно, спасибо.

0

816

Всем здравствуйте. вот код из CodeArchiv

Код:
InitNetwork() 

ExamineIPAddresses() 
NextIP = NextIPAddress() 
While NextIP 
  Debug IPString(NextIP) 
  NextIP = NextIPAddress() 
Wend

как изменить код так что бы создавался текстовый файл с именем пользователя windows , в него записывался ip дата и время и выводилось сообщение "Done"

Отредактировано neo (03.12.2010 16:40:43)

0

817

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

0

818

Большое тебе спасибо

0

819

Здравствуйте, у меня есть вопрос по поводу консоли: оператор Input() работает со строковыми переменными, как мне можно ввести именно числовую переменную с клавиатуры, мне это нужно именно так, потому что я в консоли набираю цифру, к примеру 6 и после  этого объявляется массив, размерность которого определяется этой числовой переменной с этим значением, И аналогично с командой Print, тоже вроде работает только со строковыми переменными, а как мне отобразить числовую?

0

820

Нужно использовать функции Val и Str для преобразования строки в число и числа в строку.

Код:
x.l=0 ; Числовая переменая

If OpenConsole()
  PrintN("Введите число")
  x=Val(Input())
  PrintN("Вы ввели число - "+Str(x))
  Input()
EndIf

Вот проект http://depositfiles.com/files/7xf0dlxns

0

821

Пётр, спасибо за помощь.

0

822

Всем привет!

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

Возможно я туплю, но не могу понять как применить EditorGadget. Перевод справки ясности не внес.

Вот пример http://depositfiles.com/files/9mizc39jc

Пётр не подскажите, как добавить несколько файлов?
Заранее спасибо!

Отредактировано max (06.12.2010 20:43:02)

0

823

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

как добавить несколько файлов?

Вот пример http://depositfiles.com/files/nmy8h034m

0

824

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

как добавить несколько файлов?

Вот пример http://depositfiles.com/files/nmy8h034m

Респект и уважуха! :cool:

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

0

825

Добрый день. Ребята, помогите новоначальному.
В программе 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)

0

826

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

Но почему-то, при такой схеме, 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

0

827

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

А зачем нам получать ID картинки из кнопки?Ведь известно какая картинка загружена в какую кнопку.

В том то и дело, что картинки в гаджеты загружаются случайным образом,  и к моменту Resize, я не знаю какая картинка в каждой из них, для того и хотел использовать GetGadgetAttribute(). Цикл случайной загрузки картинок приводить не стал, чтобы не усложнять код...

Спасибо за идею с CopyImage():idea: , про ухудшение картинок в справке ни слова.. :о))

Отредактировано Lucagin (07.12.2010 21:47:03)

0

828

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

В том то и дело, что картинки в гаджеты загружаются случайным образом,  и к моменту Resize, я не знаю какая картинка в каждой из них

У каждого гаждета есть ячейка памяти, работать с которой можно с помощью функций GetGadgetData и SetGadgetData.
Там можно хранить номер рисунка, загруженого в кнопку.

0

829

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

У каждого гаждета есть ячейка памяти, работать с которой можно с помощью функций 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

0

830

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

А вот если я хочу чтобы какое-то действие происходило  при нажатие не на вложенное меню, а на меню, созданное 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

0

831

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

С помощью MenuItem.

Огромное человеческое Спасибо!!! Сам бы я не один день убил, чтобы разъяснить все эти вопросы … :rolleyes:

Отредактировано Lucagin (08.12.2010 02:31:49)

0

832

А почему здесь, если водить с картинки на картинку мышкой, то возникают какие-то паразитные мерцания. С этим как-то можно бороться???

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

0

833

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

А почему здесь, если водить с картинки на картинку мышкой, то возникают какие-то паразитные мерцания. С этим как-то можно бороться???

У меня никаких мерцаний нет.

0

834

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

У меня никаких мерцаний нет.

Разверни окно на весь экран, загрузи в кнопки картинки (данные выше) , переведи каждую  кнопку в положении нажато и переводи мышь (быстро) с одной картинки на другую...
У меня возникает эффект какого-то мерцания или дергания картинки...

При наведении (“отведении”) мышки на картинку происходит ее активация (что ли), что сопровождается одинарным быстрым морганием картинки, когда часто переводить мышку с картинки на картинку из этих быстрых одинарных морганий возникает неприятный эффект мерцания…

Отредактировано Lucagin (08.12.2010 13:40:37)

0

835

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

если водить с картинки на картинку мышкой, то возникают какие-то паразитные мерцания

Пробовал в WinXP и Win7 - мерцаний нет.

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

При наведении (“отведении”) мышки на картинку происходит ее активация (что ли), что сопровождается одинарным быстрым морганием картинки

У меня при этом картинка не мерцает.

0

836

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

У меня при этом картинка не мерцает.

Странно. может я в настройкав видюхи что-то намудрил...

Ладно, попробую на другом компе и на Висте...

0

837

Ещё такой вопрос!
Можно ли отключить возможность использования мыши (или хотя бы кликов) на какое-то время (скажем 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)

0

838

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

Если во время задержки  и 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

0

839

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

Если программу слегка модифицировать - избавится от Delay(2000), а задержку выполнять с помощью таймера, то все работает как надо.

Здорово. Большое спасибо!!! :cool:

0

840

А есть в PureBasik возможность вызвать событие. Например, клик мышки по такой-то кнопке, или двойной клик по ней? Например, в “Алгоритме 2.5” есть возможность вызвать событие, уже  описанное в программе.  Или в PB такие вещи решаются процедурами, т.е. заново описываем последствия события???
Грубо говоря, на кнопку СТАРТ навешена куча процедур, которые происходят при клике на нее. Могу ли я в определенный момент вызвать событие (клик кнопки СТАРТ ) или мне надо заново задавать вызов всех этих процедур если понадобиться???

Отредактировано Lucagin (08.12.2010 17:25:22)

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка