Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как создать property типа TextFile?


Автор: Radio 21.2.2006, 21:03
Сегодня попробовал создать свойство и написал че-то вроде следующего
type
TForm1=Tform;
..........
Function GetF:TextFile;
Procedure SetF(File_Name:TFileName);
Property F:TextFile read Getf write SetF
.......
Перед тем,как все это раскритиковать объясню чего я хотел:
OpenDialog.FileName дает мне имя файла для SetFile и яго пишу в F я его AssignFile и юзаю свойство как файловую переменную, а чтоб в любой момент можно было читать - пожалуйста, есть GetF.
Немного поумнев я понял, что нельзя делать GetF:TextFile; ну ладно с этим я смирился;
Далее окозалось, что параметр у SetF должен быть того же типа, что и property а параметр типа TextFile быть не может следовательно и property типа TextFile сделать нельзя.
Короче, тем кто во всей этой каше разобрался прямой вопрос: можно ли создать property:TextFile, а если можно, то как?

Автор: Albinos_x 21.2.2006, 21:18
Код

...
   Procedure GetF(F:TextFile);
   Procedure SetF(F:TextFile;File_Name:String);
...
var F:TextFile;

Автор: Radio 21.2.2006, 21:26
Цитата

Procedure SetF(F:TextFile;File_Name:String);

Мне делфи на это ответил

File type not allowd here

что нелзя в параметрах процедуры давать TextFile. Только если Var написать. Ну написал, а он -

Property setters cannot take var parameters

Ну вот, а дальше что, раз такие дела???

Автор: Guedda 21.2.2006, 21:32
А что именно в процедуре пишешь?
У меня, допустим, все работает, и никаких ошибок не вылетает

Автор: Radio 21.2.2006, 21:35
procedure Set_File(F:TextFile);
property WorkFile:TextFile write Set_File;

вот это not allowd here

procedure Set_File(Var F:TextFile);
property WorkFile:TextFile write Set_File;


вот это cannot take var parameters;
smile

Автор: Quadr0 22.2.2006, 01:46
...

Автор: Radio 22.2.2006, 21:59
Цитата

А как вы собрались обед с забором совместить? TFileName и file это можно сказать огонь и вода,

Да я знаю, что FileName это не файл. Я хотел, чтоб было свойство в объекте и это свойство представляло из себя файловую переменную. Я конечно понимаю, можно обьявить глобальную переменную и ее юзать, но ведь это уже нето. А SetFile функцию хотел заюзать только вначале для Assign и Reset, а так в проге он больбще и не нужен. Параметр FileName:TFilName мне там понадобился, чтоб сразу из OpenFile в SetFile идальше пошло-поехало.
Ну да ладно, получается если
Цитата

Компилятор запрещает указание файла как такового в параметрах метода.

так не суждено мне объявить property:TextFile. Или можно, идея-то красивая была

Автор: Radio 23.2.2006, 19:31
Ну так что, все таки это невозможно? А я водном учебнике читал, что ограничения на тип свойств нет, так что получается есть? smile

Автор: Quadr0 23.2.2006, 21:52
...

Автор: Radio 23.2.2006, 21:59
Это понятно, что могу объявить, но мне-то нужны процедуры для read write и тип параметров этих процедур дожен совпадать с типом property то есть типа TextFile а это невозможно(для процедур еще как то можно, хотя и не получается через Var, а для функций, так вообще никак - не может быть функция типа TextFile).
Но ладно, я спорить не хочу - даже лучше, если можно, только теперь скажите мне пожалуйста - как, и желательно кодом на Delphi чтобы уже исключить различные побочные вопросы.
Как это сделать?

Автор: SoWa 23.2.2006, 22:23
Код

var
f: text;
s: string;
begin
assignfile(f,'input.txt');
rewrite(f);
write(f,'Ерунда всякая!');
closefile(f);

reset(f);
readln(f, s);
closefile(f);
end;

Вот так и работать с файлом. Только Var описывай глобальный.

Автор: Radio 23.2.2006, 22:47
Да я не спрашиваю как работать с файло - я это все хорошо знаю.
Я прошу чтобы мне помогли объявить property типа TextFile в объекте.
Только просьба перед тем как приводить листинг проверить его в Delphi а то как я пробовал объявить с виду тож провильно, но Delphi выдаёт ошибки.
Так что помогите кто может.
Как это сделать?

Автор: Quadr0 24.2.2006, 02:16
...

Автор: Radio 24.2.2006, 23:48
Спасибо за исчерпывающий ответ. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)