![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с TFileStream [D5]
Schooler © (2005-09-09 15:19:00)Уважаемые Мастера!
Создаю компонент, который имеет свойство Active:boolean.
Если Active:=true, то надо открыть файл ExternalFile в режиме ЧтениеЗапись.
Если Active:=false, то соединение через FileStream обрывается.
В procedure TTestFStream.SetActive(const Value: boolean);
возникает AV, причем со второй попытки: как в Design так и в Run-Time.
Что делаю не так?
unit TestFStream;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TTestFStream = class(TComponent)
private
FExternalFile: string;
FActive: boolean;
procedure SetExternalFile(const Value: string);
procedure SetActive(const Value: boolean);
{ Private declarations }
protected
{ Protected declarations }
fS:TFileStream;
public
{ Public declarations }
constructor create(AOwner:TComponent);override;
destructor destroy; override;
published
{ Published declarations }
property Active: boolean read FActive write SetActive;
property ExternalFile:string read FExternalFile write SetExternalFile;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Standard', [TTestFStream]);
end;
{ TTestFStream }
procedure TTestFStream.SetActive(const Value: boolean);
begin
if fS<>Nil
then fS.Free;
if Value
then fS:=TFileStream.Create(fExternalFile,fmOpenReadWrite);
FActive := Value;
end;
procedure TTestFStream.SetExternalFile(const Value: string);
begin
FExternalFile := Value;
end;
constructor TTestFStream.create(AOwner:TComponent);
begin
inherited create(AOwner);
FActive:=false;
fS:=nil;
end;
destructor TTestFStream.destroy;
begin
fs.Free;
inherited destroy;
end;
end.
TStas (2005-09-11 02:41:00) [1]Или сразу FReeAndNil(FS)
Плохиш (2005-09-09 16:07:00) [2]
> Schooler (09.09.05 15:55) [2]
> To Stakan
>
> Спасибо, работает!
> У меня 4 книги по Дельфе, но везде fS.Free. Странно...
А логически помыслить, если проверяешь переменную на nil, то и после удаления надо ей nil присваивать.
Schooler (2005-09-09 15:55:00) [3]To Stakan
Спасибо, работает!
У меня 4 книги по Дельфе, но везде fS.Free. Странно...
Stakan (2005-09-09 15:44:00) [4]
>if fS<>Nil
> then fS.Free;
if fS<>Nil then
FreeAndNil(fS);