Форум: "Основная";
Текущий архив: 2004.02.13;
Скачать: [xml.tar.bz2];
ВнизПроблема при создании компонента. Найти похожие ветки
← →
Awod (2004-02-02 13:18) [0]У меня есть написанный компонент на основе TCustomControl. В нём есть published свойство Images : TImageList;
Создаю ещё один компонент. В его состав входит первый. Как сделать так чтобы свойства первого компонента можно было редактировать во втором компоненте (как например Font во многих компонентах) и при этом изменения сохранялись?
← →
Digitman (2004-02-02 13:22) [1]
> В его состав входит первый
здесь - подробней ...
что значит "в состав" ?
← →
Awod (2004-02-02 13:34) [2]TBase1 = class(TCustomControl)
private
FImage : TImageList;
published
property Image : TImageList read Fimage write FImage;
end;
TBase2 = class(TCustomControl)
private
FBase1 : TBase1;
end;
Ессесвенно всё эти классы создаются в конструкторе соответствующих объектов
← →
Digitman (2004-02-02 13:44) [3]все это в design-time требуется ? с использованием инспектора объектов ?
а, собственно, design-time-редактор компонента TBase1 ты уже написал ?
← →
Awod (2004-02-02 13:45) [4]Да в design-time.
Нет. А для чего его писать в данной ситауции?
ЗЫ: я их ни разу не писал, так что мона поподробней? :)
← →
Digitman (2004-02-02 13:53) [5]
> А для чего его писать в данной ситауции?
как это для чего ? ты же сам поставил такую задачу !?
> я их ни разу не писал, так что мона поподробней
Это - к Юрию Зотову
← →
Семен Сорокин (2004-02-02 14:02) [6]2Awod
если я правильно понял, то надо сделать возможность доступа к ImageList, так что тебе мешает сделать published-свойство:
TBase2 = class(TCustomControl)
private
FBase1 : TBase1;
procedure SetBase1(Value: TBase1);
published
property Base1: TBase1 read FBase1 write SetBase1;
end;
← →
Awod (2004-02-02 14:02) [7]Если выложить компонент TBase1 на форму, то свойства сохраняются, а если выложить второй и обявить
published
property Base1 : TBase1 read Base1;
то в редакторе свойств компонента можно выставить свойство Image для Base1, но оно не сохраняется в dfm. То есть для того чтобы оно сохранялось требуется написать редактор свойств для компонента TBase1?
PS: С редактором свойств я разобираюсь.
← →
Awod (2004-02-02 14:06) [8]2"Семен Сорокин"
Если сделать так как ты говоришь, то я смогу выбрать компонент на форме который требуется подключить, но не выставить и сохранить в нём свойства.
← →
yo (2004-02-02 14:22) [9]Попробуй поставить у дочернего компонента флаг csSubcomponent
← →
Awod (2004-02-02 14:40) [10]Получилось!!!
Спб :)
← →
Юрий Зотов (2004-02-02 14:48) [11]> Awod
И еще - такое объявление свойства
property Image : TImageList read Fimage write FImage;
в сочетании с "всё эти классы создаются в конструкторе соответствующих объектов" приведет к утечке памяти при присваивании.
Если же при таком объявлении свойства сделать Image не внутренним компонентом, а ссылкой на внешний компонент, то при его удалении будем получать Access Violation.
Вывод - в любом случае нужен метод SetImage. В первом варианте потребуется еще Assign, а во втором - Notification.
← →
Awod (2004-02-02 15:00) [12]2 Юрий Зотов.
Я не венрно написал. Объект первого класса удаляется в деструкторе второго класса. В первом ImageList не удаляется. Notification используется.
← →
Юрий Зотов (2004-02-02 15:51) [13]> Awod (02.02.04 15:00) [12]
Значит, должно быть так:
property Image : TImageList read Fimage write SetImage;
← →
Awod (2004-02-02 18:46) [14]>Юрий Зотов © (02.02.04 15:51) [13]
Работает также
property Image : TImageList read Fimage;
При этом все свойства можно редактировать
← →
Юрий Зотов (2004-02-02 18:50) [15]> Awod (02.02.04 18:46) [14]
Что-то странное Вы говорите. Image все же в КАКОЙ секции находится? И в TBase1 он создается, или нет?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c