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

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

Здесь запрещается:
1. Размещать ссылки на какие-либо коммерческие компоненты, реализующие требуемую функциональность.
2. Обсуждать и тестировать коммерческие компоненты или компоненты с закрытым кодом.
3. Давать ссылки на сайты с исходным кодом компонентов. Все тестируемые исходные коды должы быть размещены на сайте ИСХОДНИКИ.RU.
Модераторы: Rouse_, DimaBr
  
> Свой TDriveBoxEx на основе TComboBoxEx
    Помогите плз. Я хочу написать свой TDriveBoxEx на основе TComboBoxEx. Насколько я понял там нужно новые классы составлять на основе TComboExItem, TComboExItems, TComboBoxExStrings. Вообщем компонент в каком-то смысле работает, но в любом случае ошибка появляется. Может кто знает как компоненты на основе TComboBoxEx составлять?
      Наследуйся от TCustomComboBoxEx и перекрывай нужные тебе методы...
        Мне нужны скорее не методы, а свойства. Вообщем у меня что-то получилось, только ошибка постоянно вылазиет при открытии списка.
        Прикреплённый файлПрикреплённый файлDriveComboBoxEx.rar (1.35 Кбайт, скачиваний: 170)
          Посидели мы с Jack128 на пару и нашли ошибку.
          В конструкторе TCustomComboBoxEx есть такая строка:
          ExpandedWrap disabled
            Items := TComboBoxExStrings.Create(Self);

          Это абсолютно неверный код, так как для определения типа создаваемого класса есть метод

          ExpandedWrap disabled
            function GetItemsClass: TCustomComboBoxStringsClass; override;
          реализация которого в TCustomComboBoxEx выглядит как
          ExpandedWrap disabled
            function TCustomComboBoxEx.GetItemsClass: TCustomComboBoxStringsClass;
            begin
              Result := TComboBoxExStrings;
            end;

          По логике именно его нужно было тебе перекрыть и все заработало, но вся проблема в первой строке, если бы там было вот так:
          ExpandedWrap disabled
            Items := GetItemsClass.Create(Self);
          то все было бы нормально, а так получается что если спустться по коду при добавлении элемента , то мы попадем на сделующий код:
          ExpandedWrap disabled
            function TCollection.Add: TCollectionItem;
            begin
              Result := FItemClass.Create(Self);
              Added(Result);
            end;
          в котором FItemClass равен TComboExItem, а не TDriveItem...

          Добавлено
          Поэтому наследуйся от TCustomCombo и реализуй все правильно...

          Добавлено
          А, ну и последнее, вылет был у тебя на вот этой строчке:
          ExpandedWrap disabled
            FDrive := c;
          .
          Так как TDriveItem не создался, а вместо него создался TComboExItem, то соответственно он и слыхам не слыхивал ни о каком FDrive...
            TCustomCombo - далековато будет. :blink:
            Спасибо и на этом. :)
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0338 ]   [ 17 queries used ]   [ Generated: 16.04.24, 12:35 GMT ]