Конференция "Компоненты" » Програмно открыть редактор TCollectionItems [D7, WinXP]
 
  • ancot (05.05.08 17:28) [0]
    Всем доброго дня!
    Проблема в следующем:
    Есть компонент (наследник TComponent) у него есть свойство наследуемое от (TCollectionItems). Никак не могу сделать чтобы в DesignTime при щелчке по компоненту открывался список Item-ов , (так как при нажати кнопки с троеточием у свойства).
    Для начала я так понимаю надо зарегистрировать ComponentEditor для компонента, переопредилить в нем метод Edit. Но как открыть список Item-ов?
  • Olegz77 © (05.05.08 21:58) [1]
    В теме написано "программно", в тексте - "в Design Time". Чего надо то??? Про использование коллекций в компонентах есть хорошая статья Юрия Зотова на сайте королевства: http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=215
  • Olegz77 © (05.05.08 22:03) [2]
    Тьфу ты, я не так понял. Сорри. Попробуй вызвать в методе Edit: Designer.SelectComponent(ссылка на объект-коллекцию)
  • Olegz77 © (05.05.08 22:36) [3]
    Вот еще здесь почитай: http://pda.delphimaster.net/?n=12&id=1174055007&p=1
  • Юрий Зотов © (06.05.08 10:47) [4]

    TMyCompEditor = class(TComponentEditor)
     private
       FPropInfo: PPropInfo;
       FPropEdit: IProperty;
       procedure GetPropProc(const PropEdit: IProperty);
     public
       constructor Create(AComponent: TComponent; ADesigner: IDesigner); override;
       procedure ExecuteVerb(Index: Integer); override;
       function GetVerb(Index: Integer): string; override;
       function GetVerbCount: Integer; override;
     end;

    procedure Register;
    begin
     RegisterComponents('YzExamples', [TMyComp]);
     RegisterComponentEditor(TMyComp, TMyCompEditor)
    end;

    { TMyCompEditor }

    constructor TMyCompEditor.Create(AComponent: TComponent; ADesigner: IDesigner);
    begin
     inherited;
     FPropInfo := GetPropInfo(GetComponent.ClassInfo, 'MyItems', [tkClass])
    end;

    procedure TMyCompEditor.ExecuteVerb(Index: Integer);
    var
     Selections: TDesignerSelections;
    begin
     if Index = GetVerbCount - 1 then
     begin
       if (FPropEdit = nil) and (FPropInfo <> nil) then
       begin
         Selections := TDesignerSelections.Create;
         try
           Designer.GetSelections(Selections);
           GetComponentProperties(Selections, [tkClass], Designer, GetPropProc)
         finally
           Selections.Free
         end
       end;
       if FPropEdit <> nil then
         FPropEdit.Edit
     end
     else
       inherited
    end;

    procedure TMyCompEditor.GetPropProc(const PropEdit: IProperty);
    begin
     if PropEdit.GetPropInfo = FPropInfo then
       FPropEdit := PropEdit
    end;

    function TMyCompEditor.GetVerb(Index: Integer): string;
    begin
     if Index = GetVerbCount - 1 then
       Result := 'MyItems Editor...'
     else
       Result := inherited GetVerb(Index)
    end;

    function TMyCompEditor.GetVerbCount: Integer;
    begin
     Result := inherited GetVerbCount + 1
    end;

 
Конференция "Компоненты" » Програмно открыть редактор TCollectionItems [D7, WinXP]
Есть новые Нет новых   [134464   +62][b:0][p:0.002]