| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Одинаковые действия на разных формах |
| Автор: mmv 28.1.2004, 23:25 |
| Как сделать, чтобы действия, одинаковые для одинаковых компонентов различных форм выполнялись одной процедурой? Например, есть Image1 на каждой из форм Form1, Form2, Form3. Нужно загрузить в них картинку. Но, например, так как я было написал, выполнить нельзя. А как можно? procedure Fill (F : TForm); begin With F do Image1.Picture.LoadFromFile('1.jpg'); end; |
| Автор: Полудненко Олег 29.1.2004, 00:05 |
| Поидее надо юзать FindComponenet |
| Автор: mmv 29.1.2004, 00:41 |
| Если на одной форме – можно. Например, назначением в массив. For i := 1 to 10 do MyImage[i]:=FindComponent(Format('Image%d',[i])) as TImage; Но это же не совсем то. Неужели нельзя сделать как-то иначе? |
| Автор: Fedor 29.1.2004, 01:16 | ||
|
| Автор: mmv 29.1.2004, 03:40 |
| Если я правильно понял, здесь I - название Image? По-моему, так мы получим 'Undeclared identifier'. |
| Автор: <Spawn> 29.1.2004, 07:22 | ||
Можно, например, так сделать:
|
| Автор: <Spawn> 29.1.2004, 07:26 |
| Можно сделать сохранения нужных указателей на экземпляры TImage в массиве, но если формы будут динамически создаваться\уничтожаться, то прийдется этот массив динамически корректировать. |
| Автор: Петрович 29.1.2004, 08:18 | ||||||
Может чего и не понял, но автору похоже требуется следующее:
Соответственно в форме 1:
в форме 48:
|
| Автор: Fedor 29.1.2004, 13:32 | ||
Да. Правильно понял. <Spawn> Неплохой вариант, но Я так не люблю писать.... |
| Автор: oomneeq 29.1.2004, 19:55 | ||
IMHO, общевата формулировочка для хорошего ответа Одинаковй класс или одинаковое имя? Может я угадаю хоть приблизиттельно твою нужду >Например, есть Image1 на каждой из форм Form1, Form2, Form3 При таком раскладе стОит создать общий предок TFormWithAnImage, содержащий Image а формы Form1, Form2, Form3 унаследовать от него (хоть напрямую, хоть через друг дружку) через визюальное наслед-е форм. В этой TFormWithAnImage определяшь свою Fill в разделе public после этого любой Form1, Form2, Form3 знают FIll и могут его вызвать. Соответственно если передавать кудато параметр как TFormWithAnImage то также можно обращаться к евойному FIll Более того, если речь к примеру только об одинаковом имаже для всех форм, н то можно в общем предке оперделить ImageList и сразу прописать в нем нужные имажи, тогда при наследовании одинаовый имаж будет у всех автоматычно. Сорри если не угадал хода мыслей или изложил тривиальности |
| Автор: mmv 30.1.2004, 14:48 | ||
[QUOTE=Петрович,29.1.2004, 08:18]
Простите за, очевидно, глупый вопрос. А куда я должен поместить саму процедуру Fill, чтобы таким образом ее вызывать? |
| Автор: Петрович 30.1.2004, 21:55 | ||
А куда угодно. В данном случае она не требует ссылки ни на одну форму, ведь она оперирует тем компонентом который ей передаст вызывающий. Т.е. если хочешь, можешь поместить ее в отдельный модуль, и сослаться на него в модулях форм, а можешь сапихнуть в модуль одной из форм, тогда ссылку на него надо будет добавить в список uses остальных форм. Естественно, в том модуле где ты ее разместишь, не забудь вставить определение этой функции в интерфейсную часть. |
| Автор: mmv 31.1.2004, 02:05 | ||
Может, я что-то не понимаю, но если я поместил этот код в unit1 (Form1), то вызывать я его буду как
А ведь процедура передает только TImage. |
| Автор: Fedor 31.1.2004, 09:33 | ||
| Если ты его поместил в класс формы, то да. А если просто как отдельную процедуру, то нет. Тогда нужно так:
И причем еще нужно указывать, к какой форме принадлежит Image: procedure TForm2.Button1Click(Sender: TObject); begin unit1.Fill(Form1.Image1); end; procedure TForm2.Button1Click(Sender: TObject); begin unit1.Fill(Form2.Image1); end; |
| Автор: mmv 31.1.2004, 12:42 |
| Спасибо, Morpheus, это я что-то протормозил. |
| Автор: Петрович 31.1.2004, 22:18 | ||||
А вот это не всегда. Например в твоих примерах во втором случае ты вызываешь Fill внутри метода формы Form2, а следовательно можешь ссылаться на свойства этой формы не квалифицируя их. Т.е. вполне можно его переписать и так:
Но и квалифицировать не возбраняется, естественно если у тебя в программе лишь один экземпляр формы tForm2. |