![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Параметр процедуры [D6, Win2k]
АлеКо © (2005-08-18 10:49:00)Добрый день господа.
Создал константы
BlockMFRF : Array[0..3] of Array[0..4] of string =
BlockPP : Array[0..40] of Array[0..4] of string =
Теперь хочу использовать их в качестве входных параметров в процедуре.
Как правильно описать процедуру.
Digitman (2005-08-18 12:15:00) [1]
> Leonid Troyanovsky © (18.08.05 12:07) [24]
можно и так.
все зависит от ОБДУМАННЫХ фантазий автора.
лишь бы не "гланды через причинное место", как изволил выразиться ув.коллега Плохиш(С)
Digitman (2005-08-18 12:12:00) [2]
> АлеКо (18.08.05 12:04) [23]
"шаблонами" здесь, кстати, и не пахнет.
тип упомянутой константы отражает лишь факт некоей "структурированности" некоего файла, т.е. факт того, что некий файл состоит из "записей", каждая из которых м.б. интерпретирована не иначе как 2-хмерный массив строк произвольной длины
Leonid Troyanovsky (2005-08-18 12:07:00) [3]
> Digitman © (18.08.05 11:47) [20]
> для ДАННОЙ КОНКРЕТНОЙ ситуации можно поступить еще проще
> type
TParamType = (ptBlockMFRF, ptBlockPP);
> PBlockMFRF = ^TBlockMFRF;
> TBlockMFRF = Array[0..3] of Array[0..4] of string;
> PBlockPP = ^TBlockPP;
> TBlockPP = Array[0..40] of Array[0..4] of string;
>
> const
> BlockMFRF : TBlockMFRF = ...;
> BlockPP : TBlockPP = ...;
procedure ProcessBlock(param: TParamType);
--
Regards, LVT.
АлеКо (2005-08-18 12:04:00) [4]Спасибо за советы.
Пошел думать.
Digitman (2005-08-18 11:53:00) [5]пардон..
ProcessBlock(BlockMFRF, sizeof(BlockMFRF)); //обработка константы BlockMFRF
ProcessBlock(BlockPP, sizeof(BlockPP));//обработка константы BlockPP
Digitman (2005-08-18 11:48:00) [6]
> Плохиш © (18.08.05 11:47) [19]
> Гланды через одно место.
так точно, сэр !
Digitman (2005-08-18 11:47:00) [7]для ДАННОЙ КОНКРЕТНОЙ ситуации можно поступить еще проще :
type
PBlockMFRF = ^TBlockMFRF;
TBlockMFRF = Array[0..3] of Array[0..4] of string;
PBlockPP = ^TBlockPP;
TBlockPP = Array[0..40] of Array[0..4] of string;
const
BlockMFRF : TBlockMFRF = ...;
BlockPP : TBlockPP = ...;
procedure ProcessBlock(const Block; BlockSize: Integer);
begin
case BlockSize of
SizeOf(TBlockMFRF): PBlockMFRF(@Block)^ ...; //ветвление для TBlockMFRF
SizeOf(TBlockPP): PBlockPP(@Block)^ ...;//ветвление для TBlockPP
end;
end;
..
ProcessBlock(BlockMFRF);
ProcessBlock(BlockPP);
Плохиш (2005-08-18 11:47:00) [8]
> АлеКо (18.08.05 11:44) [18]
> Буду передавать в процедуру название константы.
> В теле процедуры буду обращаться косвенно через @.
Гланды через одно место.
АлеКо (2005-08-18 11:44:00) [9]Буду передавать в процедуру название константы.
В теле процедуры буду обращаться косвенно через @.
Digitman (2005-08-18 11:40:00) [10]
> АлеКо (18.08.05 11:34) [15]
> не слишком ли это сложно???
> Хотя, решение интересное.
как видишь, ничего сложного нет.
но как правило приемлемо лишь для небольших (ограниченных) по кол-ву вариаций типов передаваемых форм.параметров
если ты впоследствии плпнируешь настрогать еще пару тысяч различных таких вариаций, решение с overload вряд ли оправдано.
Digitman (2005-08-18 11:37:00) [11]
> Процедура одна на всех
ну тогда и не выпендривайся с типами.
объяви одну-единственную проц-ру, принимающую форм.параметром array of array of string
в теле же процедуры анализируй размерности фактически переданного дин.массива-параметра, и по результатам анализа ветви алгоритм нужным образом
вызывающий же код формирует передаваемый факт.параметр соотв.образом - либо иниц-ет дин.массив на основе данных типа Array[0.. 3] of Array[0..4] of string;
либо на основе тпипа
Array[0.. 40] of Array[0..4] of string;
3 или 40 в 1-й размерности переданного дин.массива как фактического параметра как раз и есть признак для ветвления алгоритма вызванной "Процедуры одной на всех"
Плохиш (2005-08-18 11:34:00) [12]
> АлеКо (18.08.05 11:28) [8]
> А как проиницилизировать константу
Так как написано в АлеКо (18.08.05 10:49)
АлеКо (2005-08-18 11:34:00) [13]Digitman а не слишком ли это сложно???
Хотя, решение интересное.
Leonid Troyanovsky (2005-08-18 11:33:00) [14]
> АлеКо (18.08.05 11:28) [8]
> А как проиницилизировать константу
>
> Const
> BlockMFRF : TMyType = (......)
Проинициализировать можно лишь TMyType = record,
скажем = (field1: 'abc'; field2: 'def';..)
--
Regards, LVT.
Digitman (2005-08-18 11:32:00) [15]
> АлеКо (18.08.05 11:28) [8]
> как проиницилизировать константу
это уже из другой оперы.
Паскаль, понимаешь ли ... чистой воды ...
АлеКо (2005-08-18 11:31:00) [16]Эти константы описывают шаблон файла.
Процедура одна на всех.
В процедуру подставляется шаблон и по нему обрабатывется.
Вот такая идея.
Digitman (2005-08-18 11:30:00) [17]а overload на что тогда существует ?
type
TBlockMFRF = Array[0..3] of Array[0..4] of string;
TBlockPP = Array[0..40] of Array[0..4] of string;
TForm1 = class(TForm)
..
procedure ProcessBlock(const MFRF: TBlockMFRF); overload;
procedure ProcessBlock(const PP: TBlockPP); overload;
..
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
BlockMFRF : TBlockMFRF = ...;
BlockPP : TBlockPP = ...;
..
procedure TForm1.ProcessBlock(const MFRF: TBlockMFRF);
begin
..
end;
procedure TForm1.ProcessBlock(const PP: TBlockPP);
begin
..
end;
...
ProcessBlock(BlockMFRF);
ProcessBlock(BlockBB);
Leonid Troyanovsky (2005-08-18 11:28:00) [18]
> АлеКо (18.08.05 10:49)
> Создал константы
> Теперь хочу использовать их в качестве входных параметров
> в процедуре.
А зачем их передавать, раз они константы?
Достаточно чтобы они были видимы процедуре.
--
Regards, LVT.
АлеКо (2005-08-18 11:28:00) [19]А как проиницилизировать константу
Const
BlockMFRF : TMyType = (......)
Плохиш (2005-08-18 11:25:00) [20]
> Описать константу в параметрах процедуры array of array
> of string не получится.
Вы об чём?