Może tak:
procedure KopiujStrumienie(const ZKtorego: TStream; var DoKtorego: TStream);
Jeżeli zrobiłbyś tak:
function KopiujStrumienie(ZKtorego: TStream): TStream;
To program musiałby skopiować całą zawartość streamu ZKtorego do instancji w funkcji KopiujStrumienie, funkcja skopiowałaby zawartość do Result, a potem z Resulta trzeba byłoby skopiować instancję do miejsca, z którego funkcja była wywoływana (czyli zamiast jednego kopiowania - aż 3).
W pierwszym nagłówku jest przekazywany tylko wskaźnik do zmiennej ZKtorego, a jako wyjście wskaźnik do zmiennej DoKtorego. const i var różnią się tym, że zmiennej opatrzonej przez const nie można edytować w danej procedurze. Operacje na zmiennych ZKtorego i DoKtorego byłyby skierowane do wskaźnika, a ten wskazuje miejsce w pamięci, gdzie przechowywane są strumienie.