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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2015, 20:22   #1
Random2
Пользователь
 
Регистрация: 30.06.2009
Сообщений: 18
По умолчанию Запретить появление родительской формы

Есть две формы - родительская (стандартная форма) и дочерняя (fsStayOnTop). Отправляю родительскую форму на задний план (переключив на передний к примеру Делфи). Через 2 секунды по таймеру в родительской форме срабатывает Form2.Show. Когда я пытаюсь закрыть эту Form2, показывается и родительская Form1. Как сделать чтобы Form1 не показывалась, когда Form2 получает фокус?
Перепробовал множество вариантов, но так и не удалось добиться успеха.
В аттаче прилагаю простой демо-проект с этими двумя формами.
Подскажите, как это сделать?
Вложения
Тип файла: zip Forms.zip (4.4 Кб, 11 просмотров)
MASM Builder - Бесплатная IDE для MASM32 от русских разработчиков.
Random2 вне форума Ответить с цитированием
Старый 08.01.2015, 20:46   #2
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

когда закрываешь вторую форму, то пропиши так:
Код:
procedure TForm2.Button1Click(Sender:TObject);
begin
   Form1.Show;
   Form1.Enabled:=True;
   Form2.Close;
end;
и аналогично когда ту, первую форму скрываешь:
Код:
procedure TForm1.Button1Click(Sender:TObject);
begin
   Form2.Show;
   Form2.Enabled:=True;
   Form1.Visible:=False;
end;
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 08.01.2015, 20:53   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не смотрел твой проект, но свое мнение выскажу:

Главная форма:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Form2.Show;
 Hide;
 TTimer(Sender).Enabled:=false;
end;
Дочерняя:
Код:
implementation
    uses unit1;

...
Блаблабла
Тыдыщьтыдыщь
...

{ TForm2 }

procedure TForm2.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
 form1.Show;
end;

end.
О. Меня опередили. Пойду в портал гамать...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.01.2015, 15:21   #4
Random2
Пользователь
 
Регистрация: 30.06.2009
Сообщений: 18
По умолчанию

Может я непонятно описал суть. Мне не нужно скрывать главную форму. Она должна оставаться видимой, чтобы на нее можно было переключиться в случае чего. Но она не должна появляться на передний план когда я что-то делаю в форме 2.
То есть, другими словами: запустил exe, переключился на какую-нибудь развернутую форму (например делфи). Формы 1 теперь не видно, она на заднем плане, но не свернута, не скрыта, а видима. По таймеру через 2 сек. после запуска появляется 2я форма (Form2.Show). Мне нужно чтобы когда я передаю фокус этой Form2, Form1 не появлялась на передний план. Но при этом дизэйблить первую форму или скрывать ее не нужно, т.к. нужно чтобы пользователь мог в любой момент переключиться на нее, зависимо от того, видна ли Form2 или нет.
MASM Builder - Бесплатная IDE для MASM32 от русских разработчиков.
Random2 вне форума Ответить с цитированием
Старый 09.01.2015, 16:38   #5
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

тогда вместо скрытия Form1.Hede; используй Form1.Enabled:=False; и Form1.Enabled:=True; для активизации и работы.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 09.01.2015, 21:20   #6
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Вот задачка. Тут только скрывать форму или минимизировать, так как по любому будет на заднем плане. Можно ещё для второй формы сделать отдельную кнопку в TaskBar
Вложения
Тип файла: zip Forms.zip (8.4 Кб, 8 просмотров)

Последний раз редактировалось Shouldercannon; 09.01.2015 в 21:28.
Shouldercannon вне форума Ответить с цитированием
Старый 10.01.2015, 17:58   #7
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Вместо Show использовать ShowModal. Тогда, если закроешь показанную таким методом форму, то закроешь всё приложение.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 10.01.2015, 19:05   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от саша40 Посмотреть сообщение
Вместо Show использовать ShowModal. Тогда, если закроешь показанную таким методом форму, то закроешь всё приложение.
Что за чепуха?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.01.2015, 13:16   #9
Random2
Пользователь
 
Регистрация: 30.06.2009
Сообщений: 18
По умолчанию

Цитата:
Можно ещё для второй формы сделать отдельную кнопку в TaskBar
Это уже пробовал. Не помогает.

Цитата:
Что за чепуха?
Да, какая-то чепуха. Может что-то перепутал...

Enabled кстате тоже не помогает. Только менять Visible. Ладно, буду что-то думать, спасибо всем за помощь.
MASM Builder - Бесплатная IDE для MASM32 от русских разработчиков.
Random2 вне форума Ответить с цитированием
Старый 12.01.2015, 18:54   #10
DpolenST
Форумчанин
 
Регистрация: 28.09.2013
Сообщений: 115
По умолчанию

На Form2 добавить ApplicationEvents, при событии OnActivate запомнить хендл текущего активного окна
Код:
ActWinHWND := GetForegroundWindow();
При событии OnClose в Form2 возвращаешь активность предыдущему окну.
Код:
if ActWinHWND then SetForegroundWindow(ActWinHWND);
Что бы еще такого сделать, чтобы ничего не делать?

Последний раз редактировалось DpolenST; 12.01.2015 в 18:58.
DpolenST вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Появление формы (slide down) Che Guevara JavaScript, Ajax 6 08.12.2011 17:16
появление формы quarty Общие вопросы Delphi 6 20.01.2011 22:42
Обновление Родительской формы denver_ua Microsoft Office Access 0 26.03.2009 16:15
возобновить появление формы strannik Общие вопросы Delphi 4 18.09.2007 05:51
Появление формы. Kukkk Общие вопросы Delphi 17 13.09.2007 20:23