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

Вниз

Проблема с TFileStream   Найти похожие ветки 

 
Schooler   (2005-09-09 15:19) [0]

Уважаемые Мастера!

Создаю компонент, который имеет свойство 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.


 
Stakan ©   (2005-09-09 15:44) [1]


>if fS<>Nil
>  then fS.Free;

if fS<>Nil then
 FreeAndNil(fS);


 
Schooler   (2005-09-09 15:55) [2]

To Stakan

Спасибо, работает!
У меня 4 книги по Дельфе, но везде fS.Free. Странно...


 
Плохиш ©   (2005-09-09 16:07) [3]


> Schooler   (09.09.05 15:55) [2]
> To Stakan
>
> Спасибо, работает!
> У меня 4 книги по Дельфе, но везде fS.Free. Странно...

А логически помыслить, если проверяешь переменную на nil, то и после удаления надо ей nil присваивать.


 
TStas ©   (2005-09-11 02:41) [4]

Или сразу FReeAndNil(FS)



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

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

Наверх




Память: 0.47 MB
Время: 0.034 c
1-1138529550
Wistler
2006-01-29 13:12
2006.03.05
Импорт функции из DLL


1-1138894886
guitarist
2006-02-02 18:41
2006.03.05
прокручиваемое Memo


15-1139581564
LordOfRock
2006-02-10 17:26
2006.03.05
Чтение "плохих" дисков.


4-1134719932
Kot_
2005-12-16 10:58
2006.03.05
Бездействие пользователя в программе.


4-1134560930
kami
2005-12-14 14:48
2006.03.05
как определить, под каким именем запущен процесс?