Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.31;
Скачать: CL | DM;

Вниз

Событие OnClose   Найти похожие ветки 

 
Mirror   (2004-10-19 20:43) [0]

Доброго времени суток!
Помогите, я не понимаю, почему моё приложение завершает работу не доконца выполнив обработчик события 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 давольно большой, то программа завершается неуспев записать данные в реестр, а иногда даже не дописав до конца файл. ПОЧЕМУ???


 
jack128 ©   (2004-10-19 20:47) [1]

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

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

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

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


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

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;
так будет работать


 
Amoeba ©   (2004-10-20 11:58) [3]

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

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;


 
-=SS=- ©   (2004-10-20 12:34) [4]

А еще правильнее
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;

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


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

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


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


 
Cosinus ©   (2004-10-20 14:06) [6]


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

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



Страницы: 1 вся ветка

Текущий архив: 2004.10.31;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
3-1096889723
NewDelpher
2004-10-04 15:35
2004.10.31
Временные таблицы в функциях


1-1097615416
Кто---то
2004-10-13 01:10
2004.10.31
Какой есть ComboBox-образныей компонент для выбора папки ?


4-1096223457
iZEN
2004-09-26 22:30
2004.10.31
О времени реакции ядра системы Windows.


9-1088730682
Xerx
2004-07-02 05:11
2004.10.31
X Window


3-1096522612
Softamas
2004-09-30 09:36
2004.10.31
Access -> ODBC -> BDE -> Delphi. Проблема с кодировкой