Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.12.2009, 11:49
thelv thelv вне форума
Прохожий
 
Регистрация: 19.07.2009
Сообщения: 7
Репутация: 10
По умолчанию 2 формы:1-я скрыта. Нужно при закрытии 2-й свернуть приложение и сделать видимой 1-ю

Вначале первая(главная) форма скрыта, а 2-я показана. При закрытии 2-й нужно свернуть приложение и сделать видимой первую форму. (Чтобы при нажатии на кнопку приложения в панели задач показалась первая форма)

Делал по-разному, например так:

Project1:

Код:
  Application.CreateForm(TForm1, Form1);
  Application.ShowMainForm:=False;
  Application.CreateForm(TForm2, Form2);
  Form2.Show();

Unit2:

Код:
 
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Application.Minimize;
  Application.ShowMainForm:=True;
  form1.Visible:=true;
end;

Всё хорошо, но Form1 после этого не сворачивается, при попытке свернуть окно стандартным способом (кнопка в правом верхнем углу окна).
Почему? и как сделать чтоб всё работало?
Ответить с цитированием
  #2  
Старый 16.12.2009, 12:12
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Код:
// Создание формы
procedure TForm1.FormCreate(Sender: TObject);
begin
  //Скрыть главную форму
  Application.ShowMainForm := False;
  ShowWindow(Application.Handle, sw_Hide);
  ShowWindow(Form_Main.Handle, sw_Hide);
end;

// Закрытие формы
procedure TForm1.FormClose
  (Sender: TObject; var Action: TCloseAction);
begin
  if MessageBox(Handle, 'Выйти?',
    'Вопрос', MB_YESNO + MB_ICONQUESTION) = mrYes then
  begin
    //Показать главную форму
    Action := caFree;
    Application.ShowMainForm := True;
    ShowWindow(Application.Handle, SW_RESTORE);
    ShowWindow(Form_Main.Handle, SW_RESTORE);
  end
  else
    Action := caNone;
end;
При создании модальной формы главная изчезает, модальная нормально сворачивается, при закрытии модальной формы главная появляется..
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #3  
Старый 16.12.2009, 12:23
thelv thelv вне форума
Прохожий
 
Регистрация: 19.07.2009
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от NIch
при закрытии модальной формы главная появляется..

Мне нужно чтобы при закрытии 2-ой формы (та которая у вас модальная) приложение свернулось (чтоб на экране не было ни одной формы). Но чтоб при попытке развернуть приложение из панели задач показалась главная форма.

Цитата:
Сообщение от NIch
модальная нормально сворачивается

У меня в примере Form1 это главная форма, она то и не сворачивалась, после всех проделанных операций.
А второстепенную форму сворачивать пока не нужно, хотя все равно спасибо.

Последний раз редактировалось thelv, 16.12.2009 в 12:28.
Ответить с цитированием
  #4  
Старый 16.12.2009, 14:03
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Цитата:
Мне нужно чтобы при закрытии 2-ой формы (та которая у вас модальная) приложение свернулось (чтоб на экране не было ни одной формы). Но чтоб при попытке развернуть приложение из панели задач показалась главная форма.
Код:
// Закрытие модальной формы
procedure TForm1.FormClose
  (Sender: TObject; var Action: TCloseAction);
begin
  if MessageBox(Handle, 'Выйти?',
    'Вопрос', MB_YESNO + MB_ICONQUESTION) = mrYes then
  begin
    //Показать главную форму
    Action := caFree;
    Application.ShowMainForm := True;
    ShowWindow(Application.Handle, SW_RESTORE);
    ShowWindow(Form_Main.Handle, SW_RESTORE);
    ShowWindow(Form_Main.Handle, SW_MINIMIZE);//Добавь строку
  end
  else
    Action := caNone;
end;
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #5  
Старый 16.12.2009, 14:16
thelv thelv вне форума
Прохожий
 
Регистрация: 19.07.2009
Сообщения: 7
Репутация: 10
По умолчанию

Этот вариант тоже не годится.
Т.к. после закрытия второстепенной формы на доли секунды появляется свернутая Главная форма в левом нижнем углу экрана (над кнопкой Пуск).

Последний раз редактировалось thelv, 16.12.2009 в 16:10.
Ответить с цитированием
  #6  
Старый 16.12.2009, 18:05
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 663
Версия Delphi: D6/D7
Репутация: 26643
Лампочка

Project1
Код:
Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.ShowMainForm:=False;
  Application.CreateForm(TForm2, Form2);
  Form2.Show();
  Application.Run;

Unit2
Код:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Application.ShowMainForm := true;
  Form1.Show;
  Application.Minimize;
end;

Поменял местами пару строк в Unit2. Все работает на ура. Никаких мерцаний и перепрыгиваний форм не наблюдал при десятке опытов Проверил на Delphi6 ибо другого нема.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:59.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025