Здравствуйте! Простейшая задачка с одним потоком: на форме две кнопки. При нажатии одной из них форма должна начать "таять" вплоть до растворения. Если во время этого процесса нажимается вторая кнопка, то процес таяния должен прерваться и форма должна обрести полную видимость. Процесс таяния организую в поток:
Код:
type
TIceThread = class(TThread)
private
protected
procedure DoThawing;
procedure Execute; override;
end;
TFMain = class(TForm)
cxButton1: TcxButton;
cxButton2: TcxButton;
procedure cxButton1Click(Sender: TObject);
procedure cxButton2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FMain: TFMain;
IceThread: TIceThread;
implementation
{$R *.dfm}
//===============================================
procedure TIceThread.Execute;
begin
Synchronize(DoThawing);
end;
//=================================
procedure TIceThread.DoThawing;
var i: double;
begin
i := 255;
while not Terminated and (FMain.AlphaBlendValue > 0) do
begin
i := i - 0.00001;
FMain.AlphaBlendValue := trunc(i);
end;
Fmain.Close;
end;
//================================
procedure TFMain.cxButton1Click(Sender: TObject);
begin
if (IceThread <> nil) and not IceThread.Terminated then
begin
IceThread.Terminate;
FMain.AlphaBlendValue := 255;
end;
end;
//===========================================
procedure TFMain.cxButton2Click(Sender: TObject);
begin
IceThread:=TIceThread.Create(true);
IceThread.FreeOnTerminate:=true;
IceThread.Priority:=tpLower;
IceThread.Resume;
end;
//================================
Тает всё нормально. Но если во время этого процесса нажать кнопку остановки таяния, то программа в обработчик этой кнопки не приходит и форма спокойно растворяется до конца. Помогите, пожалуйста, разобраться, что я делаю неправильно! Спасибо.