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

Вниз

модифицирующий себя компонент   Найти похожие ветки 

 
umbra ©   (2005-09-20 17:12) [0]

Пишу компонент - логгер, наследник TFileStream.

 TLogger = class(TFileStream)
 private
   FMaxSize: Int64;
   function RotateLog: TLogger;
 public
   constructor Create(const FileName: string; Mode: Word; mSize: Int64);
 end;


Поле FMaxSize - это максимальный размер лог-файла, после достижения которого текущий файл надо закрыть, создать новый на диске, открыть его
и писать дальше - и все в текущем экземпляре класса, предположительно в процедуре RotateLog. Предположительно, экземпляр будет полем другого компонента.

Как это возможно? Заранее спасибо


 
Плохиш ©   (2005-09-20 17:16) [1]


> Поле FMaxSize - это максимальный размер лог-файла, после
> достижения которого текущий файл надо закрыть, создать новый
> на диске, открыть его
> и писать дальше - и все в текущем экземпляре класса, предположительно
> в процедуре RotateLog.

В каком месте проблемы?


 
Digitman ©   (2005-09-20 17:18) [2]


> создать новый


с каким же, пардон, именем его создать ? при том что имя файла здесь ЖЕСТКО оговорено параметром FileName констр.метода Create() ?


 
umbra ©   (2005-09-20 18:14) [3]


> В каком месте проблемы?
>


Проблема в том, что я не понимаю, как это вообще возможно. Все упирается в дескриптор открытого файла (свойство Handle). Единственное, что приходит в голову - апишкой CreateFile создать файл

uses SysUtils;
{.............}
procedure RotateLog;
var newname: string;
begin
newname := MakeNewName; //предположим, что эта функция гдето есть
Handle := CreateFile(newname);
end;


а что при этом будет с Size и Position?


 
umbra ©   (2005-09-20 18:19) [4]


> при том что имя файла здесь ЖЕСТКО оговорено параметром
> FileName констр.метода Create()


В конструкторе предка. У наследника в конструкторе можно сделать с FileName что угодно и передать это что угодно inherited Create(...). Тут дело не в имени скорее...


 
Digitman ©   (2005-09-20 18:22) [5]

КТО заставляет тебя наследовать свой класс непосредственно от TFileStream ?

никто !

наследуй его от, например, TComonent, сделай TFileStream полем своего класса и верти им как угодно ! Создавай, уничтожай его как и когда тебе вздумается !


 
Плохиш ©   (2005-09-20 18:22) [6]


> а что при этом будет с Size и Position?

Что ты с ними сделаешь, то и будет.


 
umbra ©   (2005-09-21 10:27) [7]


> Что ты с ними сделаешь, то и будет


Прошу прощения! Затупил. В хелпе пишут про Size из TStream, а посмотрел в модуль Classes - в TFileStream он read-write и все методы реализованы



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

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

Наверх




Память: 0.48 MB
Время: 0.097 c
14-1127461258
Андрей Жук
2005-09-23 11:40
2005.10.16
По поводу замечания Анатолия Подгорецкого


2-1127088899
antoxa2005
2005-09-19 04:14
2005.10.16
Всем вопросам вопрос. А как получить значения подписи полей в Acc


14-1127466522
Форумщик
2005-09-23 13:08
2005.10.16
Мобильник Sony Ericsson K700


1-1127814803
Archer84
2005-09-27 13:53
2005.10.16
Пожалуйста объясните


3-1125926607
AndrewK
2005-09-05 17:23
2005.10.16
Хранение справочников в одной таблице. Предлагаю обсудить идею.