PureBasic - форум

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

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


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


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

Сообщений 1 страница 30 из 1000

1

Доброго времени суток. Буквально пару дней назад перешел на пурик и сразу возникла множество вопросов. Так как раньше я писал на делфях, то перейти на другой язык оказалось не так легко, как я думал. Хоть Pure и простой мне нужна ОСНОВАТЕЛЬНАЯ ваша помощь. Ваш сайтик и форум из всех остальных я выбрал из -за его простоты и понятности. Поэтому не обессудьте. Учусь я быстро и хорошо.
Ну так ближе к делу. Как создается окно я примерно понял. Теперь надо разобраться с свойствами. Давайте начнем с простого примера. Как при нажатии кнопки в label поменять текст, например, на Привет мир!! Для вас конечно легко, но учиться всем надо...

0

2

Вот пример

Код:
 ; Создаём окно.
  OpenWindow(1,150,200,200,100,"Заголовок окна",#PB_Window_MinimizeGadget)
  TextGadget(1, 50,20,100,16,"Это текст")
  ButtonGadget(2,50,50,80,25,"Кнопка")
  
  Repeat ; Начало главного цикла Repeat-Until.
  Event=WaitWindowEvent() ; Получаем идентификатор события.
  Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие.
   
   If Event=#PB_Event_Gadget ; Произошло событие в гаджете
    If Gadget=2 ; Условие будет выполнено при щелчке по кнопке (у неё идентификатор 2).
      SetGadgetText(1,"Привет мир!") ; Изменяет тест в гаджете с идентификаторм 1 (у нас это TextGadget)
    EndIf
   EndIf 
     
  Until Event = #PB_Event_CloseWindow ; Прерываем цикл если в переменной "Event" будет число равное числу в константе.

0

3

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

0

4

И еще вопрос. Можно ли програмно создать туже надпись в случайном положении на форме при нажатии на кнопке.  И что бы создавать можно было любое колличество этих label -ов :)

0

5

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

если мне надо допустим изменить поменять шрифт, разиер, цвет и тп, то свойства другие будут?

Для этот существуют другие функции.
Например, для изменения шрифта используется функция SetGadgetFont

Код:
SetGadgetFont(#Gadget, LoadFont(#PB_Any, "Arial", 24))

Эта строка установит текушим шриф Arial с размером 24 в гаджете с идентификаторм #Gadget

Чтобы узанть доступные свойства (функции) для того или иного гаджета, нужно просто установить текстовый курсор в редакторе кода на интерисующую функцию, например, на ButtonGadget и нажать на клавиатуре, кнопку F1

увеличить

0

6

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

Можно ли програмно создать туже надпись в случайном положении на форме при нажатии на кнопке.  И что бы создавать можно было любое колличество этих label -ов

Примерно так можно сделать

Код:
; Создаём окно.
  OpenWindow(1,150,200,400,400,"Заголовок окна",#PB_Window_MinimizeGadget)
  ButtonGadget(2,20,20,80,25,"Кнопка")
  
  Count=0
  
  Repeat ; Начало главного цикла Repeat-Until.
  Event=WaitWindowEvent() ; Получаем идентификатор события.
  Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие.
   
   If Event=#PB_Event_Gadget ; Произошло событие в гаджете
    If Gadget=2 ; Условие будет выполнено при щелчке по кнопке (у неё идентификатор 2)
      Count+1
      TextGadget(#PB_Any,Random(300), Random(400), 100,16, "Это надпись №"+Str(Count))
    EndIf
   EndIf 
     
  Until Event = #PB_Event_CloseWindow ; Прерываем цикл если в переменной "Event" будет число равное числу в константе.

0

7

Со свойствами понятно.

0

8

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

Примерно так можно сделать

хм.. а как собственно тут происходит создание новой надписи??

0

9

Её создаёт функция TextGadget, которая выполняется при каждом клике по кнопке.

0

10

ясно, спасибо. Пока буду разбираться со всем вышеописанным :)

0

11

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

Count=0

вот это сможешь прокомментировать? Я так понял это типа памяти , который прибавляет по 1 каждый раз

0

12

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

вот это сможешь прокомментировать? Я так понял это типа памяти , который прибавляет по 1 каждый раз

Привет daiomik!
Это типа счетчика для присвоения твоим кнопкам разные имена
Можно и не писать эту строку, переменным по умолчанию присваивается 0.
Петр, я думаю, написал ее только для большего понимания.

Отредактировано haav (31.01.2010 09:29:35)

0

13

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

Это типа счетчика

ясно. А где в этом коде место, отвечающее за случайное распределение label-ов?

0

14

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

ясно. А где в этом коде место, отвечающее за случайное распределение label-ов?

Вот это место:
TextGadget(#PB_Any,Random(300), Random(400), 100,16, "Это надпись №"+Str(Count))

Функция  Random(300) к примеру генерит числа от 1 до 300

0

15

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

Функция  Random(300) к примеру генерит числа от 1 до 300

таак. С этим разобрался. Спасибо )

0

16

Еще вопрос. Создал я с помощью визуального редактора две некие формы и перекинул их в пурик. Получился вот такой код:

Код:
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #Window_0
  #Window_1
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Button_0
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 379, 244, 115, 155, "MainForm",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_0))
      ButtonGadget(#Button_0, 10, 10, 95, 25, "О программе")
      
    EndIf
  EndIf
EndProcedure

Procedure Open_Window_1()
  If OpenWindow(#Window_1, 458, 261, 251, 60, "О программе",  #PB_Window_SystemMenu | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_1))
      
    EndIf
  EndIf
EndProcedure

возникает вопрос: во - первых странный у них вид кода, не такой как например в предыдущем примере, во-вторых наличие процедур (непонятно зачем) и в - третьих отсутствие цикла Repeat-Until. Как этот код переделать, что бы все работало и как при запуски проги сделать так, что бы окно "О ппрограмме" не было видно. Оно должно появиться при нажатии кнопки

Отредактировано daiomik (31.01.2010 12:52:35)

0

17

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

отсутствие цикла Repeat-Until

Его нужно самому добавить.
Визуальный редактор создаёт колько код окон.

Код:
;- Window Constants
;
Enumeration
  #Window_0
  #Window_1
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Button_0
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 379, 244, 115, 155, "MainForm",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_0))
      ButtonGadget(#Button_0, 10, 10, 95, 25, "О программе")
      
    EndIf
  EndIf
EndProcedure

Procedure Open_Window_1()
  If OpenWindow(#Window_1, 458, 261, 251, 60, "О программе",  #PB_Window_SystemMenu | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_1))
      
    EndIf
  EndIf
EndProcedure

Open_Window_0()

Repeat ; Начало главного цикла Repeat-Until.
  Event=WaitWindowEvent() ; Получаем идентификатор события.
  Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие.
  Window=EventWindow() ; Получаем идентификатор окна, в котором произошло событие
  
  
  If Window=#Window_0 ; Обработчик событий для окна "MainForm"
  
    If Event=#PB_Event_Gadget ; Произошло событие в гаджете
     If Gadget=#Button_0 ; Условие будет выполнено при щелчке по кнопке
        Open_Window_1()
     EndIf
    EndIf 
  
  ElseIf Window=#Window_1 ; Обработчик событий для окна "О программе"
    If Event = #PB_Event_CloseWindow
       CloseWindow(#Window_1)
    EndIf
  EndIf
     
Until Event = #PB_Event_CloseWindow And Window=#Window_0 ; Прерываем цикл если в переменной "Event" будет число равное числу в константе.

0

18

Примерно вот так:

Код:
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #Window_0
  #Window_1
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Button_0
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 379, 244, 115, 155, "MainForm",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    
      ButtonGadget(#Button_0, 10, 10, 95, 25, "О программе")
      
   
  EndIf
EndProcedure

Procedure Open_Window_1()
  If OpenWindow(#Window_1, 458, 261, 251, 60, "О программе",  #PB_Window_SystemMenu | #PB_Window_TitleBar )
 
  EndIf
EndProcedure

Open_Window_0() ; запускаем первое окно


Repeat

event=WaitWindowEvent() ; команда ожидания события
 
If event = #PB_Event_Gadget   ;Условие срабатывания кнопки
        If EventGadget() = #Button_0
        Open_Window_1()
        EndIf
EndIf
Until event=#PB_Event_CloseWindow ;Условие выхода из цикла
daiomik написал(а):

во-вторых наличие процедур (непонятно зачем)

Пурик процедурный язык, поэтому наличие процедур в нем отражает его качества. Далее код

If CreateGadgetList(WindowID(#Window_1))
     
    EndIf

не нужен, это для старых версий компилятора.

P.s Я так и знал что опоздаю  :D

Отредактировано haav (31.01.2010 13:12:03)

0

19

:cool:  спасибо, оперативно

0

20

Вот начал писать простейшее оконное приложение. Сразу ошибка, разберитесь пожалуйста:

Код:
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #Window_0
  #Window_1
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_0
EndEnumeration

Enumeration
  #MENU_1
  #MENU_2
  #MENU_4
  #MENU_6
  #MENU_3
  #MENU_8
  #MENU_9
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 211, 146, 600, 300, "MainForm",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateMenu(#MenuBar_0, WindowID(#Window_0))
      MenuTitle("Файл")
      MenuItem(#MENU_1, "Открыть")
      MenuItem(#MENU_2, "Сохранить")
      MenuBar()
      MenuItem(#MENU_4, "Выход")
      MenuTitle("Помощь")
      MenuItem(#MENU_8, "О программе")
      EndIf

      If CreateGadgetList(WindowID(#Window_0))
        
      EndIf
    EndIf
EndProcedure

Procedure Open_Window_1()
  If OpenWindow(#Window_1, 370, 270, 240, 86, "О программе",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_1))
      
    EndIf
  EndIf
EndProcedure

Repeat ; Начало главного цикла Repeat-Until.
  Event=WaitWindowEvent() ; Получаем идентификатор события.
  Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие.
  Window=EventWindow() ; Получаем идентификатор окна, в котором произошло событие
  
If Window=#Window_0 ; Обработчик событий для окна "MainForm"
  
    If Event=#PB_Event_Gadget ; Произошло событие в гаджете
     If Gadget=#MENU_9 ; Условие будет выполнено при щелчке по кнопке
        Open_Window_1()
     EndIf
    EndIf 
 
ElseIf Window=#Window_1 ; Обработчик событий для окна "О программе"
    If Event = #PB_Event_CloseWindow
       CloseWindow(#Window_1)
    EndIf
  EndIf
     
Until Event = #PB_Event_CloseWindow And Window=#Window_0 ; Прерываем цикл если в переменной "Event" будет число равное числу в константе.

0

21

После объявления процедур, ты забыл ее запустить. Перед строкой  Repeat ; Начало главного цикла Repeat-Until.
Надо Open_Window_0()

0

22

Запустилось без ошибок, только теперь при нажатии пункта меню почему то не запускается окно

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

If Event=#PB_Event_Gadget ; Произошло событие в гаджете
     If Gadget=#MENU_9 ; Условие будет выполнено при щелчке по кнопке
        Open_Window_1()
     EndIf

0

23

Чтобы обрабатывать события меню, нужно отслежимать событие #PB_Event_Menu.
Номер пункта меню получаем с помощью функции EventMenu()

Код:
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #Window_0
  #Window_1
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_0
EndEnumeration

Enumeration
  #MENU_1
  #MENU_2
  #MENU_4
  #MENU_6
  #MENU_3
  #MENU_8
  #MENU_9
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 211, 146, 600, 300, "MainForm",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateMenu(#MenuBar_0, WindowID(#Window_0))
      MenuTitle("Файл")
      MenuItem(#MENU_1, "Открыть")
      MenuItem(#MENU_2, "Сохранить")
      MenuBar()
      MenuItem(#MENU_4, "Выход")
      MenuTitle("Помощь")
      MenuItem(#MENU_8, "О программе")
      EndIf

      If CreateGadgetList(WindowID(#Window_0))
        
      EndIf
    EndIf
EndProcedure

Procedure Open_Window_1()
  If OpenWindow(#Window_1, 370, 270, 240, 86, "О программе",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_1))
      
    EndIf
  EndIf
EndProcedure

Open_Window_0()

Repeat ; Начало главного цикла Repeat-Until.
  Event=WaitWindowEvent() ; Получаем идентификатор события.
  Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие.
  Window=EventWindow() ; Получаем идентификатор окна, в котором произошло событие
  Menu=EventMenu()
  
If Window=#Window_0 ; Обработчик событий для окна "MainForm"
  
    If Event=#PB_Event_Menu ; Произошло событие в меню
     If Menu=#MENU_8 ; Пункт меню "О программе".
        Open_Window_1()
     EndIf
    EndIf 
 
ElseIf Window=#Window_1 ; Обработчик событий для окна "О программе"
    If Event = #PB_Event_CloseWindow
       CloseWindow(#Window_1)
    EndIf
  EndIf
     
Until Event = #PB_Event_CloseWindow And Window=#Window_0 ; Прерываем

0

24

Спасибо, все работает

0

25

теперь такой вопрос. Как выйти их программы по нажатию Выход. Опять ошибка

Код:
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #Window_0
  #Window_1
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_0
EndEnumeration

Enumeration
  #MENU_1
  #MENU_2
  #MENU_4
  #MENU_6
  #MENU_3
  #MENU_8
  #MENU_9
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 211, 146, 600, 300, "MainForm",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateMenu(#MenuBar_0, WindowID(#Window_0))
      MenuTitle("Файл")
      MenuItem(#MENU_1, "Открыть")
      MenuItem(#MENU_2, "Сохранить")
      MenuBar()
      MenuItem(#MENU_4, "Выход")
      MenuTitle("Помощь")
      MenuItem(#MENU_8, "О программе")
      EndIf

      If CreateGadgetList(WindowID(#Window_0))
        
      EndIf
    EndIf
EndProcedure

Procedure Open_Window_1()
  If OpenWindow(#Window_1, 370, 270, 240, 86, "О программе",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_1))
      
    EndIf
  EndIf
EndProcedure
Open_Window_0()

Repeat ; Начало главного цикла Repeat-Until.
  Event=WaitWindowEvent() ; Получаем идентификатор события.
  Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие.
  Window=EventWindow() ; Получаем идентификатор окна, в котором произошло событие
   Menu=EventMenu()
  
If Window=#Window_0 ; Обработчик событий для окна "MainForm"
  
     If Event=#PB_Event_Menu ; Произошло событие в меню
     If Menu=#MENU_8 ; Пункт меню "О программе".
        Open_Window_1()
     EndIf
     
     If Even=#PB_Event_Menu
     If Menu=MENU_4
        End
     EndIf   
EndIf 

 
ElseIf Window=#Window_1 ; Обработчик событий для окна "О программе"
    If Event = #PB_Event_CloseWindow
       CloseWindow(#Window_1)
    EndIf
  EndIf
     
Until Event = #PB_Event_CloseWindow And Window=#Window_0 ; Прерываем цикл если в переменной "Event" будет число равное числу в константе.

0

26

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

Опять ошибка

Просто не хватало завершающего оператора EndIf

Код:
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #Window_0
  #Window_1
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_0
EndEnumeration

Enumeration
  #MENU_1
  #MENU_2
  #MENU_4
  #MENU_6
  #MENU_3
  #MENU_8
  #MENU_9
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 211, 146, 600, 300, "MainForm",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateMenu(#MenuBar_0, WindowID(#Window_0))
      MenuTitle("Файл")
      MenuItem(#MENU_1, "Открыть")
      MenuItem(#MENU_2, "Сохранить")
      MenuBar()
      MenuItem(#MENU_4, "Выход")
      MenuTitle("Помощь")
      MenuItem(#MENU_8, "О программе")
      EndIf

      If CreateGadgetList(WindowID(#Window_0))
        
      EndIf
    EndIf
EndProcedure

Procedure Open_Window_1()
  If OpenWindow(#Window_1, 370, 270, 240, 86, "О программе",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_1))
      
    EndIf
  EndIf
EndProcedure
Open_Window_0()

Repeat ; Начало главного цикла Repeat-Until.
  Event=WaitWindowEvent() ; Получаем идентификатор события.
  Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие.
  Window=EventWindow() ; Получаем идентификатор окна, в котором произошло событие
   Menu=EventMenu()
  
If Window=#Window_0 ; Обработчик событий для окна "MainForm"
  
     If Event=#PB_Event_Menu ; Произошло событие в меню
       If Menu=#MENU_8 ; Пункт меню "О программе".
         Open_Window_1()
       ElseIf Menu=#MENU_4
         End
       EndIf
     EndIf


 
ElseIf Window=#Window_1 ; Обработчик событий для окна "О программе"
    If Event = #PB_Event_CloseWindow
       CloseWindow(#Window_1)
    EndIf
EndIf
     
Until Event = #PB_Event_CloseWindow And Window=#Window_0 ; Прерываем цикл если в переменной "Event" будет число равное числу в константе.

0

27

Добавил текстовое поле, но не знаю как его растянуть на всю область, не подскажете?

Код:
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #Window_0
  #Window_1
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_0
EndEnumeration

Enumeration
  #MENU_1
  #MENU_2
  #MENU_4
  #MENU_6
  #MENU_3
  #MENU_8
  #MENU_9
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 211, 146, 600, 300, "MainForm",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateMenu(#MenuBar_0, WindowID(#Window_0))
      MenuTitle("Файл")
      MenuItem(#MENU_1, "Открыть")
      MenuItem(#MENU_2, "Сохранить")
      MenuBar()
      MenuItem(#MENU_4, "Выход")
      MenuTitle("Помощь")
      MenuItem(#MENU_8, "О программе")
      EndIf

      If CreateGadgetList(WindowID(#Window_0))
        
      EndIf
    EndIf
EndProcedure

Procedure Open_Window_1()
  If OpenWindow(#Window_1, 370, 270, 240, 86, "О программе",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_1))
      
    EndIf
  EndIf
EndProcedure

Open_Window_0()

EditorGadget(1,2,30,548,360)

Repeat ; Начало главного цикла Repeat-Until.
  Event=WaitWindowEvent() ; Получаем идентификатор события.
  Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие.
  Window=EventWindow() ; Получаем идентификатор окна, в котором произошло событие
  Menu=EventMenu()
  
If Window=#Window_0 ; Обработчик событий для окна "MainForm"
  
     If Event=#PB_Event_Menu ; Произошло событие в меню
       If Menu=#MENU_8 ; Пункт меню "О программе".
         Open_Window_1()
       ElseIf Menu=#MENU_4
         End
       EndIf
     EndIf
 
ElseIf Window=#Window_1 ; Обработчик событий для окна "О программе"
    If Event = #PB_Event_CloseWindow
       CloseWindow(#Window_1)
    EndIf
  EndIf

     
Until Event = #PB_Event_CloseWindow And Window=#Window_0 ; Прерываем цикл если в переменной "Event" будет число равное числу в константе.

0

28

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

Добавил текстовое поле, но не знаю как его растянуть на всю область, не подскажете?

Соотноси размеры с окном

If OpenWindow(#Window_0, 211, 146, 600, 300, "MainForm",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )

EditorGadget(1,2,30,548,360)

0

29

не выходит. Всеравно текстовое поле криво на форме располагается

0

30

Если имеется в виду изменение размеров этого поля при изменении размеров окна, то для этого нужно отслеживать событие PB_Event_SizeWindow и изменять размер с помощью функции ResizeGadget

Код:
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #Window_0
  #Window_1
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_0
EndEnumeration

Enumeration
  #MENU_1
  #MENU_2
  #MENU_4
  #MENU_6
  #MENU_3
  #MENU_8
  #MENU_9
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 211, 146, 600, 300, "MainForm",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateMenu(#MenuBar_0, WindowID(#Window_0))
      MenuTitle("Файл")
      MenuItem(#MENU_1, "Открыть")
      MenuItem(#MENU_2, "Сохранить")
      MenuBar()
      MenuItem(#MENU_4, "Выход")
      MenuTitle("Помощь")
      MenuItem(#MENU_8, "О программе")
      EndIf

      If CreateGadgetList(WindowID(#Window_0))
        
      EndIf
    EndIf
EndProcedure

Procedure Open_Window_1()
  If OpenWindow(#Window_1, 370, 270, 240, 86, "О программе",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_1))
      
    EndIf
  EndIf
EndProcedure

Open_Window_0()

EditorGadget(1,2,30,548,360)
SmartWindowRefresh(#Window_0, 1) ; Это для уменьшения мерцания окна при изменении его размеров

Repeat ; Начало главного цикла Repeat-Until.
  Event=WaitWindowEvent() ; Получаем идентификатор события.
  Gadget=EventGadget() ; Узнаём идентификатор гаджета в котором произошло событие.
  Window=EventWindow() ; Получаем идентификатор окна, в котором произошло событие
  Menu=EventMenu()
  
If Window=#Window_0 ; Обработчик событий для окна "MainForm"
  
     If Event=#PB_Event_Menu ; Произошло событие в меню
       If Menu=#MENU_8 ; Пункт меню "О программе".
         Open_Window_1()
       ElseIf Menu=#MENU_4
         End
       EndIf
     EndIf
     
     If Event=#PB_Event_SizeWindow
       ResizeGadget(1, #PB_Ignore, #PB_Ignore, WindowWidth(#Window_0)-4, WindowHeight(#Window_0)-54 ) 
     EndIf
 
ElseIf Window=#Window_1 ; Обработчик событий для окна "О программе"
    If Event = #PB_Event_CloseWindow
       CloseWindow(#Window_1)
    EndIf
  EndIf

     
Until Event = #PB_Event_CloseWindow And Window=#Window_0 ; Прерываем цикл если в переменной "Event" будет число равное числу в константе.

0


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