:: MVP ::
|
|
:: RSS ::
|
|
|
В настоящее время в сети можно встретить большое количество экспертов для Delphi, которые значительно расширяют функциональные
возможности среды разработки, и как следствие – делают нашу работу более комфортной. Но эксперты не в состоянии удовлетворить
все наши потребности, как быть, если эксперта с нужным функционалом найти не удалось, а писать свой ради одной функции не
хочется, или если не хочется ставить эксперт ради одной функции, которой вы реально собираетесь пользоваться? Посмотрим.
Delphi позволяет нам расширять пункт меню Tools, добавляя в него свои подпункты. Конечно, возможности такого подхода очень
ограничены, но назвать эту возможность бесполезной и игнорировать ее все-таки не стоит.
В качестве первого примера возьмем задачу – открыть в проводнике Windows каталог, в котором находится открытый в данный момент
модуль и выделить его (например, для того, чтобы переслать его другу). К слову эксперт CnPack решает эту задачу, после его
установки достаточно кликнуть правой кнопкой мыши по вкладке с нужным модулем и выбрать пункт “Открыть “имя_модуля.pas” в
Проводнике Windows” (если для CnPack выбран язык, отличный от русского, название естественно будет иным). В последних версиях
Delphi (я случайно обнаружил это в Delphi XE) это можно сделать комбинацией клавиш Crtl+\. Но у нас Delphi 5/6/7, и мы не хотим
ради этого ставить эксперт. Сделаем это сами!
В меню Tools выбираем “Configure Tools...” и заполняем пустые поля
// Title: Заголовок пункта меню
Open unit folder
// Programm: файл, который будем запускать
explorer.exe
// Working directory: директория, в которой находится файл.
// Если файл находится в одной из директорий, прописанных в системной переменной PATH, поле можно оставить пустым
// Parametrs: Параметры для запускаемого файла
select, $EDNAME
|
$EDNAME – модуль, открытый в данный момент в Delphi (полный список макросов вы можете увидеть, нажав на кнопку Macro).
Второй, не менее интересный пример – включение/выключение недокументированной возможности Code Insight, а именно авто
завершение функций и изменение поведения всплывающей подсказки.
Стандартный вид Code Insight в старых версиях Delphi (как минимум до BDS 2006) выглядит следующим образом:
Стандартная подсказка с информацией о количестве параметров функции и их типах. Что же тут можно изменить,
чего добиться? А добиться можно того, что все параметры будут подставляются в процедуру/функцию автоматически,
и вместе с этим изменится механизм навигации по ним.
Для того чтобы этого добиться, достаточно немного изменить системный реестр. В зависимости от версии Delphi путь в
реестре будет разным, для BDS 2006 – “HKCU\Software\Borland\BDS\4.0\Code Insight”, а для RAD Studio XE2 –
“HKCU\Software\Embarcadero\BDS\9.0\Code Insight”. По нужному нам адресу надо создать строковый параметр
“Sync Edit Params” со значением “1”.
Создадим в меню Tools соответствующие пункты для включения/выключения этой возможности.
// Включение недокументированной возможности
// Title:
Auto Complete Param - On
// Programm:
REG
// Working directory:
// Parametrs:
ADD "HKCU\Software\Embarcadero\BDS\9.0\Code Insight" /v "Sync Edit Params" /t REG_SZ /d "1" /f
// Выключение недокументированной возможности
// Title:
Auto Complete Param - Off
// Programm:
REG
// Working directory:
// Parametrs:
DELETE "HKCU\Software\Embarcadero\BDS\9.0\Code Insight" /v "Sync Edit Params" /f
|
Значения ключей смотрите в командной строке – reg /?.
Пару слов об этой возможности. Автозаполнение работает одинаково и BDS 2006, и в XE/XE2. А вот поведение хинта меняется
из-за наличия в BDS 2006 ключа → →
→ →
– , который позволяет вести навигацию по только
что созданным параметрам. В RAD Studio XE/XE2 такого ключа уже нет.
Кроме того удручает пара неприятных моментов:
- (для BDS 2006) если навести указатель на один из параметров, то одновременно повыскакивают все подсказки, какие только
возможно, и частично могут перекрыть друг друга (хотя проявляется это не на всех компьютерах).
- автогенератор облажается в случае, если в процедуре/функции имеется необязательный параметр.
Допустим есть процедура:
procedure TestFunc( S: String; V: Variant; const Rq: array of const; B: boolean = False );
begin
end;
|
Автогенератор вставит следующий код:
Этот баг присутствует в Delphi начиная с BDS 2006 и по сей день (вплоть до RAD Stedio XE2).
А у меня на этом все, всем удачи!
|
При использовании материала - ссылка на сайт обязательна
|
|