Представим себе такую ситуацию: необходимо динамически создать рисунок
на форме во время выполнения приложения например чтобы на форме появлялся
новый рисунок при каждом нажатии на кнопку.(Это и будет нашим примером).
В принципе ничего сложного нет. Пусть мы создаем объектик с именем image,
для сего мы пишем:
image:=TImage.Create(и у нас просят какой-то AOwner );
И сразу же возникает первый вопрос: Что задавать в качестве параметра
AOwner?
В поле AOwner следует указать компонент, который будет отвечать за уничтожение
нашего компонента.("Вся сущность свойства АOwner в том, что владелец
перед смертью уничтожает (через Free) принадлежащие ему объекты. Таким
образом, все зависит от того, кому вы хотите доверить уничтожение созданных
форм/компонентов. В частности, если вы сами будете этим заниматься,
то AOwner может быть, например, nil.") В нашем случае пусть роль
кровавого убийцы выполнит форма: image:=TImage.Create(Form); Честно
запускаем приложение ... и что - ничего! Естественно: мы не указали
свойство image.parent. Компонент не имеет представление кто его родитель
и честно не рисуется. Ну не будем томить его ожиданием: напишем image.parent:=Form;
Теперь пропишем загрузку какого-нибудь рисуночка и наслаждаемся!
Ну и последний вопросик: как навесить на свежесозданный компонент какой-нибудь
обработчик. Ну очень просто! Определяем простую процедуру-обработчик
(ее синтаксис зависит от типа события), а в родном image пишем:
image.OnClick:=UourProcedure;//Здесь я привел что-то для обработки щелчка.
А здесь я привел тот код, который долгими нашими мучениями выстрадан:
procedure CreateImage(Sender:TObject);
var Image:TImage;
begin
image:TImage.Create(Form);
image.parent:=Form;
image.picture.bitmap.loadfromfile('bitmap.bmp');
image.OnClick:=ProcClick;
image.OnMouseMove:=ProcMouseMove;
end;