Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.037 c
15-1177432387
ArtemESC
2007-04-24 20:33
2007.05.27
Photoshop


15-1177427579
guestfromwwww
2007-04-24 19:12
2007.05.27
помогите разобраться с Кнутом.


1-1175194336
dreamse
2007-03-29 22:52
2007.05.27
Как запустить ярлык созданый с сетевого подключения ?


15-1177276116
werkina
2007-04-23 01:08
2007.05.27
первый раз


8-1158295080
SlayerX
2006-09-15 08:38
2007.05.27
Как развернуть окно на весь экран?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский