Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2010, 20:44   #1
Евгений1
 
Регистрация: 28.07.2010
Сообщений: 8
По умолчанию MDI-приложение

Здравствуйте!
У меня при написании MDI-приложения возникла одна проблема, которую не удаётся решить. В общих словах: Есть главная форма и шесть дочерних форм, на главной форме размещены шесть кнопок, которые открывают соответствующие формы при их нажатии. Так вот, мне необходимо, чтобы одна и таже форма не открывалась 2,3,4 и т.д. раз, т.е. открывалась только один раз. Я пытался реализовать это вот так:

Код:
procedure TMainForm.Form1ButtonClick(Sender: TObject);
var
  AForm:TForm1;
begin
  if Not Assigned(Form1)
  then AForm:=TForm1.Create(Application)
  else Form1.BringToFront;
end;
но результат тот же, что и без Assigned написано, форма открывается неограниченное количество раз.
Евгений1 вне форума Ответить с цитированием
Старый 31.07.2010, 04:35   #2
Alexei91
Заблокирован
Форумчанин
 
Аватар для Alexei91
 
Регистрация: 30.12.2009
Сообщений: 544
Сообщение

Цитата:
if Not Assigned(Form1)
then AForm:=TForm1.Create(Application)
else Form1.BringToFront;
Попробуйте вместо Form1.BringToFront написать
ShowWindow(Form1.Handle, SW_HIDE).
Темы для WordPress. Русские WordPress шаблоны
Alexei91 вне форума Ответить с цитированием
Старый 31.07.2010, 19:58   #3
Евгений1
 
Регистрация: 28.07.2010
Сообщений: 8
По умолчанию

Нет, не помогло, форма также открывается неограниченное количество раз.
Евгений1 вне форума Ответить с цитированием
Старый 31.07.2010, 21:11   #4
Alexei91
Заблокирован
Форумчанин
 
Аватар для Alexei91
 
Регистрация: 30.12.2009
Сообщений: 544
По умолчанию

Тогда как-то через
Код:
if ActiveMDIChild is TForm1 then ...
Темы для WordPress. Русские WordPress шаблоны
Alexei91 вне форума Ответить с цитированием
Старый 31.07.2010, 22:11   #5
Евгений1
 
Регистрация: 28.07.2010
Сообщений: 8
По умолчанию

Спасибо, получилось! Только теперь при повторном нажатии на кнопку, выскакивает ощибка "нарушение прав доступа", не подскажете, что надо сделать чтобы она не выскакивала?
Евгений1 вне форума Ответить с цитированием
Старый 31.07.2010, 22:55   #6
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Просто запрети кнопку. тут же:
Код:
if ActiveMDIChild is TForm1 then ...
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 01.08.2010, 07:14   #7
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Я бы все-таки иначе сделал.

Код:
var
  i: integer;
begin
  for i := 0 to Form1.MDIChildCount - 1 do
  begin
    if Form1.MDIChildren[i] is TForm2 then
    begin
      Form1.MDIChildren[i].WindowState := wsNormal;
      Exit;
    end;
  end;
  Form2 := TForm2.Create(Owner);
end;
Баламут вне форума Ответить с цитированием
Старый 26.08.2010, 00:53   #8
Евгений1
 
Регистрация: 28.07.2010
Сообщений: 8
По умолчанию

Задача была решена следующим образом:
Код:
procedure TMainForm.Button1Click(Sender: TObject);
begin
  Button1.Enabled:=False;
  Button2.Enabled:=True;
  if Not Assigned(Form1)then
  Form1:=TForm1.Create(Application)
  else
  Form1.BringToFront
end;

procedure TMainForm.Button2Click(Sender: TObject);
begin
  Button1.Enabled:=True;
  Button2.Enabled:=False;
  if Not Assigned(Form2)then
  Form2:=TForm2.Create(Application)
  else
  Form2.BringToFront
end;

в Unit1 и Unit2 соответственно после Action:=caFree; проставлены
 Form1:=nil; и  Form2:=nil; и т.д для остальных форм.
Евгений1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MDI Приложение tvvwild Общие вопросы Delphi 2 23.07.2010 16:47
Не работает Mutex (MDI приложение) Terazoid Win Api 1 26.04.2010 16:53
mdi приложение Михаил Юрьевич Общие вопросы Delphi 1 21.09.2009 01:01
MDI-приложение Технолог Общие вопросы Delphi 6 02.05.2008 20:10
MDI приложение Arsgun Общие вопросы Delphi 4 29.05.2007 12:36