Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

функция / процедура


kcol ©   (2006-10-20 21:23:00) 

Глупый вопрос, только начинаю изучать delphi.
Возможно ли в delphi сделать процедуру / функцию с открытым количеством входящих параметров. Т.е. приблизительно так:

fucntion AddToList(? :string): Boolean;
А вызвать её например так:
AddToList('my1ststring', 'my2ndstring', 'next', 'next again');

Спасибо!


Leonid Troyanovsky   (2006-10-21 11:40:00) [1]


> kcol   (20.10.06 21:51) [5]

> мы сделали открытый массив и соответственно при вызове функции
> использовали массив. А можно например вместо открытого массива
> использовать отдельные входящие параметры процедуры?


function ArrToStr(a: array of String): String;
var
 i: Longint;
begin
 Result := '';
 for i := Low(a) to High(a) do
   Result := Result + ' ' + a[i];
end;

procedure TForm1.Button2Click(Sender: TObject);
const
 maxa = 3;
var
 a : array [0..9] of String;
 i: Longint;
begin
 for i := 0 to maxa do
   a[i] := IntToStr(i);
 ShowMessage(ArrToStr(Slice(a, maxa+1)));
end;


--
Regards, LVT.


TUser   (2006-10-20 22:46:00) [2]

> Ketmar ©   (20.10.06 22:32) [18]

Ууу, точно!


Ketmar   (2006-10-20 22:32:00) [3]

>[16] TUser(c) 20-Oct-2006, 22:27
>xbnfq щзут фккфны d cghfdrt
в [12] эту тему даже дали на русском. %-)

зыж не все умеют читать "перевёртыши". %-)

>[15] kcol 20-Oct-2006, 22:19
>Если глупый вопрос -- я извиняюсь.
не самый глупый из тех, что тут бывают. %-)
подобные вызовы можно делать только для импортируемых из DLL функций с соглашением cdecl. но подозреваю, что это тебе уж точно не надо. %-)


RASkov   (2006-10-20 22:30:00) [4]

function NameFunc(const Args: array of const): Boolean;
var i: Integer;
begin
 for i:= Low(Args) to high(Args) do
  case Args[i].VType of
   vtInteger: оператор(ы);
   vtBoolean: оператор(ы);
   vtChar: оператор(ы);
   vtExtended: оператор(ы);
   vtString: оператор(ы);
   .....
  else оператор(ы); end;
end;


TUser   (2006-10-20 22:27:00) [5]

Удалено модератором


kcol   (2006-10-20 22:19:00) [6]

Да причем тут религия или боль, просто интересно стало; Если глупый вопрос -- я извиняюсь.


Anatoly Podgoretsky   (2006-10-20 22:16:00) [7]


> Writeln('Test', 1, 2, 3, 'Test', 'Again', 1, 2);
>
> Можно так вызывать свою функцию или процедуру? просто инетресно.
>  (т.е. без открытого массива)

Можно, а что открытый массив религия использовать не позволяет?


RASkov   (2006-10-20 22:16:00) [8]

> [12] Ученик чародея ©   (20.10.06 22:12)

Ну да... я ему в [7] это и написал но видимо [8]:)


Ученик чародея   (2006-10-20 22:12:00) [9]

Читать.

Некоторые библиотечные подпрограммы языка Delphi принимают параметры типа array of const - открытые массивы констант. Массив, передаваемый в качестве такого параметра, обязательно конструируется в момент вызова подпрограммы и может состоять из элементов различных типов (!). Физически он состоит из записей типа TVarRec, кодирующих тип и значение элементов массива (записи рассматриваются ниже). Открытый массив констант позволяет эмулировать подпрограммы с переменным количеством разнотипных параметров и используется, например, в функции Format для форматирования строки (см. выше).

http://ww.delphikingdom.ru/asp/viewitem.asp?catalogid=1182

Думать.


kcol   (2006-10-20 22:03:00) [10]

Все понятно. Спасибо за ответы!


Ketmar   (2006-10-20 22:02:00) [11]

нельзя.


kcol   (2006-10-20 22:00:00) [12]

Я говорю про что-то вроде writeln в консольном приложении.

 Writeln('Test', 1, 2, 3, 'Test', 'Again', 1, 2);

Можно так вызывать свою функцию или процедуру? просто инетресно. (т.е. без открытого массива)


Ketmar   (2006-10-20 21:59:00) [13]

есть подозрение, что автору просто больно писать "[" и "]".


RASkov   (2006-10-20 21:54:00) [14]

> А можно например вместо открытого массива использовать
> отдельные входящие параметры процедуры

Что имеешь ввиду? может это:
procedure NameProc(AConst :array of const);


RASkov   (2006-10-20 21:53:00) [15]

> [4] RASkov   (20.10.06 21:46)

Ну вот опять от Подгорецкого словлю:( за [1].
Вовремя поднятое несчитается уроненым:)


kcol   (2006-10-20 21:51:00) [16]

Спасибо! А всё равно, вопрос интересен, в данном случае мы сделали открытый массив и соответственно при вызове функции использовали массив. А можно например вместо открытого массива использовать отдельные входящие параметры процедуры?


RASkov   (2006-10-20 21:46:00) [17]

Блин, ну конечно же вызов не так делать надо, извеняюсь.
AddToList( ['my1ststring', 'my2ndstring', 'next', 'next again' ]);


RASkov   (2006-10-20 21:42:00) [18]

> [2] kcol   (20.10.06 21:37)

Приведи свой кусок кода.


kcol   (2006-10-20 21:37:00) [19]

Я что-то не то делаю? Не понимаю: Constants cannot be used as open array arguments.


RASkov   (2006-10-20 21:31:00) [20]

fucntion AddToList(S :array of string): Boolean;
вызов AddToList('my1ststring', 'my2ndstring', 'next', 'next again');

использование внутри
for i:= Low(S) to High(S) do begin
Result:=S[i]='bla';
if Result then Break;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо