Главная страница
    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.46 MB
Время: 0.047 c
2-1178606219
Ken9
2007-05-08 10:36
2007.05.27
Чтение самого себя


4-1166812769
O.O
2006-12-22 21:39
2007.05.27
Количество точек на дюйм экрана


2-1178279969
Бульбаш
2007-05-04 15:59
2007.05.27
Ошибка при запуске exe-шника.


3-1173273530
Silver...
2007-03-07 16:18
2007.05.27
Изменить порядок записей в DBGrid


11-1160160648
doozer
2006-10-06 22:50
2007.05.27
Где достать TGauge под KOL(MCK) ??





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский