Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Ты за кого меня держиш!?
 Аватар для ЦарьКащей
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1

Получить событие для показа popup меню под комментарием "события гаджетов"

06.08.2012, 16:35. Показов 1757. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь получить событие для показа popup меню под комментарием "события гаджетов", переделывал раз 30, то появлялось, но делало не то что надо, теперь не появляется вообще.

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
;Создаём окно-------------------------------------------------------------------------------
#WINDOW = 0
 
OpenWindow(#WINDOW, 0, 0, 1000, 700, "", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
;Пункты меню и не только--------------------------------------------------------------------
Enumeration
#MDI_Main = 30  ;главное окно
EndEnumeration
 
Enumeration; клавиши, они такие горячие
#HY_Send = 400
EndEnumeration
 
Enumeration ;главное меню
  #MDI_Child_1 = 20
  #MDI_Child_2 = 21
  #MDI_Child_3 = 22
  #MDI_Child_4 = 23
  #Help = 24
  #Program = 25
  #Exit = 26
  #Started = 27
  #Stopped = 28
  
  #MENU_FirstMDI = 29
EndEnumeration
;Хэндлы гаджетов----------------------------------------------------------------
Enumeration ;Хэндлы гаджетов Менеджера плагинов
  #PM_Plugins_List = 100
  #PM_Find_String = 101
  #PM_Manual = 102
  #MGR_Splitter = 300
EndEnumeration
 
Enumeration ;Хэндлы гаджетов Графики
  #G_Image = 103
  #G_Start_Graph = 104
  #G_Stop_Graph = 105
  #G_Pause_Graph = 106
  #G_Capture_Graph = 107
EndEnumeration
 
Enumeration ;Хэндлы гаджетов Аудио
  #A_Start_Audio = 108
  #A_Stop_Audio = 109
  #A_Pause_Audio = 110
  #A_Capture_Audio = 111
EndEnumeration
 
Enumeration ;Хэндлы гаджетов Текста
  #T_Viewer = 112
  #T_Editor = 113
  #TXT_Splitter = 301
EndEnumeration
 
Enumeration; popup menu
  #Pop_mgr = 200
  #Pop_text = 300
EndEnumeration
 
Enumeration ; popup mgr
  #MGR_Install = 201
  #MGR_Delete = 202
  #MGR_InstallFrom = 203
EndEnumeration
 
#Main = 0
 
;==========================================================================================================================================
;Создаём меню------------------------------------------------------------------------------
If CreateMenu(#Main, WindowID(#Main))
  MenuTitle("Потоки")
  MenuItem(#Started, "Запустить")
  MenuItem(#Stopped, "Остановить")
  MenuBar()
  MenuItem(#Exit, "&Закрыть программу")
  MenuTitle("Окно")
  MenuItem(#MDI_Child_1, "Менеджер плагинов")
  MenuItem(#MDI_Child_2, "Графика")
  MenuItem(#MDI_Child_3, "Аудио")
  MenuItem(#MDI_Child_4, "Текст")
  MenuTitle("?")
  MenuItem(#Help, "Справка")
  MenuItem(#Program, "О программе")
EndIf 
;Создаём подменю менеджера------------------------------------------------------------------
If CreatePopupMenu(#Pop_mgr)
  MenuItem(#MGR_Install, "Установить")
  MenuItem(#MGR_Delete, "Удалить")
  MenuBar()
  MenuItem(#MGR_InstallFrom, "Установить из...")
EndIf
;Добавляем MDI гаджет-----------------------------------------------------------------------
#GADGET_MDI = 0
MDIGadget(#GADGET_MDI, 0, 0, 0, 0, 1, #MENU_FirstMDI, #PB_MDI_AutoSize | #PB_MDI_BorderLess)
;------------------------------------------------------------------Пункты меню и не только--------------------------------------------------------------------
Repeat
  Select WaitWindowEvent();события окна
      ;Resize и этим всё сказано------------------------------------------------------------------
    Case #PB_Event_SizeWindow
      Window = GetGadgetState(#GADGET_MDI)
      
      If Window = 1;Изменилось окно Менеджера плагинов
        ResizeGadget(#MGR_Splitter, 0, 20, WindowWidth(1), WindowHeight(1) - 20)
      EndIf
      
      If Window = 2;Изменилось окно Графики
        
      EndIf
      
      If Window = 3;Изменилось окно Аудио
        
      EndIf
      
      If Window = 4;Изменилось окно Текста
        ResizeGadget(#TXT_Splitter, 0, 0, WindowWidth(4), WindowHeight(4))
      EndIf
      ;Выбор закрываемого окна--------------------------------------------------------------------
    Case  #PB_Event_CloseWindow
      Window = EventWindow()
      If Window = #WINDOW
        End
      Else;Если окно дочернее 
        Window = GetGadgetState(#GADGET_MDI)
        CloseWindow(Window)
      EndIf
      ;события гаджетов---------------------------------------------------------------------------
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #PM_Plugins_List
          Select EventType()
            Case #PB_EventType_RightClick
              DisplayPopupMenu(#Pop_mgr,0)
          EndSelect
      EndSelect
      ;события меню-------------------------------------------------------------------------------
    Case  #PB_Event_Menu
      Select EventMenu()
        Case #Exit
          End
        Case #Started
          
        Case #Stopped
          
        Case #MGR_InstallFrom
          SelectedPath.s = PathRequester("Выбери папку с плагином", "C:\")
          If SelectedPath
            ReturnStatusDLL.s = PeekS(CallFunction(1, "Install_Deinstall", 1, @SelectedPath))
          EndIf
          
        Case #MDI_Child_1;Менеджер плагинов------------------------------------------------------------------------
          AddGadgetItem(0, 1, "Менеджер плагинов")
          
          ListIconGadget(#PM_Plugins_List, 0, 20, 0, WindowHeight(1) - 20 - WindowHeight(1)/3, "Плагин", 300, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
          AddGadgetColumn(#PM_Plugins_List, 1, "Статус", 150)
          AddGadgetColumn(#PM_Plugins_List, 3, "Заметка", 750)
          StringGadget(#PM_Find_String, 0, 0, WindowWidth(1), 20, "*")
          EditorGadget(#PM_Manual, 0, WindowHeight(1) - WindowHeight(1) / 3, WindowWidth(1), WindowHeight(1)/3, #PB_Editor_ReadOnly)
        SplitterGadget(#MGR_Splitter, 0, 20, WindowWidth(1), WindowHeight(1) - 20, #PM_Plugins_List, #PM_Manual)
        ;Графика---------------------------------------------------------------------------------- 
      Case #MDI_Child_2
        AddGadgetItem(0, 2, "Графика")
        ;Аудио------------------------------------------------------------------------------------
      Case #MDI_Child_3
        AddGadgetItem(0, 3, "Аудио")
        ;Текст------------------------------------------------------------------------------------
      Case #MDI_Child_4
        AddGadgetItem(0, 4, "Текст")
        EditorGadget(#T_Viewer, 0, 0, 0, 0, #PB_Editor_ReadOnly)
        EditorGadget(#T_Editor, 0, 0, 0, 0)
        SplitterGadget(#TXT_Splitter, 0, 0, WindowWidth(4), WindowHeight(4), #T_Viewer, #T_Editor)
        AddKeyboardShortcut(#WINDOW, #PB_Shortcut_Control | #PB_Shortcut_Space, #HY_Send);горячие клавиши
        
      Case #HY_Send
        If GetGadgetState(#GADGET_MDI) = 4
          MessageRequester("","")
        EndIf
    EndSelect
    
EndSelect
 
ForEver
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.08.2012, 16:35
Ответы с готовыми решениями:

Настроить Grub для запуска по-умолчанию без показа меню
Не могу понять почему не настроивать Grub GRUB_DEFAULT=saved #запуск последнего выбранного варианта а как было 10 секунд так и...

PopUp меню для строк DBGrid
Привет, не могу сообразить как корректно организовать вызов контекстного меню для строк dbgrida. Нужно чтобы меню вызывалось только при...

Как в обработчике события получить из sender имя объекта, вызвавшего событие, а не тип?
Добрый день! Помогите, пожалуйста, решить такой вопрос: Есть 2 объекта класса: private Sphere sphA, sphB в классе создается событие...

4
Эксперт по электронике
6573 / 3200 / 335
Регистрация: 28.10.2011
Сообщений: 12,480
Записей в блоге: 7
06.08.2012, 16:57
Цитата Сообщение от ЦарьКащей Посмотреть сообщение
DisplayPopupMenu(#Pop_mgr,0)
Должно быть.
PureBasic
1
DisplayPopupMenu(#Pop_mgr,WindowID(#WINDOW))

Не по теме:

Не понятно зачем нужны операторы Enumeration и EndEnumeration если константам явно присваиваются значения?

0
Ты за кого меня держиш!?
 Аватар для ЦарьКащей
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
06.08.2012, 21:37  [ТС]
Спасибо

Добавлено через 1 час 30 минут
И ещё вопрос на засыпку.
Вставил я занит ещё одно попапово меню, какбы указав идентификатор окна 4 и ожидал его разворот при клике по текстовому гаджету в 4-м окошке MDI гаджета. Не дождался. Что посоветуете для появления второго меню? Судя по дебаггеру, как раз выполняется код до DisplayPopupMenu, а дальше ничего. совсем ничего.
PureBasic
1
2
3
4
5
        Case #T_Editor
          Select EventType()
            Case #PB_EventType_RightClick
              DisplayPopupMenu(#Pop_text,WindowID(4))
          EndSelect
0
Эксперт по электронике
6573 / 3200 / 335
Регистрация: 28.10.2011
Сообщений: 12,480
Записей в блоге: 7
06.08.2012, 22:15
У EditorGadget() нет события #PB_EventType_RightClick. http://purebasic.ru/manual.php?id=479&lng=rus

Если нужна минюшка,то вот пример.
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Procedure IsMouseOver(wnd) ; Определяем находится ли курсор мышки в пределах данного окна (гаджета)  
  GetWindowRect_(wnd,re.RECT)  
  GetCursorPos_(pt.POINT)  
  ProcedureReturn PtInRect_(@re, pt\x|(pt\y<<32))  
EndProcedure  
 
If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)  
  EditorGadget(0, 8, 8, 306, 133)  
  
  If CreatePopupMenu(1)  
    MenuItem(1,"Отменить")  
    MenuItem(2,"Повторить")  
    MenuBar()  
    MenuItem(3,"Вырезать")  
    MenuItem(4,"Копировать")  
    MenuItem(5,"Вставить")  
    MenuBar()  
    MenuItem(6,"Выделить всё")  
  EndIf  
  
  Repeat  
    Event=WaitWindowEvent()  
    
    If Event=#WM_RBUTTONUP  
      If IsMouseOver(GadgetID(0))  
        DisplayPopupMenu(1,WindowID(0))  
      EndIf  
    EndIf  
    
    If Event=#PB_Event_Menu  
      Menu=EventMenu()  
      Select Menu  
        Case 1  
          SendMessage_(GadgetID(0), #EM_UNDO, #Null, #Null)  
        Case 2  
          SendMessage_(GadgetID(0), #EM_REDO, #Null, #Null)  
        Case 3, 4  
          SendMessage_(GadgetID(0), #EM_GETSEL, @Min,@Max)  
          
          If Min<>Max ; 
            If Min<Max ; 
              xx=Max-Min ; 
            Else ; 
              xx=Min-Max ; 
            EndIf ; 
            
            lpText.s=Space(xx)  
            SendMessage_(GadgetID(0), #EM_GETSELTEXT, #Null, @lpText)  
            SetClipboardText(lpText)  
            
            If Menu=3  
              SendMessage_(GadgetID(0),#EM_REPLACESEL,0,@"")  
            EndIf  
            
          EndIf  
          
        Case 5  
          Text.s=GetClipboardText()  
          SendMessage_(GadgetID(0),#EM_REPLACESEL,0,@Text)  
        Case 6  
          SendMessage_(GadgetID(0),#EM_SETSEL,0,-1)  
      EndSelect  
    EndIf  
    
  Until Event = #PB_Event_CloseWindow  
EndIf
1
Ты за кого меня держиш!?
 Аватар для ЦарьКащей
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
06.08.2012, 22:35  [ТС]
отличный пример
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.08.2012, 22:35
Помогаю со студенческими работами здесь

Получить событие строки контекстного меню
Всем знатокам доброго времени суток! Динамически создаю контекстное меню. Заранее не знаю какие будут строки, например такие Пупик ...

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

Сабклассинг. Общее Popup меню для всех форм проекта
Возможно ли создать своё Popup меню, общее для всех TextBox'ов проекта, находящихся на разных формах? В пределах одной формы я умею...

написать программу с комментарием под каждую строку
Суть задания :Необходимо вычислить и вывести на экран 20 значений математической функции F на интервале от x = -5,0 до x = 5,0 с шагом 0,5....

PowerPoint событие при начале показа или завершении
Подскажите как сделать чтобы событие выполнялось по началу показа презентации или по её окончании ? Нужно TextBox почистить при этом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru