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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2010, 17:57   #11
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Закрыть вторую (модальную) форму из первой можно, но первая форма активной не станет - вот в чем проблема...
Можно и дестроить, и релеазить вторую - не поможет, первая форма будет "мертвой".
И потоки тут не помогут, я думаю.

З.Ы. Странно... А сегодня первая форма становится активной... Чудеса...

Последний раз редактировалось mihali4; 03.02.2010 в 12:42.
mihali4 вне форума Ответить с цитированием
Старый 03.02.2010, 07:39   #12
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Закрыть вторую (модальную) форму из первой можно, но первая форма активной не станет - вот в чем проблема...
Можно и дестроить, и релеазить вторую - не поможет, первая форма будет "мертвой".
И потоки тут не помогут, я думаю.
Здесь вы неправы. Для чистоты эксперимента я наскоро набросал такой код:

Код:
unit Unit1;

interface

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


type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
TNewThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TNewThread.Execute;
var i: integer;
begin
  for i := 1 to 500 do Form2.Label1.Caption := IntToStr(i);
  Form2.Close;
  Terminate;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  NewThread: TNewThread;
begin
  Button1.Caption := '';
  NewThread:=TNewThread.Create(true);
  NewThread.FreeOnTerminate:=true;
  NewThread.Resume;
  Form2.ShowModal;
  Button1.Caption := 'I work';
end;

end.

Работает, конечно, через раз, так как нарушены все правила реализации потоков, но, после выполнения Form2.Close управление передается главной форме и выводится надпись 'I work' на кнопке.

Можно и не извращаться с потоками, а просто повесить закрытие модальной формы на таймер и посмотреть результат.
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Восстановление видеорежима после завершения программы Marsel737 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 10.12.2009 23:11
Как закрыть форму при показе RIO Общие вопросы Delphi 4 28.08.2009 07:54
Как закрыть MDIChild форму по нажатию на кнопку AndreyF Общие вопросы Delphi 4 11.07.2009 16:26
Использование метода free после завершения потока Denager Общие вопросы Delphi 4 29.08.2008 10:13
Ждать завершения чужого процесса ERASERROR Win Api 2 04.02.2008 08:23