Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Одинаковые действия на разных формах 
:(
    Опции темы
mmv
Дата 28.1.2004, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 28.1.2004
Где: г. Воронеж

Репутация: нет
Всего: нет



Как сделать, чтобы действия, одинаковые для одинаковых компонентов различных форм выполнялись одной процедурой? Например, есть Image1 на каждой из форм Form1, Form2, Form3. Нужно загрузить в них картинку. Но, например, так как я было написал, выполнить нельзя. А как можно?

procedure Fill (F : TForm);
begin
With F do
Image1.Picture.LoadFromFile('1.jpg');
end;

PM MAIL WWW   Вверх
Полудненко Олег
Дата 29.1.2004, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Українець
**


Профиль
Группа: Участник...
Сообщений: 556
Регистрация: 13.8.2003

Репутация: 1
Всего: -11



Поидее надо юзать FindComponenet
PM MAIL   Вверх
mmv
Дата 29.1.2004, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 28.1.2004
Где: г. Воронеж

Репутация: нет
Всего: нет



Если на одной форме – можно. Например, назначением в массив.
For i := 1 to 10 do
MyImage[i]:=FindComponent(Format('Image%d',[i])) as TImage;
Но это же не совсем то. Неужели нельзя сделать как-то иначе?

PM MAIL WWW   Вверх
Fedor
Дата 29.1.2004, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



Код

For i:=1 to Screen.FormCount do
begin
  Screen.Forms[i].I.Picture.LoadFromFile('..');
  .......
end;



--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
mmv
Дата 29.1.2004, 03:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 28.1.2004
Где: г. Воронеж

Репутация: нет
Всего: нет



Если я правильно понял, здесь I - название Image? По-моему, так мы получим 'Undeclared identifier'.
PM MAIL WWW   Вверх
<Spawn>
Дата 29.1.2004, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Можно, например, так сделать:

Код
procedure TForm1.Button1Click(Sender: TObject);
var
 i, j: integer;
begin
if OpenDialog1.Execute then
 for i := 0 to Screen.FormCount - 1 do
   for j := 0 to Screen.Forms[i].ComponentCount - 1 do
     if (Screen.Forms[i].Components[j] is TImage) and
        (Screen.Forms[i].Components[j].Tag = 100) then // Для идентификации нужного TImage можешь в его свойство Tag поместить нужное тебе значение
        begin
          TImage(Screen.Forms[i].Components[j]).Picture.LoadFromFile(OpenDialog1.FileName);
          TImage(Screen.Forms[i].Components[j]).Width :=
            TImage(Screen.Forms[i].Components[j]).Picture.Bitmap.Width;
          TImage(Screen.Forms[i].Components[j]).Height :=
            TImage(Screen.Forms[i].Components[j]).Picture.Bitmap.Height;
        end;
end;


Это сообщение отредактировал(а) <Spawn> - 29.1.2004, 07:23


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
<Spawn>
Дата 29.1.2004, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Можно сделать сохранения нужных указателей на экземпляры TImage в массиве, но если формы будут динамически создаваться\уничтожаться, то прийдется этот массив динамически корректировать.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Петрович
Дата 29.1.2004, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Может чего и не понял, но автору похоже требуется следующее:
Код
// это один на всех экземпляр действия
procedure Fill (Img :TImage);
begin
 Img.Picture.LoadFromFile('1.jpg');
end;

Соответственно в форме 1:
Код
procedure TForm1.Button1Click(Sender: TObject);
begin
 Fill(Image1);
end;

в форме 48:
Код
procedure TForm48.Button36Click(Sender: TObject);
begin
 Fill(Image56);
end;


Это сообщение отредактировал(а) Петрович - 29.1.2004, 08:18


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Fedor
Дата 29.1.2004, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



Цитата
Если я правильно понял, здесь I - название Image? По-моему, так мы получим 'Undeclared identifier'.


Да. Правильно понял.

<Spawn> Неплохой вариант, но Я так не люблю писать.... smile.gif


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
oomneeq
Дата 29.1.2004, 19:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(mmv @ 28.1.2004, 23:25)
Как сделать, чтобы действия, одинаковые для *одинаковых* компонентов *различных* форм выполнялись одной процедурой? Например, есть Image1 на каждой из форм Form1, Form2, Form3. Нужно загрузить в них картинку. Но, например, так как я было написал, выполнить нельзя. А как можно?

procedure Fill (F : TForm);
begin
  With F  do
  Image1.Picture.LoadFromFile('1.jpg');
end;

IMHO, общевата формулировочка для хорошего ответа smile.gif, смотря что подразуметь под степенью одинаковости компонент и различности форм.
Одинаковй класс или одинаковое имя?

Может я угадаю хоть приблизиттельно твою нужду

>Например, есть Image1 на каждой из форм Form1, Form2, Form3

При таком раскладе стОит создать общий предок TFormWithAnImage, содержащий Image
а формы Form1, Form2, Form3 унаследовать от него (хоть напрямую, хоть через друг дружку)
через визюальное наслед-е форм.
В этой TFormWithAnImage определяшь свою Fill в разделе public
после этого любой Form1, Form2, Form3 знают FIll и могут его вызвать.
Соответственно если передавать кудато параметр как TFormWithAnImage то также можно обращаться к евойному FIll

Более того, если речь к примеру только об одинаковом имаже для всех форм, н то можно в общем предке оперделить ImageList и сразу прописать в нем нужные имажи, тогда при наследовании одинаовый имаж будет у всех автоматычно.


Сорри если не угадал хода мыслей или
изложил тривиальности smile.gif





  Вверх
mmv
Дата 30.1.2004, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 28.1.2004
Где: г. Воронеж

Репутация: нет
Всего: нет



[QUOTE=Петрович,29.1.2004, 08:18]
Код
// это один на всех экземпляр действия
procedure Fill (Img :TImage);
begin
 Img.Picture.LoadFromFile('1.jpg');
end;

Простите за, очевидно, глупый вопрос. А куда я должен поместить саму процедуру Fill, чтобы таким образом ее вызывать?
PM MAIL WWW   Вверх
Петрович
Дата 30.1.2004, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Цитата
Простите за, очевидно, глупый вопрос. А куда я должен поместить саму процедуру Fill, чтобы таким образом ее вызывать?

А куда угодно. В данном случае она не требует ссылки ни на одну форму, ведь она оперирует тем компонентом который ей передаст вызывающий. Т.е. если хочешь, можешь поместить ее в отдельный модуль, и сослаться на него в модулях форм, а можешь сапихнуть в модуль одной из форм, тогда ссылку на него надо будет добавить в список uses остальных форм.
Естественно, в том модуле где ты ее разместишь, не забудь вставить определение этой функции в интерфейсную часть.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
mmv
Дата 31.1.2004, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 28.1.2004
Где: г. Воронеж

Репутация: нет
Всего: нет



Может, я что-то не понимаю, но если я поместил этот код в unit1 (Form1), то вызывать я его буду как
Код
procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.Fill(Image1);
end;

А ведь процедура передает только TImage.
PM MAIL WWW   Вверх
Fedor
Дата 31.1.2004, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



Если ты его поместил в класс формы, то да.
А если просто как отдельную процедуру, то нет. Тогда нужно так:
Код

procedure TForm2.Button1Click(Sender: TObject);
begin
unit1.Fill(Image1);
end;


И причем еще нужно указывать, к какой форме принадлежит Image:

procedure TForm2.Button1Click(Sender: TObject);
begin
unit1.Fill(Form1.Image1);
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
unit1.Fill(Form2.Image1);
end;




--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
mmv
Дата 31.1.2004, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 28.1.2004
Где: г. Воронеж

Репутация: нет
Всего: нет



Спасибо, Morpheus, это я что-то протормозил.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0616 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.