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

Вниз

Как описать входной параметр процедуры многовариантно?   Найти похожие ветки 

 
lipskiy ©   (2002-04-06 13:24) [23]

ВАУ! Ребята! Всю ночь работали :) Спасибо всем!
Но все вроде не совсем то, хотя некоторые мысли надо попробовать, если, конечно проще никак.

Постановка задачи, более конкретно, такая.
Есть процедура, которая скачивает с инета один ресурс.
Этот ресурс может быть скачан и сохранен двумя способами - записан в файл на диск или загружен в StringList как текстовик.

В зависимости от способа сохранения я вызываю процедуру с одним из двух возможных параметров:
Receiver:String;
или
Receiver:TStringList;

В первом случае Receiver содержит имя файла на диске, в который будет записан скачанный файл.
Во втором случае Receiver содержит StringList, в который будут загружены строки скачанного текстового файла.

Есть также компонент закачки, его экземпляр называется HttpGet.
Он закачивает ресурс в свой поток, создание которого я вызываю в этой процедуре.

Тело процедуры должно быть одно, выглядеть она должна примерно так:

procedure DownLoad (Receiver:{что-то многовариантное});
var ToList:boolean;
FName:string; // имя приемника
DataIn : TStream;
begin
// Определяем тип сохранения закачанных данных
ToList:= Receiver is TStringList;
}
некоторый подготовительный код, который не хочется дублировать в двух телах процедур
}
if ToList then FName:= HttpGet.DocName // генерирует сам компонент закачки
else FName:= Receiver; // берется входное значение
// создем поток для закачки
HttpGet.RcvdStream:= TFileStream.Create(FName, fmCreate);
HttpGet.Get; // закачиваем

if ToList then // грузим данные в стринглист
begin
DataIn:= TFileStream.Create(FName, fmOpenRead);
Receiver.LoadFromStream(DataIn);
DataIn.Free;
end;
// иначе данные сохранились в файл с именем Receiver.

HttpGet.RcvdStream.Free;
}
некоторый завершающий код, который не хочется дублировать в двух телах процедур
}
end;


Это не рабочий вариант - писал только тут для объяснения логики.
Ну чего? Мне бы простенько как нибудь воткнуть входной параметр, и все. Если никак, то мне проще объявить два входных параметра и один флажок - какой на самом деле активный, это хоть и некрасиво, но все таки проще предложенных пока вариантов.



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

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

Наверх




Память: 0.47 MB
Время: 0.013 c
3-94255
Octav
2002-04-05 19:12
2002.04.29
Pack gdb


1-94356
MVova
2002-04-16 17:19
2002.04.29
Количество тактов процессора


14-94540
lipskiy
2002-03-21 01:52
2002.04.29
Forms and controls in runtime


3-94320
Юляша
2002-04-07 13:21
2002.04.29
Secondary index


1-94409
Vlad_Leon
2002-04-17 08:57
2002.04.29
Где взять доку или хэлп для VgLib?