Форум: "Основная";
Текущий архив: 2003.11.03;
Скачать: [xml.tar.bz2];
ВнизСохранение и загрузка свойств компонента, содержащего другие объе Найти похожие ветки
← →
Raduga (2003-10-23 08:36) [0]Здравствуйте, Мастера.
Столкнулся со следующей проблемой.
Есть свой компонент, наследник от Twincontrol. У него есть private поле, содержащее объект TImage (объект постоянный, содержит рисунок, не изменяется пользователем). Как сохранить(а главное загрузить потом) компонент из потока. Имеется ввиду, что пользователь изменяет свойства в run-time.
И вообще как сохранять и загружать компонент,содержащий внутри сябя другие объекты, из потока ?
← →
icWasya (2003-10-23 09:32) [1]ну тут так - если есть свойство - наследник TPersistent, то такое свойство должно сохраняться автоматически. НО!!! если свойство - наследник TComponent, то Дельфя предполагает, что это ссылка на другой компонент, и сохраняется только его имя.
> И вообще как ....
Переписать компонент так, что бы наружу не были видны такие свойства типа TComponent. В данном случае - вытащить в Published дополнительные свойства - например ImageWidth, ImageHeight, ImagePicture ... что там ещё? и через них устанавливать свойства встроенного Image.
← →
Raduga (2003-10-23 09:42) [2]Поле-объект "наружу" не выходит.
Проблема возникает при загрузке компонента из файла, в котором я компонент сохраняю.
← →
REA (2003-10-23 10:22) [3]См. GetChildren
← →
Raduga (2003-10-23 11:06) [4]Но у меня же поле типа TImage не является published
← →
icWasya (2003-10-23 11:18) [5]ну а если поле приватное, то каким образом оно создаётся/заполняется ???
← →
FOX (2003-10-23 11:30) [6]Смотри DefineProperty
← →
Raduga (2003-10-23 11:39) [7]>icWasya © (23.10.03 11:18) [5]
Создается в конструкторе и заполняется тамже
← →
Smithson (2003-10-23 11:50) [8]Тогда зачем тебе его гонять из файла в файл, если он не меняети его содержимое известно? После загрузки из файла создавай его и все...
← →
Raduga (2003-10-23 12:10) [9]>Smithson © (23.10.03 11:50) [8]
Остальные свойства меняются зато...
Например высота и ширина компонента.
← →
icWasya (2003-10-23 13:06) [10]>[9]
тогда смотри [1]
← →
Raduga (2003-10-23 13:28) [11]>icWasya © (23.10.03 13:06) [10]
Меняются публикуемые свойства моего компонента, который содержит имадж с картинкой.Эти свойства не имаджа.Имадж не меняется, на него не ссылается ни одно из свойств из секции паблишет.
← →
Raduga (2003-10-23 13:30) [12]Вопрос по другому.
Как сохранить и восстановить только публикуемые свойства?
← →
Polevi (2003-10-23 13:37) [13]WriteComponent, ReadComponent
← →
Raduga (2003-10-23 13:44) [14]>Polevi © (23.10.03 13:37) [13]
Использую, но мне не ясно почему нужно дополнительно регистрировать класс TImage, если эти методы предназначены только для публикуемых свойств
← →
icWasya (2003-10-23 13:56) [15]>[11]
ну так сделай
type
TMyComponent =class(TWinControl)
private
Image:TImage;
function GetImageWidth:Integer;
procedure SetImageWidth(Value:Integer);
......
published
property ImageWidth:Integer read GetImage wirte SetImage;
...
end;
...
function TMyComponent.GetImageWidth:Integer;
begin
Result:=Image.Width
end;
procedure TMyComponent.SetImageWidth(Value:Integer);
begin
Image.Width:=Value;
Ivalidate;
end;
...
а вообще о чём вопрос ?
о встроенном Image или о других каких свойствах ?
← →
Raduga (2003-10-23 14:15) [16]>icWasya © (23.10.03 13:56) [15]
>о встроенном Image или о других каких свойствах ?
О других свойствах, свойствах самого компонента, никакого отношения к имадж не имеющих. А имадж был приватным полем в компоненте. Не ясно было, почему используюя методы ReadComponent, для загрузки свойств компанента
вылетало сообщение что класс TImage не зарегистрирован. Ведь должны были грузится только значения паблишет свойств.
Но здесь мой косячок...:)
Я создавал поле-объект имадж в конструкторе моего компанента, а в качестве владельца указывал свой компанент. Вот здесь и была
собачка зарыта. :)
Еще раз всем огромное спасибо.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.11.03;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c