Работа с ToolsAPI (Эксперты и редакторы свойств)
Скажем, вы имеете компонент TContainer, содержащий TContainedClass в свойстве с именем 'Contained' - попробуйте добавить следующую строку к процедуре Register вашего компонента:
Code: |
RegisterPropertyEditor(TypeInfo(TContainedClass), TContainer, 'Contained', TClassProperty); |
- Подробности
- Родительская категория: Delphi IDE, компиллятор, отладчик, редактор
- Категория: Работа с ToolsAPI (Эксперты и редакторы свойств)
Редактор свойства, пример которого приведен ниже, имеет ограничение на устанавливаемые цвета: только clRed, clWhite или clBlue.
- Подробности
- Родительская категория: Delphi IDE, компиллятор, отладчик, редактор
- Категория: Работа с ToolsAPI (Эксперты и редакторы свойств)
Компонент во время проектирования может знать имена текущих модулей и имя проекта. Все это можно получить с помощью 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 (Эксперты и редакторы свойств)
Давайтерассмотримсозданиепростейшегоодноуровневогоконтекстногоменюнасвоемкомпоненте, котороебудетоткрыватьсяприщелчкеправойкнопкойпонемувсамомверхуконтекстногоменю 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 (Эксперты и редакторы свойств)
Эксперты в DELPHI, илиПрограммист, упроститесебежизнь
Имеющее множество достоинств и довольно популярное средство разработки Delphi позволяет расширять функциональные возможности среды разработчика. Речь идет не о косметических изменениях в интерфейсе и не о добавлении компонентов или их наборов, а о придании рабочему окружению программиста новых полезных возможностей, не предусмотренных его создателями. Для решения подобной задачи в Delphi можно воспользоваться так называемыми экспертами. Вспомните, как удобно, ответив на несколько вопросов, создать готовую форму для вывода содержимого таблиц. Или, щелкнув мышью на нужном элементе в списке New Items, получить “костяк” вашего будущего проекта (рис. 1).
Рис. 1. Многиевозможности Delphi реализуютсяспомощьюэкспертов
Чтоэто—стандартныевозможностирабочейсреды? Да, ноприменитьихможнолишьспомощьюэксперта. Отом, какэтосделать, ипойдетречьдалее.
Экспертыв Delphi —чтоэтотакое?
- Подробности
- Родительская категория: Delphi IDE, компиллятор, отладчик, редактор
- Категория: Работа с ToolsAPI (Эксперты и редакторы свойств)
Если вы присвоили свойству имя 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 (Эксперты и редакторы свойств)
Страница 2 из 2