Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как выполнить процедуру другого окна текущего приложения... [D5, WinXP]


grusty ©   (2005-03-09 19:01:00) 

Здравствуйте!
Есть родительская (MDIForm) и дочерняя (MDIChildForm) открытые формы. Открываю следующее окно, причем модально. После закрытия последней мне необходимо выполнить некоторую процедуру дочернего (MDIChildForm)окна. Как это осуществить? Ниже приведенный код выдает ошибку "Access violation...", что абсолютно естественно.

 with TForm2.Create(Self) do
 try
   ShowModal;
 finally
   Free;
    Form1.ReDraw;
 end;

Что необходимо добавить в код и как правильно вызвать процедуру (выделено жирным шрифтом)?
Заранее благодарен!


grusty   (2005-03-10 14:36:00) [1]

Код процедуры (сократил до 1 строки), который я вызываю, следующий:

procedure TForm1.ReDraw;
begin
 Image1.Visible:=True;
end;

Есть форма и на ней компонент TImage.
Вот если в теле процедуры вставить вместо приведенного Beep или ShowMessage - тогда работает. Что я не так делаю?


imav   (2005-03-10 00:57:00) [2]

1. А ты уверен в том что AV вываливается именно на Form1.ReDraw а не на TForm2.Free?
2. А любые другие методы Form1 работают в данном контексте, например, Close? Инициализирована ли переменная в теле процедуры? Может она у тебя параметром идет, который ты забыл назначить?

В общем, хюзю! Нужен код а не кофейная гуща.


> Ниже приведенный код выдает ошибку "Access violation...",
> что абсолютно естественно.


С таким настроем никуда!)))


grusty   (2005-03-09 22:18:00) [3]

Последнее окно - это третье окно Form2. Два предыдущих (MainForm и Form1) я не трогаю - они открываются при запуске приложения.
Кто-нибудь может еще что-нибудь посоветовать?


YurikGL   (2005-03-09 21:19:00) [4]

Мндя прочитал внимательно

> После закрытия последней мне необходимо выполнить некоторую
> процедуру дочернего (MDIChildForm)окна. Как это осуществить?

т.е. после закрытия родительской формы нужно выполнить процедуру в дочерней? Дык может это... ее все же уже нет?


grusty   (2005-03-09 21:03:00) [5]


> YurikGL

Да вообще-то нет... :)


YurikGL   (2005-03-09 20:54:00) [6]

может ошибка внутри процедуры ReDraw?


grusty   (2005-03-09 20:43:00) [7]


> YurikGL

У меня форма Form1 уже открыта и создавать ее еще раз нет смысла...


YurikGL   (2005-03-09 20:28:00) [8]


> grusty   (09.03.05 20:18) [5]

Попробуй, на всякий случай
Form1:=TForm1.create(self);
Form1.ReDraw;


grusty   (2005-03-09 20:18:00) [9]


> YurikGL

Ошибка - "Access violation..." да и неправильно это...


YurikGL   (2005-03-09 20:10:00) [10]

Если Form1 создана, то Form1.ReDraw должно сработать.


grusty   (2005-03-09 19:42:00) [11]

Form1 - это дочерняя форма. Код этот стоит в обработке события нажатия кнопки, расположенной на основной родительской форме.


YurikGL   (2005-03-09 19:24:00) [12]

Form2:=TForm2.Create(Self)
Form2.ShowModal;
Form1.ReDraw;


Плохиш   (2005-03-09 19:18:00) [13]

Ещё бы кто рассказал, кто такой Form1. И в каком месте супер проги стоит этот код?


Наверх

Титульная страница Поиск, карта сайта Написать письмо