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

Вниз

Открытый массив для записей   Найти похожие ветки 

 
Alon121   (2007-05-09 15:19) [0]

Возможно ли передать открытым массивом записи во внутрь процедуры, не объявляя при этом массив при вызове?

Наверное туманно описал, приведу пример:

type
 TRec = record
   r: Integer;
   d: string;
 end;

procedure _smap(const rc: array of TRec);
begin
 for i := Low(rc) to High(rc) do ShowMessage(rc[i].d) ;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
 _smap([(1, "test-1"), (2, "test-2"), (3, "test-3")]);


Возможно ли осуществить вызов таким образом?


 
X9 ©   (2007-05-09 15:27) [1]

А попробовать?


 
Rial ©   (2007-05-09 15:29) [2]

А сложно сделать
procedure MyProc(Const stArray : Array of String; Const nArray : Array of Integer):
?


 
X9 ©   (2007-05-09 15:32) [3]

> [2] Rial ©   (09.05.07 15:29)

Нужно объявить Array of string и Array of Integer как типы.


 
Alon121   (2007-05-09 16:09) [4]

Хммм... ну получается, что нельзя так сделать?


> А сложно сделать procedure MyProc(Const stArray : Array
> of String; Const nArray : Array of Integer):?


Просто сам record на самом деле побольше и если я буду так делать, я просто запутаюсь.


 
begin...end ©   (2007-05-09 16:26) [5]

const
 RecArray: array [1..3] of TRec =
   ((r: 1; d: "test-1"), (r: 2; d: "test-2"), (r: 3; d: "test-3"));
begin
 ...
 _smap(RecArray);
 ...
end


 
Alon121   (2007-05-09 16:32) [6]


> const  RecArray: array [1..3] of TRec =    ((r: 1; d: "test-
> 1"), (r: 2; d: "test-2"), (r: 3; d: "test-3"));begin  ..
> .  _smap(RecArray);  ...end


Да, это я знаю, но хотелось сделать именно вызов без промежуточной переменной (RecArray).


 
{RASkov} ©   (2007-05-09 16:38) [7]

> Возможно ли передать открытым массивом записи во внутрь
> процедуры, не объявляя при этом массив при вызове?

> [6] Alon121   (09.05.07 16:32)

Нет, не получится... объявлять придется, либо см[5], или:
type
TRec = record
  r: Integer;
  d: string;
end;
TArrRec: array of TRec;

procedure _smap(const rc: TArrRec);
begin
for i := Low(rc) to High(rc) do ShowMessage(rc[i].d);
end;

procedure TMainForm.FormCreate(Sender: TObject);
var ArR: TArrRec;
begin
 SetLength(ArR, 3);
 ArR[0].r:=...
.....
 _smap(ArR);
end;


Но может и это устроит:
procedure _smap(rc: array of const);
var i: Integer;
begin
for i := Low(rc) to High(rc) do
 case rc[i].VType of
  vtAnsiString, vtString, vtChar: ShowMessage(rc[i].VPChar);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
_smap([1, "test-1", 2, "test-2", 3, "test-3"]);
end;


 
Rial ©   (2007-05-09 17:29) [8]

> [6] Alon121   (09.05.07 16:32)
> Да, это я знаю, но хотелось сделать именно вызов без промежуточной
> переменной (RecArray).

Если ты ее не объявяешь, это не значит, что
она на самом деле не создается.

Лучше сделай все явно сам.



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

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

Наверх




Память: 0.48 MB
Время: 0.041 c
3-1173133101
Mr. D.
2007-03-06 01:18
2007.05.27
Политика безопасности в Firebird


9-1139755441
angour
2006-02-12 17:44
2007.05.27
помощь по созданию игры "ГО" в Delphi


2-1178621389
allucard
2007-05-08 14:49
2007.05.27
ShellTreeView1 какое свойство хранить выбранную директорию.


2-1178650624
ММК
2007-05-08 22:57
2007.05.27
Включение с Windows


2-1178584148
dreamse
2007-05-08 04:29
2007.05.27
Подскажите функцию стандартную для проверки и добавления