Dilma, есть два пожелания:
1. Сделать на Палитре элементов (elements) настраиваемое меню по правому клику наподобии el_menu.txt. Точнее два. Одно для вкладок другое для самих элементов. Н-р: pl_vkl_menu.txt и pl_el_menu.txt.
2. Сделать переключение между окнами проектов по ctrl+tab, ctrl+shift+tab.
[size=-2]------ Добавлено в 12:05
А это шаблон плагина для HiAsm к моему первому пожеланию code_323
V 3_62b159b2
Этот топик читают: Гость
Ответов: 262
Рейтинг: 6
|
|||
карма: 0 |
| ||
файлы: 1 | code_323.txt [3KB] [497] |
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
1. А сейчас-то это зачем?
2. Alt+(1..9) |
|||
карма: 27 |
|
Ответов: 262
Рейтинг: 6
|
|||
Dilma 2. Класс. Только где же был хелп? Или глаза мои ;)
1. Не понятно. Вопрос снимается совсем и его больше не задавать ? ![]() |
|||
карма: 0 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
2. Хелп к сожалению отстает в своем развитие от возможностей среды...
1. Добавлено |
|||
карма: 27 |
|
Ответов: 262
Рейтинг: 6
|
|||
Dilma,
1. Добавлено
как быстро! т.е. можно писать плагин? Если это так, то как лучше сделать? : 1. компонентом обернуть elmen.dll и hitools.dll и работать через него (пока для меня самый понятный и логичный вариант) 2. напрямую через SQLite - elements.db (в будущем проблемы совместимости. ) 3. возможно есть третий вариант - через среду на подобии работы HiPlugs (я о нем не знаю) ЗЫ: а можно добавленную версию ![]() |
|||
карма: 0 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Лучше всего вариант 1.
|
|||
карма: 27 |
|
Ответов: 262
Рейтинг: 6
|
|||
Вот первый вариант плагина. Работают три комманды: Установить элемент, Удалить элемент и Информация об элементе.
Как назло первый казус. Вчера, ради эксперимента, сделал "Удалить элемент" для HiElem и удалил его безвозвратно ![]() ![]() И появилась куча вопросов к Dilma. [size=-2]------ Добавлено в 07:14 Если делать элемент обертку то тогда, я думаю не надо в нем описывать новые процедуры, а стоит их размещать в hitools.dll. Понадобятся такие процедуры: function TabByElem(name:string):string; procedure MoveTab(toNumber: integer); procedure MoveEl(toNumber, toTab: integer); {если toNumber=-1 поместить в конец новой вкладки, если toTab=-1 перемещать внутри одной вкладки} procedure DeleteTab(n:string); procedure RenameTab(oldname,newname:string); procedure BackupEl(name, BackUpFolder:string); {создать в BackUpFolder папку с именем name и скопировать туда файлы. Возможно стоит создать сразу hic файл. } procedure BackupTab(name, BackUpFolder:string); Все это для утверждения так сказать, поскольку касается самой среды. [size=-2]------ Добавлено в 16:08 Следующая версия плагина. Добавил четыре комманды: el_moveup-Элемент вверх el_movedown-Элемент вниз vkl_moveup-Вкладку вверх vkl_movedown-Вкладку вниз Пока процедуры по работе с elements.db находяться в самом плагине(проще для отладки), но я думаю перенести их в hitools.dll и elmen.dll можно будет позже. вопрос к Dilma: бывает ли позиция,id вкладки или позиция элемента = 0? или первый всегда = 1? Все дело в том, что после установки различных элементов, в Elements.db появились элементы со значением tab=0, а вот вкладки с id=0 нет. Зато есть вкладка в которой пустые name и info, а заданы только id и pos. От чего это произошло пока не ясно. |
|||
карма: 0 |
| ||
файлы: 2 | Elem.zip [33.5KB] [288], Elem02b.zip [40.3KB] [304] |
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
позиция может быть 0. Id нет. Вкладка с пустыми name и info это Hidden вкладка с проектными и внутрисервисными элементами. Элемент вкладки 0 может получиться только вследствие ошибки
|
|||
карма: 27 |
|
Ответов: 262
Рейтинг: 6
|
|||
Dilma, "позиция может быть 0" - однако в elements.db нет ни одной записи в которой pos=0. ни в таблице elements ни в groups, что однако непонятно,
![]() Соответственно если я сейчас перемещу первый элемент (pos=1) вверх, и его pos станет равной 0, то образуется разрыв позиций. SELECT pos FROM elements WHERE tab=1 ORDER BY pos даст результат: 0,2,3,4,5... что в принципе не хорошо. Зачем порождать хаос. Тут или таблицу пересобрать или принять "волевое решение" ;) что MIN(pos)=1. [size=-2]------ Добавлено в 06:54 По этой же причине следует в elmen.dpr
|
|||
карма: 0 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Chesh, вопрос звучал как
бывает ли позиция,id вкладки или позиция элемента = 0?
а не "Почему позиция начинается с 1, а не с 0". Знакомясь с кодом elmen.dpr можно было увидеть, что данное поле используется исключительно для сортировки элементов внутри вкладки. Поэтому основное ограничение тут - это избежание ситуаций, когда два элемента на ожной вкладке имеют одинаковое значение pos. При удаление элемента ничего декрементировать не надо: какой в этом смысл ![]()
|
|||
карма: 27 |
|
Ответов: 262
Рейтинг: 6
|
|||
Dilma, Сейчас я сделал процедуры для elmen.dll
procedure MoveEl(id: pchar; nPos:Integer); procedure MoveTab(name: pchar; nPos:Integer); перемещают элемент и вкладку на указанную позицию. И процедуры для hitools.dll: procedure ShiftTab(name, fdir:pchar; ShiftPos:Integer); procedure ShiftEl(ElId, fdir:pchar; ShiftPos:Integer); ShiftPos знаком указывает направление сдвига. В принципе сделать из двух четыре процедуры несложно. [size=-2]------ Добавлено в 15:18 Dilma писал(а): При удаление элемента ничего декрементировать не надо: какой в этом смысла как тогда разрулить ситуацию: pos=1,2,3,4,5,6 удалили 3 и 4 получили pos=1,2,5,6. Теперь необходимо сдвинуть 5 на одну позицию вверх. т.е 5-1=4? или 5-х=2. Получаются лишнии проверки и запросы к базе на поиск предыдущего. Разумней следить за соблюдением неразрывности значений позиций при удалении и перемещении. |
|||
карма: 0 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Разумнее сделать процедуру с указанием какие конкретно позиции нужно обменять, тогда можно обойтись и одним update:
|
|||
карма: 1 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Я представляю себе интерфейс менеджера по изменению позиции компонент как некоторый список с двумя кнопками "Сдвинуть вверх" и "Сдвинуть вниз". При таком интерфейсе задачи поменять два элемента местами нет, как нет тут необходимости в знание позиций этих элементов в числах. А раз так, то и заботится о внутренней структуре БД при согласование интерфейса смысла не имеет.
|
|||
карма: 27 |
|
Ответов: 262
Рейтинг: 6
|
|||
Dilma, абсолютно согласен на счет двух кнопок. по порядку.
1. После выбора пользователем комманды "Сдвинуть вниз", среда возвращает плагину комманду(el_MoveToDown) и имя элемента через точку _var_Desktop (Hub:например). 2. Плагин через _work_doMoveToDown обертки вызывает процедуру hiTools.dll - ShiftEl('hub','delphi',1) 3. ShiftEl пользуясь процедурами из elmen.dll a. откроет базу б. получит Pos Huba (1) по его имени в. получит Pos элемента стоящего после него. (2) г. все таки видимо вызовет процедуру которая обменяет значение Pos этих элементов. Нельзя же просто Pos Hub-а приравнять 2. Получиться два элемента с одинаковим значением Pos. д. закроет базу. PS: Я думаю названия процедур не принципиальны ![]() |
|||
карма: 0 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Да именно так и будет.
|
|||
карма: 27 |
|