На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Обязательно выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Этот раздел предназначен для вопросов, посвященных разработке компонентов, а также для тестирования собственных бесплатных компонентов с открытым исходным кодом.

Здесь запрещается:
1. Размещать ссылки на какие-либо коммерческие компоненты, реализующие требуемую функциональность.
2. Обсуждать и тестировать коммерческие компоненты или компоненты с закрытым кодом.
3. Давать ссылки на сайты с исходным кодом компонентов. Все тестируемые исходные коды должы быть размещены на сайте ИСХОДНИКИ.RU.
Модераторы: Rouse_, DimaBr
  
> Как сделать свойство компонента наподобие TColor
    Только начинаю постигать азы разработки компонентов и возник такой вопрос:
    есть набор констант:

    ExpandedWrap disabled
      xlWBATChart = -4109;
      xlWBATExcel4IntlMacroSheet = 4;
      xlWBATExcel4MacroSheet = 3;
      xlWBATWorksheet = -4167;


    Надо сделать так, чтобы в дизайн-тайме у компонента появлялся в свойствах список с этими константами. Посмотрел как это примерно делается с TColor:
    ExpandedWrap disabled
      type
      {$IF NOT DEFINED(CLR)}
        PColor = ^TColor;
      {$IFEND}
        TColor = -$7FFFFFFF-1..$7FFFFFFF;
       
      {$IF NOT DEFINED(CLR)}
        {$NODEFINE TColor}
        {$OBJTYPENAME TColor 'NTColor'}
       
        (*$HPPEMIT 'namespace Graphics'*)
        (*$HPPEMIT '{'*)
        (*$HPPEMIT '  enum TColor {clMin=-0x7fffffff-1, clMax=0x7fffffff};'*)
        (*$HPPEMIT '}'*)
      {$IFEND}
       
       
      const
        clSystemColor = $FF000000;
       
        clScrollBar = TColor(clSystemColor or COLOR_SCROLLBAR);
        clBackground = TColor(clSystemColor or COLOR_BACKGROUND);
        clActiveCaption = TColor(clSystemColor or COLOR_ACTIVECAPTION);
        clInactiveCaption = TColor(clSystemColor or COLOR_INACTIVECAPTION);
        clMenu = TColor(clSystemColor or COLOR_MENU);


    Попробовал реализовать у себя:
    type
    TWBTemplate = -4167 .. 4;

    const
    xlWBATChart = TWBTemplate(-4109);
    xlWBATExcel4IntlMacroSheet = TWBTemplate(4);
    xlWBATExcel4MacroSheet = TWBTemplate(3);
    xlWBATWorksheet = TWBTemplate(-4167);

    В инспекторе появилось новое свойство, но просто как числовое значение, а не комбобокс со списков констант. Подскажите плз как сделать свойство со списком
      не уверен но все же

      может так
      ExpandedWrap disabled
        type
        TWBTemplate = (xlWBATChart = -4109, xlWBATExcel4IntlMacroSheet = 4, xlWBATExcel4MacroSheet = 3, xlWBATWorksheet = -4167)
        Цитата Vlad55 @
        Подскажите плз как сделать свойство со списком

        нужно создать и зарегистрировать редактор свойства, см. например TFontNameProperty/TColorProperty/etc. (VCLEditors)
          ExpandedWrap disabled
            unit Test;
             
            interface
            uses Classes, DesignEditors, DesignIntf;
             
            const
            xlWBATChart = -4109;
            xlWBATExcel4IntlMacroSheet = 4;
            xlWBATExcel4MacroSheet = 3;
            xlWBATWorksheet = -4167;
             
            xlWBAValues: array[0..3] of TIdentMapEntry = (
                (Value: xlWBATChart; Name: 'xlWBATChart'),
                (Value: xlWBATExcel4IntlMacroSheet; Name: 'xlWBATExcel4IntlMacroSheet'),
                (Value: xlWBATExcel4MacroSheet; Name: 'xlWBATExcel4MacroSheet'),
                (Value: xlWBATWorksheet; Name: 'xlWBATWorksheet'));
            type
            TMyComponent = class(TComponent)
              private
                fTest: integer;
              published
                property Test: integer read fTest write fTest;
            end;
             
            TTestPropertyEditor = class(TIntegerProperty)
              public
                function GetAttributes: TPropertyAttributes; override;
                function GetValue: string; override;
                procedure GetValues(Proc: TGetStrProc); override;
                procedure SetValue(const Value: string); override;
            end;
             
            procedure Register;
             
            implementation
             
            procedure Register;
            begin
              RegisterComponents('Standard', [TMyComponent]);
              RegisterPropertyEditor(TypeInfo(integer),TMyComponent,'Test',TTestPropertyEditor);
            end;
             
            { TTestPropertyEditor }
             
             
            function TTestPropertyEditor.GetAttributes: TPropertyAttributes;
            begin
              Result := [paMultiSelect, paValueList, paRevertable];
            end;
             
            function TTestPropertyEditor.GetValue: string;
            var i: integer;
            begin
              Result := '';
              for I := Low(xlWBAValues) to High(xlWBAValues) do
                if xlWBAValues[I].Value = GetOrdValue then begin
                  Result := xlWBAValues[I].Name;
                  Break;
                end;
            end;
             
            procedure TTestPropertyEditor.GetValues(Proc: TGetStrProc);
            var I: Integer;
            begin
              for I := Low(xlWBAValues) to High(xlWBAValues) do Proc(xlWBAValues[I].Name);
            end;
             
            procedure TTestPropertyEditor.SetValue(const Value: string);
            var i: integer;
            begin
              for I := Low(xlWBAValues) to High(xlWBAValues) do
                if xlWBAValues[I].Name = Value then begin
                  SetOrdValue(xlWBAValues[I].Value);
                  Exit;
                end;
              inherited SetValue(Value);
            end;
             
            end.
            Спасибо большое, всем кто откликнулся. Вопрос решен :)
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0268 ]   [ 16 queries used ]   [ Generated: 27.04.24, 16:40 GMT ]