Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Событие OnClose [D7]


Mirror ©   (2004-10-19 20:43:00) 

Доброго времени суток!
Помогите, я не понимаю, почему моё приложение завершает работу не доконца выполнив обработчик события OnClose
конкретный пример:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
 Reg: TRegistry;
begin
TextsStream.SaveToFile(SFileName);
Reg := TRegistry.Create;
If Reg.OpenKey('\Software\Key', True) then
 Begin
 Reg.WriteInteger('PosLeft',Form1.BoundsRect.Left);
 Reg.WriteInteger('PosTop',Form1.BoundsRect.Top);
 Reg.WriteInteger('PosRight',Form1.BoundsRect.Right);
 Reg.WriteInteger('PosBottom',Form1.BoundsRect.Bottom);
 Reg.WriteBool('WordWrap',Form1.ToolButton20.Down);
 end;
Reg.Free;
end;

Если поток TextsStream давольно большой, то программа завершается неуспев записать данные в реестр, а иногда даже не дописав до конца файл. ПОЧЕМУ???


Cosinus   (2004-10-20 14:06:00) [1]


> КаПиБаРа ©   (20.10.04 14:04) [5]

LOL ;)
Но я согласен.


КаПиБаРа   (2004-10-20 14:04:00) [2]

-=SS=- ©   (20.10.04 12:34) [4]
Если где то будет ошибка програма не закроется.


В гробу я видел такую программу в белых тапках.


-=SS=-   (2004-10-20 12:34:00) [3]

А еще правильнее
procedure TfrmClock.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
Reg: TRegistry;
begin
CanClose:=False;
TextsStream.SaveToFile(SFileName);
Reg := TRegistry.Create;
try
If Reg.OpenKey('\Software\Key', True) then
Begin
Reg.WriteInteger('PosLeft',Form1.BoundsRect.Left);
Reg.WriteInteger('PosTop',Form1.BoundsRect.Top);
Reg.WriteInteger('PosRight',Form1.BoundsRect.Right);
Reg.WriteInteger('PosBottom',Form1.BoundsRect.Bottom);
Reg.WriteBool('WordWrap',Form1.ToolButton20.Down);
end;
finally
Reg.Free;
CanClose:=True;
end;
end;

 Если где то будет ошибка програма не закроется.


Amoeba   (2004-10-20 11:58:00) [4]

Правильнее будет так:

procedure TfrmClock.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
Reg: TRegistry;
begin
TextsStream.SaveToFile(SFileName);
Reg := TRegistry.Create;
try
If Reg.OpenKey('\Software\Key', True) then
Begin
Reg.WriteInteger('PosLeft',Form1.BoundsRect.Left);
Reg.WriteInteger('PosTop',Form1.BoundsRect.Top);
Reg.WriteInteger('PosRight',Form1.BoundsRect.Right);
Reg.WriteInteger('PosBottom',Form1.BoundsRect.Bottom);
Reg.WriteBool('WordWrap',Form1.ToolButton20.Down);
end;
finally
Reg.Free;
end;
end;


abc   (2004-10-19 21:29:00) [5]

procedure TfrmClock.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
Reg: TRegistry;
begin
TextsStream.SaveToFile(SFileName);
Reg := TRegistry.Create;
If Reg.OpenKey('\Software\Key', True) then
Begin
Reg.WriteInteger('PosLeft',Form1.BoundsRect.Left);
Reg.WriteInteger('PosTop',Form1.BoundsRect.Top);
Reg.WriteInteger('PosRight',Form1.BoundsRect.Right);
Reg.WriteInteger('PosBottom',Form1.BoundsRect.Bottom);
Reg.WriteBool('WordWrap',Form1.ToolButton20.Down);
end;
Reg.Free;
end;
так будет работать


jack128   (2004-10-19 20:47:00) [6]

Mirror   (19.10.04 20:43)
TextsStream давольно большой, то программа завершается неуспев записать данные в реестр, а иногда даже не дописав до конца файл

не может быть.. Поставь весь код в
try
 <весь твой код>
finally
 ShowMessage('test'); // всегда будет появлятся эта надпись..
end;

Abort нигде не используешь??

зы
MyVar := MyType.Create;
try
 ...
finally
 MyVar.Free;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо