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

Вниз

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

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

Наверх




Память: 0.49 MB
Время: 0.067 c
15-1161181718
Александр Иванов
2006-10-18 18:28
2006.11.05
Странное отношение к JOIN


2-1161615405
Aleks
2006-10-23 18:56
2006.11.05
Люди подскажите чем можно заменить компонент FileListBox1


2-1161248551
parasolka
2006-10-19 13:02
2006.11.05
Программа виснет.


15-1160671958
Kolan
2006-10-12 20:52
2006.11.05
Хочу попробовать сделать базу в ER Win, поможете?


15-1160150211
Velimir
2006-10-06 19:56
2006.11.05
Как сделать так чтобы пользователь не нажал на кнопку много раз?





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