Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.05;
Скачать: CL | DM;

Вниз

функция / процедура   Найти похожие ветки 

 
kcol   (2006-10-20 21:23) [0]

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

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

Спасибо!


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

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;


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

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


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

> [2] kcol   (20.10.06 21:37)

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


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

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


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

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


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

> [4] RASkov   (20.10.06 21:46)

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


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

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

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


 
Ketmar ©   (2006-10-20 21:59) [8]

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


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

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

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

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


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

нельзя.


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

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


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

Читать.

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

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

Думать.


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

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

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


 
Anatoly Podgoretsky ©   (2006-10-20 22:16) [14]


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

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


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

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


 
TUser ©   (2006-10-20 22:27) [16]

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


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

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;


 
Ketmar ©   (2006-10-20 22:32) [18]

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

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

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


 
TUser ©   (2006-10-20 22:46) [19]

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

Ууу, точно!


 
Leonid Troyanovsky ©   (2006-10-21 11:40) [20]


> 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.



Страницы: 1 вся ветка

Текущий архив: 2006.11.05;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.147 c
2-1161627334
Busik
2006-10-23 22:15
2006.11.05
Помогите програмисты,это очень важно для меня


2-1161095085
Виктория
2006-10-17 18:24
2006.11.05
Программа "Угадай число"


2-1161504506
m-kirill-2003
2006-10-22 12:08
2006.11.05
Имя пользователя


15-1160886789
ира
2006-10-15 08:33
2006.11.05
клавиатура


2-1161093853
novill
2006-10-17 18:04
2006.11.05
Как быстро превести много dfm файлов в тестовый вид?