Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.041 c
1-1127714799
MegaVolt
2005-09-26 10:06
2005.10.16
Как протестировать в Dunit событие?


9-1117929264
ГеорГ
2005-06-05 03:54
2005.10.16
Как пользоваться SetGammaRamp


3-1125460289
skiph
2005-08-31 07:51
2005.10.16
Обновление первых записей


14-1127322382
Валёк
2005-09-21 21:06
2005.10.16
Величины


2-1126686038
JTAG
2005-09-14 12:20
2005.10.16
Про tray





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский