Меню

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
DRU
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 56
Зарегистрирован: 16.11.2008 (Вс) 23:26
Откуда: Беларусь, Гомель

Меню

Сообщение DRU » 22.02.2010 (Пн) 18:16

Проблемка:
Есть текстовый файл, в котором содержатся данные типа:

"<Key>" "<Text>" "<Command>"
{
"<Key>" "<Text>" "<Command>"
{
"<Key>" "<Text>" "<Command>"
"<Key>" "<Text>" "<Command>"
}
"<Key>" "<Text>" "<Command>"
"<Key>" "<Text>" "<Command>"
}
Т.е. обыкновенное меню состоящее из нескольких элементов, каждый из которых может содержать другие элементы. Нужно: на основании этого файла создать визуальную менюшку, а также производить некоторые изменения и сохранять в файл в таком же виде. Не могу понять как создать структуру, на основании которой создавать меню. :(

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Меню

Сообщение alibek » 24.02.2010 (Ср) 9:11

Почитай про JSON.
Lasciate ogni speranza, voi ch'entrate.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Меню

Сообщение Денис » 24.02.2010 (Ср) 15:19

Надо проверить, есть ли возможность создавать подменю во время исполнения, помнится, у меня не получалось. Это главное. Остальное не проблема, текст распарсить-то.

Есть мысля. Запитываем содержимым файла массив, состоящий из элементов пользовательского типа:
Код: Выделить всё
Type MyMenuArray
    mmaLevel as Long
    mmaKey as String
    mmaText as String
    mmaCommand as String
end type


затем мы делаем монтаж (банальный open close с get'ом и split'ом) и получаем в виде элементов массива что-то типа этого:

Код: Выделить всё
'mmaLevel mmaKey  mmaText     mmaCommand
'0       "0"      "File"      ""
'1       "1"      "New"       "CmdNew"
'2       "2"      "ProjectA"  "CmdA"
'2       "3"      "ProjectB"  "CmdB"
'2       "4"      "Text File" "CmdC"
'1       "5"      "-"         ""
'1       "6"      "Exit"      "CmdExit"
'0       "7"      "Edit"      ""
'1       "8"      "Cut"       "CmdCut"
'1       "9"      "Copy"      "CmdCopy"
'1       "10"     "Paste"     "CmdPaste"
'0       "11"     "?"         "CmdHelp"


Тут очень важно обратить внимание на то, что в mmaLevel у нас записывается уровень подменю (то что в текстовых файлах отбивается табом, либо заключается в конструкции begin..end).

Мне кажется все наглядно видно, если 0 значит создаем пункт в строке меню, если 1, то создаем в первой менюшке, если 2, то предыдущий 1 становится заголовком подменю, а этот и остальные помещаются в это подменю. если затем мы встречаем 1, то выходим из подменю и создаем следующий пункт в меню. если сразу встречаем 0, то значит выходим из всех меню и в строке добавляем новый пункт.

Воот. Пункты меню создаются на API (вот так, например). Sad but true. К сожалению, Controls.add не проканает. И массивы контролов тоже.

Или я чего-то не знаю :)
Последний раз редактировалось Денис 24.02.2010 (Ср) 16:46, всего редактировалось 2 раз(а).
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Меню

Сообщение iGrok » 24.02.2010 (Ср) 16:14

Как нефиг делать.
CreateMenu, AppendMenu.
label:
cli
jmp label

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Меню

Сообщение Денис » 24.02.2010 (Ср) 16:50

Примечание к моему предыдущему длинному посту:
mmaLevel увязываем с файлом так: каждая открывающая скобка, это +1, каждая закрывающая, это -1. Начинаем с 0, естественно.

А затем, процедура, в которой будет создаваться меню, будет четко идти по массиву от А до Я, и сравнивать текущее значение mmaLevel с предыдущим и вызывать соответствующие API.

Вариантов может быть несколько:
равно 0 - новое меню в строке меню
равно предыдущему - новый пункт меню
больше предыдущего на 1 - новое подменю из предыдущего пункта меню
больше предыдущего на >1 - ошибка
меньше предыдущего на 1 - выход из подменю и новый пункт меню
меньше предыдущего на >1 - рекурсивный выход из подменю, пока не получим предыдущее вхождение.

вот такой алгоритм.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

DRU
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 56
Зарегистрирован: 16.11.2008 (Вс) 23:26
Откуда: Беларусь, Гомель

Re: Меню

Сообщение DRU » 24.02.2010 (Ср) 20:08

Почитал про JSON, почитал ответы, спасибо. Даж не знал что есть гтовые решения))

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Меню

Сообщение Денис » 26.02.2010 (Пт) 9:25

Аааа!!! Большой брат следит за мной!

Как только я почитал про JSON, в тот же вечер мне на комп залилось это обновление native JSON feature in Internet Explorer 8!
Они знали!
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 11

    TopList