Да, спасибо, уже нашел, по хорошему создаются два юнита, для runtime и для designtime.
Ссыль:
http://stackoverflow.com/questions/14709590/custom-propertyeditors-they-never-seem-to-appearВот то, что у меня заработало, файл регистрации компонента, тут нет runtime кода (Delphi 2010):
Uses
............, DesignIntf, DesignEditors;
//примечание, если не находит их, добавляем в наш .dpk "requires ......, DesignIDE;"
//также тут должен быть подключен ваш runtime юнит.
type
TPTHStringProperty = class(TStringProperty)
public
function GetAttributes: TPropertyAttributes; override;
procedure GetValueList(List: TStrings); virtual; abstract;
procedure GetValues(Proc: TGetStrProc); override;
end;
TPathsProperty = class(TPTHStringProperty)
procedure GetValueList(List: TStrings); override;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('MyComp', [TMyComp]);
RegisterPropertyEditor(TypeInfo(string), TMyComp, 'Paths', TPathsProperty);
// естественно в вашем компоненте должно быть объявлено свойство 'Paths' с типом string.
end;
{ TPTHStringProperty }
function TPTHStringProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paDialog, paValueList, paSortList];
end;
procedure TPTHStringProperty.GetValues(Proc: TGetStrProc);
var
I: Integer;
Values: TStringList;
begin
Values := TStringList.Create;
try
GetValueList(Values);
for I := 0 to Values.Count - 1 do Proc(Values[I]); //этот Proc и выводит то что надо
finally
Values.Free;
end;
end;
{ TPathsProperty }
// тут любым для вас доступным способом получаете тот список, который надо отобразить
procedure TPathsProperty.GetValueList(List: TStrings);
var
F: TIniFile;
begin
try
F:= TIniFile.Create('какой-то файл');
F.ReadSections(List);
finally
F.Free;
end;
end;
Бонус:
В моей задаче сам файл из которого вытягивается список, находиться в папке с самой программой, поэтому в designmode возникли проблемы с получением прямого пути к нему (Application.ExeName или paramstr(0) не работают). Вот решение, для получения пути к вашему проекту из designmode надо:
1. Подключить в uses ToolsAPI.
2. Использовать метод GetActiveProject.FileName.
Вуаля=)