Приложения с графическим интерфейсом не имеют назначенных stdin, stdout или stderr автоматически.Вы можете сделать что-то вроде:
procedure TForm1.FormCreate(Sender: TObject);
var
Buffer: array[0..1000] of Byte;
StdIn: TStream;
Count: Integer;
begin
StdIn := THandleStream.Create(GetStdHandle(STD_INPUT_HANDLE));
Count := StdIn.Read(Buffer, 1000);
StdIn.Free;
ShowMessageFmt('%d', [Count]);
end;
Если вы сделаете
dir *.pas | myapp.exe
Вы увидите сообщение с номером> 0, и если вы сделаете:
myapp.exe
Вы увидите окно сообщения с 0. В обоих случаях будет показана форма.