Delphi IDE, компилятор, отладчик, редактор
Скажем, вы имеете компонент TContainer, содержащий TContainedClass в свойстве с именем 'Contained' - попробуйте добавить следующую строку к процедуре Register вашего компонента:
| 
 Code:  | 
| 
 RegisterPropertyEditor(TypeInfo(TContainedClass), TContainer, 'Contained', TClassProperty);  | 
- Подробности
 - Родительская категория: Delphi IDE, компиллятор, отладчик, редактор
 - Категория: Работа с ToolsAPI (Эксперты и редакторы свойств)
 
Редактор свойства, пример которого приведен ниже, имеет ограничение на устанавливаемые цвета: только clRed, clWhite или clBlue.
- Подробности
 - Родительская категория: Delphi IDE, компиллятор, отладчик, редактор
 - Категория: Работа с ToolsAPI (Эксперты и редакторы свойств)
 
Предупреждение: Окно CPU еще до конца не оттестировано и может иногда приводить к ошибкам. Если у вас есть проблемы с отладчиком, или при запуске вашей программы вы не можете им воспользоваться, окно CPU может помочь решить ваши проблемы. Обычно его не требуется включать, если только у вас не "особый случай".
В Delphi 2 эта характеристика встроена, но по умолчанию выключена, называется это окно CPU window, или DisassemblyView. Она легка в использовании, может быть полезной в отладке и сравнении кода при его оптимизации.
Для активизации этой характеристики, запустите REGEDIT и отредактируйте регистры описанным ниже образом. Найдите ключ HKEY_CURRENT_USER\Software\Borland\Delphi\2.0\Debugging. Создайте по этому пути строковый ключ с именем "ENABLECPU". Значение нового ключа должно быть строкой "1". Это все. Теперь в Delphi IDE появился новый пункт меню View|CPUWindow. При его активизации выводится новое окно.
- Подробности
 - Родительская категория: Delphi IDE, компиллятор, отладчик, редактор
 - Категория: Среда Дэлфи
 
Давайтерассмотримсозданиепростейшегоодноуровневогоконтекстногоменюнасвоемкомпоненте, котороебудетоткрыватьсяприщелчкеправойкнопкойпонемувсамомверхуконтекстногоменю Delphi.
Преждевсеговамследуетразделитькодвашегокомпонентана Design-time и Run-time. Дляэтогоперенеситевашкомпонентвмодуль, сназванием, например, MyComponent.pas, апроцедурырегистрацииеговпалитрекомпонентов (procedure Register ит.д.) вмодуль, сназванием, например, MyComponentReg. Натакиемерыприходитсяидтииз-затого, что Borland невключилависходныекодыисходникфайла Proxies.pas.
Итак, получимдвафайла:
MyComponent.pas:
| 
 Code:  | 
| 
 unit MyComponent; 
 interface 
 uses SysUtils, Classes; 
 type TMyComponent = class(TComponent) private { Private declarations } protected { Protected declarations } public { Public declarations } published { Published declarations } end;  | 
- Подробности
 - Родительская категория: Delphi IDE, компиллятор, отладчик, редактор
 - Категория: Работа с ToolsAPI (Эксперты и редакторы свойств)
 
Горячие клавиши в окне редактора
| 
 F1  | 
 контекстная помощь  | 
| 
 F3  | 
 продолжить поиск (начать - Ctrl+F )  | 
| 
 F4  | 
 выполнить программу до положения курсора  | 
| 
 F5  | 
 поставить Break Point  | 
| 
 F7  | 
 трассировать с заходом в процедуры  | 
| 
 F8  | 
 трассировать без захода в процедуры  | 
| 
 F9  | 
 запустить программу  | 
| 
 F10  | 
 активизировать главное меню  | 
| 
 F11  | 
 открыть/закрыть Object Inspector  | 
| 
 F12  | 
 переход между формой и кодом  | 
| 
 Ctrl-F1  | 
 контекстная помощь  | 
| 
 Ctrl-F2  | 
 прервать выполнение программы  | 
| 
 Ctrl-F3  | 
 посмотреть стек  | 
| 
 Ctrl-F4  | 
 закрыть текущий модуль  | 
| 
 Ctrl-F5  | 
 список переменных для просмотра (Watch List)  | 
| 
 Ctrl-F7  | 
 просмотр значений переменных и их изменение  | 
| 
 Ctrl-F9  | 
 компилировать проект  | 
| 
 Ctrl-F10  | 
 активизировать главное меню  | 
| 
 Ctrl-F11  | 
 открыть проект  | 
| 
 Ctrl-F12  | 
 список модулей проекта  | 
| 
 Shift-F7  | 
 трассировка заходя в каждую процедуру и перескакивание в каждое возникающее событие  | 
| 
 Shift-F10  | 
 всплывающее меню  | 
| 
 Shift-F11  | 
 добавить модуль к проекту  | 
| 
 Shift-F12  | 
 список форм проекта для быстрой навигации  | 
| 
 Alt-F4  | 
 закрыть проект и все файлы  | 
| 
 Alt-F6  | 
 переключение окон  | 
| 
 Alt-F8  | 
 переход к следующей ошибке компиляции  | 
| 
 Alt-F7  | 
 переход к предыдущей ошибке компиляции  | 
| 
 Ctrl-Shift-F4  | 
 закрыть проект и все файлы  | 
| 
 Alt-Ctrl-F11  | 
 менеджер проектов  | 
| 
 Alt-Shift-F4  | 
 закрыть все окна, но проект не закрывать  | 
| 
 Ctrl-Shift-0..9  | 
 поставить метку 0..9  | 
| 
 Ctrl-0..9  | 
 перейти на метку 0..9  | 
| 
 Alt-0  | 
 список окон  | 
| 
 Ctrl-Enter  | 
 открыть файл с именем слова на котором курсор стоит  | 
| 
 Ctrl+клик мышкой на слове  | 
 перейти на определение этого слова  | 
| 
 Alt+выделение текста (мышкой или клавиатурой)  | 
 выделение вертикального блока  | 
| 
 Ctrl+Shift+Up Ctrl+Shift+Down  | 
 переход от объявления процедуры к ее реализации  | 
| 
 Ctrl-Shift-C  | 
 закончить метод (если он описан - создать шаблон для реализации,если есть реализация - объявить метод)  | 
| 
 Ctrl+Space  | 
 высветить список методов, свойств объекта (после точки)  | 
| 
 Ctrl+Shift+Space  | 
 высветить список параметров функции  | 
| 
 Ctrl-Shift-E  | 
 открыть эксплорер кода  | 
| 
 Ctrl-Shift-R  | 
 начать/завершить запись макро  | 
| 
 Ctrl-Shift-P  | 
 выполнить записанное макро  | 
| 
 Ctrl-Shift-T  | 
 добавить в To Do лист  | 
| 
 Ctrl-Shift-U  | 
 уменьшить отступ выделенного блока  | 
| 
 Ctrl-Shift-I  | 
 увеличить отступ выделенного блока  | 
| 
 Ctrl-Shift-S  | 
 сохранить как  | 
| 
 Ctrl-Shift-G  | 
 вставить GUID  | 
| 
 Ctrl-Shift-B  | 
 посмотреть иерархию классов  | 
| 
 Ctrl+Shift+Y  | 
 удалить от курсора до конца строки  | 
| 
 Ctrl+Shift+Z  | 
 redo  | 
| 
 Ctrl-Alt-W  | 
 watch List  | 
| 
 Ctrl-Alt-R  | 
 grep result  | 
| 
 Ctrl-Alt-T  | 
 список потоков проекта  | 
| 
 Ctrl-Alt-A  | 
 вставить дату  | 
| 
 Ctrl-Alt-S  | 
 вызовы стека  | 
| 
 Ctrl-Alt-H  | 
 шаблон для документации модуля  | 
| 
 Ctrl-Alt-L  | 
 локальные переменные  | 
| 
 Ctrl-Alt-V  | 
 история событий  | 
| 
 Ctrl-Alt-B  | 
 список Break Points  | 
| 
 Ctrl-Alt-M  | 
 Модули  | 
| 
 Ctrl-N  | 
 вставить пустую строку, курсор остается на текущей строке  | 
| 
 Ctrl-M Enter  | 
 вставить пустую строку, курсор переходит на следующую строку  | 
| 
 Ctrl-E  | 
 поиск по мере введения символов (Incremental Search)  | 
| 
 Ctrl-R  | 
 поиск и замена  | 
| 
 Ctrl-A  | 
 выделить весь текст (только Дельфи 6+)  | 
| 
 Ctrl-T  | 
 удалить от курсора до конца слова  | 
| 
 Ctrl-Y  | 
 удалить строку  | 
| 
 Ctrl-O, O  | 
 вставить все текущие опции компиляции по позиции курсора  | 
| 
 Ctrl+O, C  | 
 marks a column block  | 
| 
 Ctrl+O, I  | 
 marks an inclusive block  | 
| 
 Ctrl+O, K  | 
 marks a non-inclusive block (default when the editor starts)  | 
| 
 Ctrl+O, L  | 
 marks a line as a block  | 
| 
 Ctrl-P  | 
 префикс, после которого можно вставить любой ASCII код  | 
| 
 Ctrl-S  | 
 сохранить текущий файл  | 
| 
 Ctrl-F  | 
 открыть диалог поиска  | 
| 
 Ctrl-J  | 
 лист шаблонов  | 
| 
 Ctrl-K, С  | 
 копирование блока без буфера обмена  | 
| 
 Ctrl-Z  | 
 отмена  | 
| 
 Ctrl-X  | 
 вырезать  | 
| 
 Ctrl-С  | 
 копировать  | 
| 
 Ctrl-V  | 
 вставить  | 
| 
 Ctrl-B  | 
 список буферов  | 
| 
 Ctrl+K, R  | 
 читать блок из файла  | 
| 
 Ctrl+K, W  | 
 записать блок в файл  | 
| 
 Ctrl+O, U  | 
 изменить регистр букв в блоке на противоположный  | 
| 
 Ctrl+O, A  | 
 диалог: "открыть файл"  | 
| 
 Ctrl+O, G  | 
 переход к строке номер...  | 
| 
 Ctrl+K, E  | 
 перевод слова в нижний регистр  | 
| 
 Ctrl+K, T  | 
 выделить слово  | 
| 
 Ctrl+K, Y  | 
 удалить выделенный блок  | 
| 
 Ctrl+K, U  | 
 unindent block  | 
| 
 Ctrl+K, I  | 
 indent block  | 
| 
 Ctrl+K, P  | 
 печать текста  | 
| 
 Ctrl+K, F  | 
 перевод слова в вверхний регистр  | 
| 
 Alt+[ Alt+]  | 
 найти соответствующую скобку  | 
| 
 Ctrl+Q, P  | 
 вернуть курсор на место последнего редактирования  | 
- Подробности
 - Родительская категория: Delphi IDE, компиллятор, отладчик, редактор
 - Категория: Среда Дэлфи
 
Если вы присвоили свойству имя TableName, то полный цикл создания редактора свойств включает следующие шаги:
Опишите класс редактора свойства:
| 
 Code:  | 
| 
 type TTableNameProperty = class(TStringProperty) function GetAttributes: TPropertyAttributes; override; procedure GetValues(Proc: TGetStrProc); override; end; 
 implementation 
 { TTableNameProperty } function TTableNameProperty.GetAttributes: TPropertyAttributes; begin Result := [paValueList]; end; 
 procedure TTableNameProperty.GetValues(Proc: TGetStrProc); var TableName: String; I: Integer; begin { здесь вы должны добавить свой код, ?тобы с помощью цикла обойти имена всех таблиц, включенных в список } for I := 0to ???? do begin TableName := ????[I]; Proc(TableName); end; end;  | 
Затем зарегистрируйте данный редактор свойства следующим образом:
| 
 Code:  | 
| 
 RegisterPropertyEditor(TypeInfo(string), TcsNotebook, 'TableName', TTableNameProperty);  | 
- Подробности
 - Родительская категория: Delphi IDE, компиллятор, отладчик, редактор
 - Категория: Работа с ToolsAPI (Эксперты и редакторы свойств)
 
Командной строкой:
Delphi32.EXE -ns
- Подробности
 - Родительская категория: Delphi IDE, компиллятор, отладчик, редактор
 - Категория: Среда Дэлфи
 
Компонент во время проектирования может знать имена текущих модулей и имя проекта. Все это можно получить с помощью ToolServices (см. файл TOOLINTF.PAS)
Имя текущего проекта можно получить с помощью вызова GetProjectName, список модулей/форм - с помощью функции GetUnitCount, которая возвратит количество модулей и затем с помощью GetUnitName(i) мы можем получить имя каждого модуля (также и с формами).
Вот примерный образец кода (получение и запись имен всех модулей/форм в StringGrid и имени проекта в Label):
| 
 Code:  | 
| 
 procedure TInformationFrm.FormActivate(Sender: TObject); { необходимо: StringGrid1 (2 колонки, масса строк), Label1, Label2 } var i, j: Integer; Tmp: string; begin StringGrid1.Cells[0, 0] := 'модулей:'; StringGrid1.Cells[1, 0] := 'форм:'; if ToolServices <> nilthen with ToolServices do begin Label1.Caption := ExtractFileName(GetProjectName); { простое имя } Label2.Caption := GetProjectName; { полное правильное имя пути } for i := 0to GetUnitCount do begin Tmp := ExtractFileName(GetUnitName(i)); StringGrid1.Cells[0, i + 1] := Tmp; Tmp := ChangeFileExt(Tmp, '.DFM'); for j := 0to GetFormCount do if ExtractFileName(GetFormName(j)) = Tmp then StringGrid1.Cells[1, i + 1] := Tmp end; end; end;  | 
- Подробности
 - Родительская категория: Delphi IDE, компиллятор, отладчик, редактор
 - Категория: Работа с ToolsAPI (Эксперты и редакторы свойств)
 
Командной строкой: Delphi32.exe -np
- Подробности
 - Родительская категория: Delphi IDE, компиллятор, отладчик, редактор
 - Категория: Среда Дэлфи
 
Эксперты в DELPHI, илиПрограммист, упроститесебежизнь
Имеющее множество достоинств и довольно популярное средство разработки Delphi позволяет расширять функциональные возможности среды разработчика. Речь идет не о косметических изменениях в интерфейсе и не о добавлении компонентов или их наборов, а о придании рабочему окружению программиста новых полезных возможностей, не предусмотренных его создателями. Для решения подобной задачи в Delphi можно воспользоваться так называемыми экспертами. Вспомните, как удобно, ответив на несколько вопросов, создать готовую форму для вывода содержимого таблиц. Или, щелкнув мышью на нужном элементе в списке New Items, получить “костяк” вашего будущего проекта (рис. 1).

Рис. 1. Многиевозможности Delphi реализуютсяспомощьюэкспертов
Чтоэто—стандартныевозможностирабочейсреды? Да, ноприменитьихможнолишьспомощьюэксперта. Отом, какэтосделать, ипойдетречьдалее.
Экспертыв Delphi —чтоэтотакое?
- Подробности
 - Родительская категория: Delphi IDE, компиллятор, отладчик, редактор
 - Категория: Работа с ToolsAPI (Эксперты и редакторы свойств)
 
HKEY_CURRENT_USER\Software\Borland\Delphi\4.0\Debugging
ViewCPUOnException=0
- Подробности
 - Родительская категория: Delphi IDE, компиллятор, отладчик, редактор
 - Категория: Среда Дэлфи
 
Страница 5 из 6