Учитывая ручку (hStdOut здесь) на стандартное устройство вывода , я использую следующие 2 процедуры, чтобы написать произвольную строку из консольного приложения:Как написать строку Unicode в буфер экрана консоли?
Выдержки:
procedure Send(const s: string);
var
len: cardinal;
begin
len:=Length(s);
WriteFile(hStdOut,s[1],len,len,nil);
end;
procedure SendLn(const s: string);
begin
Send(s + #13#10);
end;
Моя проблема:
Этот оператор не корректно отображает строку, как я ожидал:
SendLn('The harder they come...');
Мой вопрос:
Есть ли «WideString» перегрузка WriteFile
или я должен рассмотреть другую функцию Юникод, что доступ к буферу экрана консоли?
Благодарим за ответ. Проблема длины адресуется с помощью ByteLength, но у меня все еще есть проблемы: каждый символ строки визуализируется с дополнительным символом пробела. – menjaraz
@menjaraz Да, это потому, что ваше устройство stdout ожидает ANSI, я думаю. Попробуйте второй фрагмент кода в ответе. У вас есть дополнительная информация о том, с каким типом устройств вывода вы работаете. –
Вы правы, он ожидает ANSI. – menjaraz