Показать сообщение отдельно
  #9  
Старый 16.12.2009, 19:54
thelv thelv вне форума
Прохожий
 
Регистрация: 19.07.2009
Сообщения: 7
Репутация: 10
По умолчанию

Интересный вариант, спасибо.

Только когда уже Form1 восстанавливаем из панели задач, то при нажатии на кнопку сворачивания на форме, она сворачивается в левый нижний угол экрана (над кнопкой пуск). [это понятно, ведь Form2 мы не убили, а она - главная форма при таком коде Project1! ]

И еще один баг - это мерцание кнопки приложения на панели задач при закрытии Form2 (она пропадает на долю секунды и появляется заново).

Вот вродебы мне удалось создать полностью рабочий код, тоже с определением Application.onRestore.

Project1

Код:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.ShowMainForm:=False;
  Application.CreateForm(TForm2, Form2);
  Form2.Show();
  Application.Run;
end.

Unit1

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure onRestore(Sender:tobject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.onRestore(Sender:TObject);
begin
  Form1.Visible:=True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnRestore:=onRestore;
end;

end.

Unit2

Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

uses
  Unit1;


procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 action:=caNone;
 DestroyWindow(handle);
 Application.Minimize;
end;

end.

Тут я использую функцию DestroyWindow, чтобы закрытие Form2 не удаляло значок приложения из панели задач, как это случалось в случае если просто сделать close().

И приходится при Appication.onRestore, самому сделать Form1 видимой.

Способ дурацкий, наверно можно проще как-то, если WinApi получше знать.

И еще один баг остался: Form2 пока она еще открыта, сворачивается не вместе с приложением, а в левый нижний угол экрана.
Но мне это не важно.

В принципе вопрос решён. Всем спасибо. Но если у кого будут другие варианты буду рад увидеть.
Ответить с цитированием