Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 25.05.2008
Сообщений: 232

Получение имени объекта (контрола) меню

18.05.2010, 17:48. Показов 1235. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Строю дерево меню своей проги с помощью API.
Дерево строиться, но хочется как то получить имя объекта меню при построении дерева, чтобы использовать его как уникальный ключ узла в дереве. Да и потом можно его присваивать пользователям для раздачи прав, писать в табличку. Как сие можно реализовать?
С помощью АПИ удается пока достать только строку (caption) элемента меню.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.05.2010, 17:48
Ответы с готовыми решениями:

Получение имени объекта в java
Работаю с коллекцией, сделал, чтобы при добавлении в таблицу, в зависимости откласса возвращался тип товара, однако лучше бы было, чтобы...

Получение полного имени свойства объекта
Ситуация следующая. Необходимо получить ПОЛНОЕ имя любого свойства из класса namespace ConsoleApp1 { public class SuperClass2 ...

Получение имени объекта и занос в него значения
Люди может вопрос и дурацкий, но что-то не могу сообразить. Вообщем нужно занести в нужное поле значение. Какое поле я узнал и например оно...

4
Messir
18.05.2010, 18:47
Можешь делать это по ID менюшек...
1 / 1 / 0
Регистрация: 25.05.2008
Сообщений: 232
19.05.2010, 10:05  [ТС]
Сорри не догнал...
ID менюшек вытащенные через API? Так они там повторяются на разных уровнях вложенности... может че не понял или не так делаю?
Вот код:
Visual Basic
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
Private Function GetMenuItems(ByVal hMenuStart As Long, ByRef RootNode As Node)
   Dim i As Long
   Dim MenuItemCount As Long
   Dim TmpMenuInfo As MENUITEMINFO
   Dim RelNode As Node
   Dim retval As Long
   Dim tmpKey As String
 
On Error GoTo errHandler
 
MenuItemCount = GetMenuItemCount(hMenuStart)
 
If MenuItemCount > 0 Then
   
   For i = 0 To MenuItemCount - 1
    
     With TmpMenuInfo
       .cbSize = Len(TmpMenuInfo)
       .fType = MFT_STRING
       .fMask = MIIM_SUBMENU Or MIIM_TYPE Or MIIM_DATA Or MIIM_ID
       .cch = 256
       .dwTypeData = Space(.cch)
     End With
     
     retval = GetMenuItemInfo(hMenuStart, i, True, TmpMenuInfo)
      
     If CBool(TmpMenuInfo.fType And MFT_BITMAP) = True Then
       TmpMenuInfo.dwTypeData = 'Bitmap'
     ElseIf CBool(TmpMenuInfo.fType And MFT_SEPARATOR) = True Then
       TmpMenuInfo.dwTypeData = 'Separator'
     Else
       TmpMenuInfo.dwTypeData = Left$(TmpMenuInfo.dwTypeData, TmpMenuInfo.cch)
       TmpMenuInfo.dwTypeData = Replace(TmpMenuInfo.dwTypeData, vbTab, Space(5))
     End If
    
     tmpKey = getMenuItemName(TmpMenuInfo.dwTypeData)
     Set RelNode = Form1.TreeView1.Nodes.Add(RootNode, tvwChild, tmpKey, TmpMenuInfo.dwTypeData)
     
     If TmpMenuInfo.hSubMenu <> 0 Then
       Call GetMenuItems(TmpMenuInfo.hSubMenu, RelNode)
     End If
   Next i
End If
 
Exit Function
 
errHandler:
 
   MsgBox Err.Number & Err.Description
   Err.Clear
   Resume Next
   
End Function
(но этот способ не работает, если в меню есть элементы с одинаковыми Caption)
'возвращает программное имя эл-та меню по указ. его кэпшону
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Function getMenuItemName(menuItemCaption) As String
Dim tmpCtrl As Control
 
menuItemCaption = Trim(menuItemCaption)
 
For Each tmpCtrl In Form1
If TypeName(tmpCtrl) = 'Menu' Then
 If tmpCtrl.caption = menuItemCaption Then
  getMenuItemName = tmpCtrl.Name
  Exit Function
 Else
  getMenuItemName = ''
 End If
End If
Next tmpCtrl
 
End Function
0
Messir
19.05.2010, 11:08
Дело в том, что ID может трактоваться по-разному. В одном случае - это позиция элемента меню, а в другом - это его уникальный идентификатор.
1 / 1 / 0
Регистрация: 25.05.2008
Сообщений: 232
19.05.2010, 11:38  [ТС]
Так вот как его трактовать как уникальный идентификатор?
В этом то и загвоздка. Может есть какие идеи?
API Функция то одна - GetMenuItemInfo
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.05.2010, 11:38
Помогаю со студенческими работами здесь

Получение указателя на метод объекта по его имени
Доброго времени суток. Как получить метод объекта имея в строковой переменной его имя, по аналогии с WinAPI - GetProcAddress? Пример: ...

Получение объекта класса по полному имени и аргументам конструктора
Существует реализация класса для создания экземпляров объектов и пока что в нём реализован (не до конца) один метод: public class...

Получение имени объекта. Функция public String getName(Object object) {...}
К примеру есть объекты: Object myObject111 = new Object(); File parentDirectory = new File(); Хочу такую функцию: public String...

Изменение контрола по имени
Приветствую всех Возник небольшой вопросец. Каким образом можно изменить какое-либо свойство у контрола (в моем случае label),...

Поиск контрола на форме по имени
Люди, помогите! Есть имя (string). Как найти контрол на форме с таким именем? Способ с перебором всех контролов не подходит, больно много...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru