Главная страница
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.088 c
15-1177774830
oldman
2007-04-28 19:40
2007.05.27
Ну вот и суббота (которая понедельник) на исходе...


2-1178467571
Malik
2007-05-06 20:06
2007.05.27
TMemo


15-1177401564
Knight
2007-04-24 11:59
2007.05.27
Кто какие свитчи в районе 3-4 тр. на 16 портов пользует?


9-1152022832
@!!ex
2006-07-04 18:20
2007.05.27
Мерцает от перемещения Виндовых окон.


15-1177516378
Pazitron_Brain
2007-04-25 19:52
2007.05.27
Подскажите читалку книг