![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
функция / процедура
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;