Tak jak w temacie. Chodzi o parametr który nie musi byc podany w wywolaniu. W helpie znalazlem ale jakos to u mnie nie dziala.
Przykłady mile widziane.
Tak jak w temacie. Chodzi o parametr który nie musi byc podany w wywolaniu. W helpie znalazlem ale jakos to u mnie nie dziala.
Przykłady mile widziane.
A jak próbujesz?
Albo dajesz parametr z podaną wartością (musi być na końcu listy parametrów) np
function a(x:string; i: integer=5) : byte;
albo robisz funjce przeciążone o różnej liczbie parametrów
function a (i: integer; f: file) : byte; overload;
function a (i: integer; f: file; s: string): byte; overload;
Nie o takie parametry mi chodzi. Chodzi o parametr opcjonalny czyli np. moze ich byc 3 albo 4 ale nie sa to procedury przeciążone (overload) ani z wartoscią domyślna.
Chodzi o taki parametr jak ma np. BlockRead a dokladniej jego drugi parametr jest takim o jaki mi chodzi!!
Takie jak podajesz to ja znam i dzialaja mi.
Tak czy siak dzięki.
AFAIK tą możliwość mają tylko pseudoprocedury zawarte już w kompilatorze. Sam tego nie zrobisz (jak się mylę, to proszę o sprostowanie - chętnie się dowiem, jeżeli jest to możliwe, jak to się robi :)).
Może zajrzeć do kodu VCL (ja nie mogę, mam Personala) i sprawdzić jak jest zadeklarowane BlockRead? Ja obstawiam że przez overload...
Może zajrzeć do kodu VCL (ja nie mogę, mam Personala) i sprawdzić jak jest zadeklarowane BlockRead? Ja obstawiam że przez overload...
W VCL nie ma. To jest zdefiniowane w module System. Ponieważ modułu system nie trzeba dołączać, to prawdopodobnie to jest wbudowane w kompilator (tak jak wiele innych nie ukazanych w module System).
Wątpię, by to było overload, ponieważ przy przedładowanych funkcjach ciężko byłoby umieścić to w środku.
W przypadku BlockRead wydaje mi się, że ten drugi parametr jest w rzeczywistości jedynie wskaźnikiem. To jest najprostrzy sposób, aby zachować odpowiedni rozmiar wywołania funkcji. Z tym, że kompilator troszkę nas oszukuje i zamienia od razu typy.