View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001751 | Wishes | Macro | public | 2011-04-12 17:01 | 2013-02-03 00:33 |
Reporter | DAtaMan | Assigned To | |||
Priority | normal | Severity | feature | Reproducibility | have not tried |
Status | closed | Resolution | fixed | ||
Product Version | 3.0 | ||||
Summary | 0001751: Создание меню в макросе | ||||
Description | В предлагаемом патче реализована макрофункция Menu.Show | ||||
Additional Information | S=Menu.Show(Items[,Title[,Bottom[,Flags[,BoxType[,X[,Y]]]]]]) Items - пункты меню, разделённые запятой или точкой с запятой. Если первый символ пункта меню начинается с ~, то пункт будет разделителем. При этом флаги 0x002 и/или 0x004 никак не учитываются. Title - заголовок меню Bottom - нижний заголовок меню Flags - комбинация битов: 0x001 - разрешена отметка нескольких пунктов 0x002 - убирать дублирующиеся пункты 0x004 - отсортировать (с учетом регистра) 0x008 - автоматически назначить горячие клавиши BoxType - тип рамки меню: 0 - без рамки 1 - одинарная рамка 2 - одинарная рамка, без окружающих пробелов 3 - двойная рамка (по-умолчанию) 4 - двойная рамка, без окружающих пробелов X, Y - координаты меню. Если какая-то (или обе) отсутствует или равна -1, то меню по ней центрируется. По-умолчанию равны -1 (меню показывается в центре экрана) Возвращаемый результат: -1 - при выходе из меню по Esc или F10 >=0 - номер выбранного пункта (по Enter), если не установлен флаг 0x001 строка - выбранный пункт меню (если ничего не отмечено) или список отмеченных, разделённые запятой. | ||||
Tags | No tags attached. | ||||
Build | 0 | ||||
|
|
|
Или можно было подобный тикет переоткрыть ? |
|
> Если первый символ пункта меню начинается с ~, то пункт будет разделителем. Смущает символ '~'. Может имеет смысл сделать как в Info.Message: ------ Для отрисовки одинарной разделительной линии начните строку с символа с кодом 1 (\x001). Для отрисовки двойной разделительной линии начните строку с символа с кодом 2 (\x002). ------ ? |
|
>Смущает символ '~'. Сначала функция имела ещё один параметр - "Separator". Потом убрал, и так рекордсменша получилась :) >...начните строку с символа с кодом... Честно говоря не пробовал, а как задать такие коды в verbatim string ? Двойным "\" ? А так, да, иметь два вида линий будет лучше. |
|
А зачем столько наворотов - разные рамки, разные сепараторы, позиция, футер и т.п.? Это же макросы, а не апи. |
|
>А зачем столько наворотов - разные рамки, разные сепараторы, позиция, футер и т.п.? Хотелось как можно гибче. Разные рамки - в случае "нестандартных", можно на вид определить, что это макроменю (для некоторых пользователей полезно) Без рамки - например, удобен список слов в редакторе. Типа макросовое автодополнение Позиция - меню можно вызывать по координатам мыши Футер - можно подсказку написать, типа Ins - пометить, Esc - выход. И т.д. :) Я, к примеру, использую для отображения закладок редактора. |
|
Flags и BoxType можно объединить Title и Bottom так же объединить, применив разделитель '\n' В сухом остатке останется S=Menu.Show(Items[,Title[,Flags[,X[,Y]]]]) |
|
>В сухом остатке останется >S=Menu.Show(Items[,Title[,Flags[,X[,Y]]]]) Замечательно! ЗЫ Баг - хоткеи не работают :( |
|
> Замечательно! а патч? > Баг - хоткеи не работают :( эээ... не понял, где не работают? |
|
Я не понял что всё-таки возвращается - число или строка? По описанию похоже что число, кроме случая когда присутствует флаг 0x001. Но что если я хочу строку, но не хочу несколько пунктов? |
|
>а патч? Пока нет. udlist крут, конечно, но спотыкается на многих строках. Придётся отказаться. > эээ... не понял, где не работают? По нажатию хоткея меню закрывается, но строка не выбирается. >Но что если я хочу строку, но не хочу несколько пунктов? Пока никак, только через добавление дополнительного параметра/флага. |
|
>только через добавление дополнительного параметра/флага. Зачем же дополнительный параметр, можно добавить к имеющимся флагам. Альтернативно, пусть функция во всех случаях возвращает строку - название выбранного пункта. |
|
|
|
SeparatorNotFiltered.diff (513 bytes)
Index: vmenu.cpp =================================================================== --- vmenu.cpp (revision 5963) +++ vmenu.cpp (working copy) @@ -661,7 +661,7 @@ //������ ������ ��������� for (int i=0; i < ItemCount; i++) { - if (ItemIsVisible(Item[i]->Flags) && !StrStrI(Item[i]->strName, strFilter)) + if (ItemIsVisible(Item[i]->Flags) && !StrStrI(Item[i]->strName, strFilter) && !(Item[i]->Flags & LIF_SEPARATOR)) { Item[i]->Flags |= LIF_HIDDEN; ItemHiddenCount++; |
|
S=Menu.Show(Items[,Title[,Flags[,Select[,X[,Y]]]]]) Items - пункты меню, разделённые \r\n сепаратор должен начинаться с \0x1пробел (с двойным чего-то не разобрался, как сделать :( ) Title - Title и Bottom, разделённые \n Flags: бит 0 - возвращаемый результат - индекс или строка бит 1 - разрешена отметка нескольких пунктов бит 2 - отсортировать. Теперь выполняется регистронезависимая числовая сортировка. Нужен ли для неё отдельный флаг ? бит 3 - убирать дублирующиеся пункты бит 4 - автоматически назначать хоткеи биты 5-7 - BoxType Select - пункт, на который позиционируемся при показе меню. Может быть числом (если отрицательное, то поиск с конца) или строкой Возвращаемый результат функции - номер пункта, строка или список пунктов, разделённые \r\n -1 - при выходе по Esc, F10 или при клике вне меню Добавлены кнопкосочетания Ctrl-Add/Ctrl-Subtract - пометить/снять пометку. В сочетании с фильтром - лепота :) Сначала был вариант со вспомогательным массивом, но в целях экономии памяти :) сделал небольшие добавки к VMenu P.S. Очень не хватает макрофункции разбиения строки на слова (Split, например). Можно завишировать ? |
|
Также есть предложение не фильтровать сепараторы. Когда меню с их помощью структурировано, то при фильтрации структура ломается. Отдельный патч приложен. |
|
> P.S. Очень не хватает макрофункции разбиения строки на слова (Split, например). Можно завишировать ? можно конечно, но здесь бы массивы пригодились, которых в языке нет. |
|
>Items - пункты меню, разделённые \r\n >Title - Title и Bottom, разделённые \n Может лучше как-то однотипненько? |
|
кстати да, нужна однотипность... |
|
Как насчёт того чтобы разделителями могли быть и \n и \r\n? |
|
|
|
>Как насчёт того чтобы разделителями могли быть и \n и \r\n? Да, логично. Вроде сделал. :) Насчёт каких-либо ещё дополнительных клавиш управления идеи есть ? Т.к. макросы в этом меню работать не будут. |
|
>бит 0 - возвращаемый результат - индекс или строка Из описания неочевидно, что соответствует 0 а что 1. Как по мне, то строка полезнее, а значит её удобнее получать по умолчанию. |
|
|
|
>строка полезнее, а значит её удобнее получать по умолчанию Можно и так. Сделал. Если бит 0 установлен, то возвращается индекс. Измененено расположение управляющих символов - теперь они должны быть расположены после текста пункта меню, и могут быть сочетанием следующих: \x1 - сепаратор \x2 - отмеченный \x3 - запрещённый \x4 - серый Тестовый макрос print(menu.show("a\x1\nb\2\nb\3\nd\4\nf\ne","Title\nCtrl-Add, Ctrl-Subtract - пометка",0x16)) |
|
Хмм... а почему "они должны быть расположены после текста пункта меню"? Почему не в начале? Поясни логику. |
|
>Почему не в начале? Если строка начинается с числа (или a-f), то эти символы тоже считаются кодом символа. Поэтому сначала и было \xпробел. Как это побороть, не придумал (я же в Це начинающий :) ) |
|
Как вариант - принять тезис, что hex считается как \xHHHH, т.е. после x идут 4 (или 5?) 16-ричных числа с ведущим нулем. Из диапазона всех символов выпадают \x0001..\x0004 - наши управляющие символы. Если мы считаем, что не будем поддерживать в строках меню (для обсуждаемой функции) esc-последовательности, то можно ограничиться шаблоном \xH, т.е. 1 символ. |
|
>не будем поддерживать в строках меню (для обсуждаемой функции) esc-последовательности Да, это плохо. Можно было бы показывать таблицу символов с их кодами, например. Может быть опять вернутся к варианту "[\x1..\x4]пробелПункт меню" ? |
|
|
|
S=Menu.Show(Items[,Title[,Flags[,FindOrFilter[,X[,Y]]]]]) Нумерация пунктов меню начинается с 1. Items - пункты меню, разделённые \n или \r\n начало пунктов может иметь специальный формат: \1пробел - сепаратор \2пробел - пункт отмечен \3пробел - пункт недоступен \4пробел - серый Возможна их комбинация в любом порядке. Title - заголовок и(или) нижний заголовки меню, разделённые \n или \r\n Flags, если установлен бит: 0 - возвращаемый результат - индекс, иначе строка 1 - разрешена отметка нескольких пунктов 2 - отсортировать пункты. Выполняется регистронезависимая числовая сортировка 3 - убирать дублирующиеся пункты 4 - автоматически назначать хоткеи 5 - трактовать FindOrFilter как строку для фильтра 6 - автоматическая нумерация пунктов биты 7-9 - тип рамки меню: 001 - без рамки 010 - одинарная рамка 011 - одинарная рамка 100 - двойная рамка (по умолчанию) 101 - двойная рамка без окружающих пробелов Если FindOrFilter: - число, то номер пункта, на который при показе меню позиционируется курсор если число отрицательное, то отсчёт с конца меню - строка, то в меню производится поиск этой строки (возможны символы маски) - строка и установлен 5-ый бит флагов, то строка передаётся в фильтр меню Возвращаемый результат функции - номер пункта, строка или список пунктов, разделённые \r\n -1 - при выходе по Esc, F10 или при клике вне меню. В меню доступны сочетания клавиш Ctrl-Add/Ctrl-Subtract - пометить/снять пометку (только при установленном бите 1). |
|
Выше описал новый синтаксис. Вроде всё :) |
|
>Возможна их комбинация в любом порядке. Что-то не понимаю как такое возможно, и для чего нужно. >0 - возвращаемый результат - индекс, иначе строка >1 - разрешена отметка нескольких пунктов Что будет если оба установлены? >5 - трактовать FindOrFilter как строку для фильтра Не очень понятно зачем может понадобиться такое. Рельно полезный пример можно? >список пунктов, разделённые \r\n Может лучше просто \n? |
|
будет 1983 (первое приближение, дальше дум щупать) |
|
>>Возможна их комбинация в любом порядке. >Что-то не понимаю как такое возможно, и для чего нужно. Например, отмеченный+серый. Для чего - практика покажет. :) >Что будет если оба установлены? Вернётся строка - список отмеченных. >>список пунктов, разделённые \r\n >Может лучше просто \n? \n - удобно в меню, формируемых в макросе. \r\n - для строк, получаемых по CtrlIns (чтобы не делать Replace в макросе) >>5 - трактовать FindOrFilter как строку для фильтра >Не очень понятно зачем может понадобиться такое. Рельно полезный пример можно? Clip(5,0) $selword; CtrlIns %word=Clip(0); CtrlA CtrlIns CtrlU %Line=menu.show(Clip(0),"Список строк - Grep",0x71,%word); $If (%Line) editor.pos(1, 1, %Line); editor.pos(1, 2, index(editor.value, %word)+1); $selword; $End Clip(5,0) Вариант без фильтрации: Clip(5,0) $selword; CtrlIns %word=Clip(0); CtrlA CtrlIns CtrlU %Line=menu.show(Clip(0),"Список строк - Grep",0x51,"*"+lcase(%word)+"*"); $If (%Line) editor.pos(1, 1, %Line); editor.pos(1, 2, index(editor.value, lcase(%word))+1); $selword; $End Clip(5,0) ________________________________________ >будет 1983 Ура! :-) |
|
build 1983 |
|
>Например, отмеченный+серый. Для чего - практика покажет. :) Я лично за разумный минимализм. Практической пользы пока не видно, а значит описание напрасно усложняется. Причём из вышеприведённого описания также следует возможность и таких комбинаций: сепаратор+пункт отмечен сепаратор+пункт недоступен сепаратор+серый ... и ещё масса других безумных 2х- и 3х-компонентных сочетаний. >>Что будет если оба установлены? >Вернётся строка - список отмеченных. В описании надо указать. Но лучше возвращать ошибку. >>Может лучше просто \n? > \r\n - для строк, получаемых по CtrlIns (чтобы не делать Replace в макросе) Я имел ввиду в возвращаемом значении. |
|
>Причём из вышеприведённого описания также следует возможность и таких комбинаций: >сепаратор+пункт отмечен >сепаратор+пункт недоступен >сепаратор+серый Комбинации возможны, но показан будет обычный сепаратор. После обкатки будет описано предельно понятно. >Я имел ввиду в возвращаемом значении. panel.select не понимает только \n |
|
|
|
Мда, с самого начала расположение битов рамки было не там. Посему перетасовка. Теперь если во Flags, установлен бит(ы): биты 0-2 - тип рамки меню: 001 - без рамки 010 - одинарная рамка 011 - одинарная рамка 100 - двойная рамка (по умолчанию) 101 - двойная рамка без окружающих пробелов 3 - возвращаемый результат - индекс, иначе строка 4 - разрешена отметка нескольких пунктов 5 - отсортировать пункты. Выполняется регистронезависимая числовая сортировка 6 - убирать дублирующиеся пункты 7 - автоматически назначать хоткеи 8 - трактовать FindOrFilter как строку для фильтра 9 - автоматическая нумерация пунктов Добавлено/изменено: 10 - выход из меню производится при изменении выбранного пункта (т.е. при навигации по меню) Возвращаемый результат функции строка - выбранный пункт или список пунктов, разделённые \r\n если установлены биты 3 и 4, то возвращаются номера пунктов, разделённые \r\n >0 - номер пункта =0 - при выходе по Esc, F10 или при клике вне меню. <0 - при установленном бите 10, номер пункта со знаком минус, если произошёл выход по Esc или F10 Теперь стал возможен такой макрос: %I = 1; %S = ""; $While (%I <= Bm.Stat(0)) Bm.Goto(%I); %S = %S + Editor.Value + "\n"; %I = %I + 1; $End %I = 1; $While (%I!=0) %I=Menu.Show(%S, "Editor bookmarks\nUp/Down - Navigate, Exit - Esc, F10", 0x608, %I); $If (%I>0) Bm.Goto(%I); $Else %I=0; $End $End |
|
> Комбинации возможны, но показан будет обычный сепаратор. > После обкатки будет описано предельно понятно. "Предельно понятно" это хорошо, лишь бы ещё и лаконично. > panel.select не понимает только \n Тогда понятно. Наверно стоит как-то привести всё к общему знаменателю. Т.е. в данном случае научить panel.select понимать одиночный \n |
|
>лишь бы ещё и лаконично Цена универсальности не очень высока. >Наверно стоит как-то привести всё к общему знаменателю. >Т.е. в данном случае научить panel.select понимать одиночный \n Да, стоит. Уже сделал. После тестов выложу общий патч. |
|
offtopic >Цена универсальности не очень высока. По моим наблюдениям цена универсальности обычно высока, и не оправдывает чрезмерную универсальность. В частности, это делает синтаксис громоздким, а Писание запутанным. И читать такой код труднее. Предполагается что програмисты народ привыкший... Но применительно к макроязыку - всё это это может увеличить порог вхождения, а ведь предполагается что макроязык он и для домохозяек тоже. Menu.Show очень универсальна, и этим выбивается из общего ряда. Я не уверен что это правильный путь развития макроязыка. А если уж идти по этому пути (наворачивать), то учитывая в каком виде макроязык сейчас - его стоит спроектировать заново... |
|
panels.html.diff (1,179 bytes)
Index: panels.html =================================================================== --- panels.html (revision 6049) +++ panels.html (working copy) @@ -514,7 +514,7 @@ <tr><td></td><td colspan="2"> <p>�� ������� ������� <var>Items</var>:</p> <ul> - <li><p>������� ����� �� �������� � ����� ������, ���� � ������, ��� <code>CrLf</code> ("\r\n").</p> + <li><p>������� ����� �� �������� � ����� ������, ���� � ������, <code>Lf</code> ("\n") ��� <code>CrLf</code> ("\r\n").</p> <p>����� ����� �� � ����� �����.</p> </li> <li>� ����� ���� <var>Items</var> ����� "" (��� �����������) - �������� �� ��������.</li> @@ -542,7 +542,7 @@ <p>�� ������� ������� ���������� <var>Items</var> ������ ������� ������� ��������:</p> <ul> - <li>����������� - ����� ������� ���� ������������: ���� � ������, ����� ��� <code>CrLf</code> ("\r\n");</li> + <li>����������� - ����� ������� ���� ������������: ���� � ������, �����, <code>Lf</code> ("\n") ��� <code>CrLf</code> ("\r\n");</li> <li>����� � ����� �����.</li> </ul> --> |
|
|
|
>учитывая в каком виде макроязык сейчас - его стоит спроектировать заново... Я когда-то на форуме предлагал, чтобы все функции имели объекто-подобный синтаксис. Мне сказали погодить :) _______________________________________________________________________________ Приложил два патча. В Писании поправил описание для panel.select. Теперь она понимает \n. Возможно, стоит упомянуть об этом в changelog. menu.show разделяет элементы списка только \n Тестовый макрос: panel.select(0,1,2,menu.show(clip(0),"Title",0x10)) |
|
>Я когда-то на форуме предлагал, чтобы все функции имели объекто-подобный синтаксис. Дело ведь не в синтаксисе отдельных функций, а в стройности всей системы языка. По историческим причинам макроязыку это никак не грозит. |
|
Подумалось тут, может сделать так: handle=Menu.Create(Title[,Flags[,BoxType[,X[,Y]]]]); Menu.AddItem(handle,Text[,Flags]); Menu.AddItems(handle,TextWithCrLf[,Flags]); S=Menu.Show(handle[,X[,Y]]); Menu.Hide(handle); ?? P.S. Тем более, что где-то на форуме была идея о handle=FindFirstFile(Dir,Mask); S=FindNextFile(handle) |
|
хмм... да, принципе можно и так. MenuShowV7.diff не коммитить? |
|
Да, не надо пока. |
|
Каким образом предполагается убивать меню: - отдельной функцией типа Menu.Destroy? а если забыли вызвать? - в menu.hide? а если потом снова хотим menu.show? - в конце работы "этого" макроса? а если handle будет глобальной переменной? И вот тут, с началом появления подобного функционала, появляется вопрос в стиле сборки мусора :-) |
|
Ага, тоже над этим голову ломаю :) Но плюсов от подхода с handle много. В перспективе, можно "научить" все функции menu.* работе с макро-меню. Ну и желателен набор функций для работы с фильтром. |
|
Так нет принципиальных возражений против handle-функций ? А то уже потихонечку делаю (уборка мусора на совести юзера) И нужны ли функции Menu.Count() и Menu.Get(N) (N - индекс, а не handle) ? (Menu.Free(-1) - удаляет все меню.) |
|
> уборка мусора на совести юзера Не, это не дело. Пускай всё само удаляется при завершении макроса. |
|
>Пускай всё само удаляется при завершении макроса. Так основная же фишка в том, что однажды созданное меню (например в автостартующем макросе) можно будет вызывать из разных макросов. |
|
А зачем тебе хранить меню как объект? Сделай создание и инициализацию одной большой глобальной переменной, а потом eval её где нужно. |
|
|
|
Приложил очень чёрный черновик. Есть что не так ? |
|
>Так нет принципиальных возражений против handle-функций ? Очень есть, изложены чуть выше http://bugs.farmanager.com/view.php?id=1751#c6829 На форуме тоже было http://forum.farmanager.com/viewtopic.php?f=15&t=5410 Не надо превращать макроязык в монстра. |
|
Да, в принципе согласен. Пусть будет только 1 функция. Позже (уф... надо как то с силами собраться) сделаешь плагин, который будет предоставлять макросам вариант с хэндлом |
|
>плагин, который будет предоставлять макросам вариант с хэндлом Вот против этого ничего против не имею и иметь не могу. >надо как то с силами собраться Ждём! |
|
>Пусть будет только 1 функция. Тогда V7 в commit ? |
|
да, V7 (эх, до V8 не дотянули :-), ну и славненько, а то потом с Гуглом разбираться) сейчас оформлю... |
|
Вопрос. Зачем в panelselectFunc() вместо "\r\n" делается только "\n"? Если в угоду Menu.Show, то не все так просто. Hint: FileList::CopyNames() Upd: Отбой, слона то я и не приметил... |
|
патчик для Писания в студию на основе V7 |
|
build 2000 (миллениум) |
|
патчик для Писания в студию на основе V7 Ага, делаю. А можно отдельную страничку для примеров ? :) |
|
> А можно отдельную страничку для примеров ? :) эээ... не понял вопроса. |
|
DAtaMan не хочет втискивать примеры в общую таблицу, а просит выделить для этого отдельную html-страницу. Имхо это лишнее. |
|
согласен. лучше вместе с конкретной функцией (а еще лучше каждую функцию, константу etc. в отдельном файле) |
|
кстати, вариант "macromenus_draft" можно расширить... - добавить функцию-биндинг, позволяющую на пункт меню назначать макро... (как в eval) |
|
Где Писание? |
|
>7 - автоматически назначать хоткеи Что-то я пропустил, а как вручную? Через "&"? >9 - автоматическая нумерация пунктов Что значит "нумерация"? Номера являются хоткеями или нет? |
|
>добавить функцию-биндинг, позволяющую на пункт меню назначать макро... (как в eval) Это здорово, но зачем втискиваться в рамки eval? Предлагаю произвольную строку. Вот только функция сейчас и так уже сильно перегружена... Что если убрать BoxType и X, Y? Например сделать для них отдельную функцию типа Menu.SetStyle() |
|
> но зачем втискиваться в рамки eval? Предлагаю произвольную строку. что подразумевается под "произвольную строку"? > Например сделать для них отдельную функцию типа Menu.SetStyle() это глобальное влияние или для проекта с хэндлом? |
|
>что подразумевается под "произвольную строку"? Задаются соответствия "имя пункта"/"значение пункта". При выборе пункта функция возвращает соответствующий ему текст. Что с этим текстом делать дальше - дело пользователя: можно исполнить через eval, можно передать в командную строку, и т.п. >это глобальное влияние или для проекта с хэндлом? Глобальное. И думаю достаточно будет ограничиться контекстом текущего макроса. |
|
>Задаются соответствия "имя пункта"/"значение пункта". >... Но опять же: эта функциональность врядли может красиво совместиться с уже имеющейся. Вероятно лучше отдельной функцией. |
|
>Где Писание? К сожалению, будет не скоро - проблемы со здоровьем (как буду дома, оформлю патч). |
|
|
|
|
|
И всё-таки V8 :) Писание + багофиксы: - поломалась обработка CtrlAdd/CtrlSubtract - более корректный парсинг пустых строк - при пустом Title, в заголовке было "0" + автонумерация выполняется после сортировки/удаления дубликатов + сепараторы при сортировке/удалении дубликатов пропускаются |
|
build 2089 |
|
menu.show.smallfix.diff (1,662 bytes)
Index: macro.cpp =================================================================== --- macro.cpp (revision 6465) +++ macro.cpp (working copy) @@ -2672,6 +2672,9 @@ Menu.Show(); int PrevSelectedPos=Menu.GetSelectPos(); DWORD Key=0; + int RealPos; + bool CheckFlag; + int X1, Y1, X2, Y2, NewY2; while (!Menu.Done() && !CloseFARMenu) { SelectedPos=Menu.GetSelectPos(); @@ -2689,16 +2692,38 @@ case KEY_CTRLADD: case KEY_CTRLSUBTRACT: + case KEY_CTRLMULTIPLY: if (bMultiSelect) { for(int i=0; i<Menu.GetShowItemCount(); i++) { - Menu.SetCheck((Key==KEY_CTRLADD), Menu.VisualPosToReal(i)); + RealPos=Menu.VisualPosToReal(i); + if (Key==KEY_CTRLMULTIPLY) + { + CheckFlag=Menu.GetCheck(RealPos)?false:true; + } + else + { + CheckFlag=(Key==KEY_CTRLADD); + } + Menu.SetCheck(CheckFlag, RealPos); } Menu.Show(); } break; + case KEY_CTRLA: + { + Menu.GetPosition(X1, Y1, X2, Y2); + NewY2=Y1+Menu.GetShowItemCount()+1; + + if (NewY2>ScrY-2) + NewY2=ScrY-2; + + Menu.SetPosition(X1,Y1,X2,NewY2); + Menu.Show(); + break; + } case KEY_BREAK: CtrlObject->Macro.SendDropProcess(); Menu.SetExitCode(-1); @@ -2761,13 +2786,19 @@ else { Menu.Hide(); - Result=0; if (bExitAfterNavigate) { Result=SelectedPos+1; if ((Key == KEY_ESC) || (Key == KEY_F10) || (Key == KEY_BREAK)) Result=-Result; } + else + { + if(bResultAsIndex) + Result=0; + else + Result=L""; + } } VMStack.Push(Result); |
|
menu.show.enc2.diff (3,613 bytes)
Index: enc_rus2/meta/macro/macrocmd/prop_func/general.html =================================================================== --- enc_rus2/meta/macro/macrocmd/prop_func/general.html (revision 6465) +++ enc_rus2/meta/macro/macrocmd/prop_func/general.html (working copy) @@ -1410,7 +1410,7 @@ </table> </td></tr> <tr><td><code>3 (0x8)</code></td><td>���������� �������� - ������ ��������� ������ ���</td></tr> - <tr><td><code>4 (0x10)</code></td><td>�������� ������� �������� ������� � � �����<br>(�������� <code>Ins</code>, <code>CtrlAdd</code>, <code>CtrlSubtract</code>)</td></tr> + <tr><td><code>4 (0x10)</code></td><td>�������� ������� �������� ������� � � �����</td></tr> <tr><td><code>5 (0x20)</code></td><td>������������ (����������� ������������������ ������� ����������)</td></tr> <tr><td><code>6 (0x40)</code></td><td>����� ���������� ����� ��� (� ����� ��������)</td></tr> <tr><td><code>7 (0x80)</code></td><td>������������ ������� "�����" ������</td></tr> @@ -1439,11 +1439,22 @@ <table class="cont2 params lite tiny"> <col class="widevalue"> <tr><th>���</th><th>��������</th></tr> - <tr><td>����� == 0</td><td>��� �� ��� �� <code>Esc</code>, <code>F10</code> ��� ��� ����� ��� ���</td></tr> + <tr><td>����� ������</td><td>��� �� ��� �� <code>Esc</code>, <code>F10</code> ��� ��� ����� ��� ���</td></tr> + <tr><td>����� == 0 (���� ���������� ��� 3)</td><td>��� �� ��� �� <code>Esc</code>, <code>F10</code> ��� ��� ����� ��� ���</td></tr> <tr><td>����� > 0</td><td>������ ��������� ������</td></tr> <tr><td>����� < 0</td><td>���� ���������� ��� 10, �� ������ ��������� ������ �� ������ �����</td></tr> <tr><td>������</td><td>������� ����� ���.<br>���� ���������� ��� 4, �� ������ ������� ������� ���, �������� \n.<br>���� ���������� � ��� 3 � ��� 4, �� ������ �������� ������� ������� ���, �������� \n</td></tr> </table> + <p>� ��� ������� ������� ������� �����: (������� �������� ����� ��� ������������� ���� 4)</p> + <table class="cont2 params lite tiny"> + <col class="widevalue"> + <tr><th>��������</th><th>��������</th></tr> + <tr><td><code>Ins</code></td><td>������� ������</td></tr> + <tr><td><code>Ctrl-Add</code></td><td>������� ��� ����� �������</td></tr> + <tr><td><code>Ctrl-Subtract</code></td><td>����� ������� �� ��� ����� �������</td></tr> + <tr><td><code>Ctrl-Multiply</code></td><td>������� ������� � ��� ����� �������</td></tr> + <tr><td><code>Ctrl-A</code></td><td>�������� ��� �� �����</td></tr> + </table> ������ ����������� - ������� �� ������������ ��������� ���������: <pre class="codesample"><code>%I = 1; %S = ""; |
|
+ в Menu.Show добавлены дополнительные сочетания клавиш: Ctrl-Multiply - инверсия пометки Ctrl-A - подогнать меню по высоте - при нажатии Esc возвращалось "0". Теперь - пустая строка (или 0, если результат, как индекс) + Соответствующие правки в Писании |
|
build 2115 |
|
Если пока висит menu.show под ним обновляется панель (или обе) то половина (или все) меню пропадает. |
|
боюсь, это не сюда... без макросов так же? если да, то в отдельный Инц. |
|
Дык... без макросов такое меню не покажешь :) По крайней мере, те меню, которые я сходу нашел, такими безобразиями не страдают. Хотя, можно и отдельный инц завести... |
Date Modified | Username | Field | Change |
---|---|---|---|
2011-04-12 17:01 | DAtaMan | New Issue | |
2011-04-12 17:01 | DAtaMan | File Added: menushow.diff.7z | |
2011-04-12 17:02 | DAtaMan | Note Added: 0006758 | |
2011-04-12 18:07 | vskirdin | Note Added: 0006759 | |
2011-04-12 18:28 | DAtaMan | Note Added: 0006760 | |
2011-04-12 18:31 | DrKnS | Note Added: 0006761 | |
2011-04-12 18:48 | DAtaMan | Note Added: 0006762 | |
2011-04-12 19:26 | vskirdin | Note Added: 0006763 | |
2011-04-12 19:42 | DAtaMan | Note Added: 0006764 | |
2011-04-13 06:33 | vskirdin | Note Added: 0006768 | |
2011-04-13 09:16 | JohnDoe | Note Added: 0006774 | |
2011-04-13 09:18 | JohnDoe | Note Edited: 0006774 | |
2011-04-13 19:13 | DAtaMan | Note Added: 0006789 | |
2011-04-14 08:51 | JohnDoe | Note Added: 0006790 | |
2011-04-15 21:03 | DAtaMan | File Added: MenuShowV2.diff.7z | |
2011-04-15 21:03 | DAtaMan | File Added: SeparatorNotFiltered.diff | |
2011-04-15 21:04 | DAtaMan | Note Added: 0006794 | |
2011-04-15 21:04 | DAtaMan | Note Added: 0006795 | |
2011-04-16 07:31 | vskirdin | Note Added: 0006796 | |
2011-04-16 08:14 | JohnDoe | Note Added: 0006797 | |
2011-04-16 08:46 | vskirdin | Note Added: 0006798 | |
2011-04-16 10:55 | JohnDoe | Note Added: 0006799 | |
2011-04-16 22:51 | DAtaMan | File Added: MenuShowV3.diff.7z | |
2011-04-16 22:54 | DAtaMan | Note Added: 0006800 | |
2011-04-18 07:51 | JohnDoe | Note Added: 0006803 | |
2011-04-18 11:00 | DAtaMan | File Added: MenuShowV4.diff.7z | |
2011-04-18 11:17 | DAtaMan | Note Added: 0006804 | |
2011-04-18 12:00 | vskirdin | Note Added: 0006805 | |
2011-04-18 13:09 | DAtaMan | Note Added: 0006806 | |
2011-04-18 13:38 | vskirdin | Note Added: 0006807 | |
2011-04-18 14:07 | DAtaMan | Note Added: 0006808 | |
2011-04-21 13:02 | DAtaMan | File Added: MenuShowV5.diff.7z | |
2011-04-21 13:03 | DAtaMan | Note Added: 0006817 | |
2011-04-21 13:04 | DAtaMan | Note Added: 0006818 | |
2011-04-21 16:47 | JohnDoe | Note Added: 0006819 | |
2011-04-21 17:07 | vskirdin | Note Added: 0006820 | |
2011-04-21 20:13 | DAtaMan | Note Added: 0006822 | |
2011-04-22 08:43 | vskirdin | Note Added: 0006823 | |
2011-04-22 08:43 | vskirdin | Assigned To | => vskirdin |
2011-04-22 08:43 | vskirdin | Status | new => feedback |
2011-04-22 09:13 | JohnDoe | Note Added: 0006824 | |
2011-04-22 09:16 | JohnDoe | Note Edited: 0006824 | |
2011-04-22 11:07 | DAtaMan | Note Added: 0006825 | |
2011-04-22 11:07 | DAtaMan | Status | feedback => assigned |
2011-04-22 11:08 | DAtaMan | File Added: MenuShowV6.diff.7z | |
2011-04-22 11:09 | DAtaMan | Note Added: 0006826 | |
2011-04-22 11:53 | JohnDoe | Note Added: 0006827 | |
2011-04-22 13:41 | DAtaMan | Note Added: 0006828 | |
2011-04-22 14:44 | JohnDoe | Note Added: 0006829 | |
2011-04-22 15:41 | DAtaMan | File Added: panels.html.diff | |
2011-04-22 15:42 | DAtaMan | File Added: MenuShowV7.diff.7z | |
2011-04-22 15:50 | DAtaMan | Note Added: 0006830 | |
2011-04-22 16:14 | JohnDoe | Note Added: 0006831 | |
2011-04-23 06:17 | DAtaMan | Note Added: 0006832 | |
2011-04-23 06:21 | DAtaMan | Note Edited: 0006832 | |
2011-04-23 06:22 | DAtaMan | Note Edited: 0006832 | |
2011-04-23 17:35 | vskirdin | Note Added: 0006833 | |
2011-04-23 21:19 | DAtaMan | Note Added: 0006834 | |
2011-04-24 07:38 | vskirdin | Note Added: 0006835 | |
2011-04-24 07:39 | vskirdin | Note Edited: 0006835 | |
2011-04-24 07:57 | DAtaMan | Note Added: 0006836 | |
2011-04-24 08:14 | DAtaMan | Note Edited: 0006836 | |
2011-04-25 13:08 | DAtaMan | Note Added: 0006840 | |
2011-04-25 13:44 | DrKnS | Note Added: 0006841 | |
2011-04-25 13:47 | DAtaMan | Note Added: 0006842 | |
2011-04-25 14:49 | DrKnS | Note Added: 0006843 | |
2011-04-25 19:22 | DAtaMan | File Added: macromenus_draft.7z | |
2011-04-25 19:24 | DAtaMan | Note Added: 0006844 | |
2011-04-26 10:21 | JohnDoe | Note Added: 0006845 | |
2011-04-26 10:23 | JohnDoe | Note Edited: 0006845 | |
2011-04-26 12:17 | vskirdin | Note Added: 0006846 | |
2011-04-26 13:32 | JohnDoe | Note Added: 0006847 | |
2011-04-26 13:33 | JohnDoe | Note Edited: 0006847 | |
2011-04-26 22:05 | DAtaMan | Note Added: 0006848 | |
2011-04-27 05:52 | vskirdin | Note Added: 0006849 | |
2011-04-27 06:01 | vskirdin | Note Added: 0006850 | |
2011-04-27 06:06 | vskirdin | Note Edited: 0006850 | |
2011-04-27 06:07 | vskirdin | Note Edited: 0006850 | |
2011-04-27 06:08 | vskirdin | Note Added: 0006851 | |
2011-04-27 06:14 | vskirdin | Note Added: 0006852 | |
2011-04-27 06:14 | vskirdin | Status | assigned => feedback |
2011-04-27 08:01 | DAtaMan | Note Added: 0006853 | |
2011-04-27 08:01 | DAtaMan | Status | feedback => assigned |
2011-05-19 14:04 | vskirdin | Note Added: 0006937 | |
2011-05-19 15:16 | JohnDoe | Note Added: 0006944 | |
2011-05-19 16:33 | vskirdin | Note Added: 0006946 | |
2011-05-19 17:01 | vskirdin | Note Added: 0006949 | |
2011-05-23 12:39 | vskirdin | Note Added: 0007010 | |
2011-05-23 12:39 | vskirdin | Status | assigned => feedback |
2011-05-25 12:24 | JohnDoe | Note Added: 0007035 | |
2011-05-25 12:26 | JohnDoe | Note Added: 0007036 | |
2011-05-25 12:38 | vskirdin | Note Added: 0007037 | |
2011-05-25 12:59 | JohnDoe | Note Added: 0007039 | |
2011-05-25 13:07 | JohnDoe | Note Added: 0007040 | |
2011-05-29 01:47 | DAtaMan | Note Added: 0007103 | |
2011-05-29 01:47 | DAtaMan | Status | feedback => assigned |
2011-06-30 09:15 | DAtaMan | File Added: enc_menu_show.diff.7z | |
2011-06-30 09:15 | DAtaMan | File Added: MenuShowV8.diff.7z | |
2011-06-30 09:16 | DAtaMan | Note Added: 0007226 | |
2011-06-30 09:58 | vskirdin | Note Added: 0007227 | |
2011-06-30 09:58 | vskirdin | Status | assigned => feedback |
2011-07-11 21:42 | DAtaMan | File Added: menu.show.smallfix.diff | |
2011-07-11 21:42 | DAtaMan | File Added: menu.show.enc2.diff | |
2011-07-11 21:45 | DAtaMan | Note Added: 0007268 | |
2011-07-11 21:45 | DAtaMan | Status | feedback => assigned |
2011-07-24 06:20 | vskirdin | Note Added: 0007301 | |
2011-07-24 06:20 | vskirdin | Status | assigned => feedback |
2011-08-03 15:10 | Maximus | Note Added: 0007392 | |
2011-08-03 22:36 | vskirdin | Note Added: 0007399 | |
2011-08-03 22:42 | Maximus | Note Added: 0007400 | |
2011-08-18 12:04 | vskirdin | Relationship added | has duplicate 0001519 |
2011-08-18 12:04 | vskirdin | Relationship added | has duplicate 0000346 |
2012-11-06 11:10 | vskirdin | Build | => 0 |
2012-11-06 11:10 | vskirdin | Status | feedback => closed |
2012-11-06 11:10 | vskirdin | Assigned To | vskirdin => |
2012-11-06 11:10 | vskirdin | Resolution | open => fixed |
2013-02-03 00:33 | alexy | Severity | minor => feature |