Заметки
Наращивание функциональных возможностей Delphi

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: 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 ключа ToolsOptionsEditor OptionsCode InsightAuto CompleteTemplate, который позволяет вести навигацию по только что созданным параметрам. В RAD Studio XE/XE2 такого ключа уже нет.

Кроме того удручает пара неприятных моментов:
  1. (для BDS 2006) если навести указатель на один из параметров, то одновременно повыскакивают все подсказки, какие только возможно, и частично могут перекрыть друг друга (хотя проявляется это не на всех компьютерах).
  2. автогенератор облажается в случае, если в процедуре/функции имеется необязательный параметр.
Допустим есть процедура:

procedure TestFunc( S: String; V: Variant; const Rq: array of const; B: boolean = False );
begin

end;

Автогенератор вставит следующий код:

TestFunc(S, V, Rq, [B);

Этот баг присутствует в Delphi начиная с BDS 2006 и по сей день (вплоть до RAD Stedio XE2). А у меня на этом все, всем удачи!

При использовании материала - ссылка на сайт обязательна