|
Вопрос # 4 849/ вопрос закрыт / |
|
Здравствуйте, эксперты!
Подскажите пожалуйста как с помощью функции WriteConsoleInput вывести текстовое сообщение в консоль, да еще по определенным координатам?
Я пробовал пользоваться WriteConsoleOutputCharacter, но как выяснил у нее проблемы с русской кодировкой.
Заранее спасибо!
 |
Вопрос задал: blackhawk (статус: Посетитель)
Вопрос отправлен: 22 декабря 2010, 13:21
Состояние вопроса: закрыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: min@y™
Переместил по просьбе автора вопроса.
Цитата (blackhawk):
Но насколько это правильно, пока не решил...
На-ка вот глянь мой самодельный модуль по работе с кодировками. Может пригодится?
UPD: если администрация желает, то может переместить мой модуль в файловый архив, может быть кому-нибудь ещё пригодится.
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 23 декабря 2010, 11:11
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 26; последнее сообщение — 23 декабря 2010, 11:25; участников в обсуждении: 4.
Страницы: [1] [2] [Следующая »]
|
min@y™ (статус: Доктор наук), 22 декабря 2010, 13:49 [#1]:
WriteConsoleInput() - это ВВОД, а не вывод.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
blackhawk (статус: Посетитель), 22 декабря 2010, 15:04 [#2]:
min@y™:
"WriteConsoleInput() - это ВВОД, а не вывод."
Да, Вы правы. Я ошибся при написании.
Сформулирую по другому. Мне нужно поместить в консоль текстовое сообщение по определенным координатам и чтобы нормально распознавалась как английская, так и русская кодировки
|
|
min@y™ (статус: Доктор наук), 22 декабря 2010, 15:29 [#3]:
А консоль своя или чужая?
Есть у меня один модуль интересный. Называется CRT32.pas...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
blackhawk (статус: Посетитель), 22 декабря 2010, 15:43 [#4]:
Консоль чужая. Это вообще редактор Far.
Я без проблем помещаю сообщение функцией WriteConsoleOutputCharacter. Но сообщение может быть и в русской кодировке. Соответственно вижу кракозябры.
При попытке перевести в OEM все падает, но эта уже другая проблема.
Хотелось бы все таки воспользоваться WriteConsoleInput
|
|
blackhawk (статус: Посетитель), 22 декабря 2010, 15:46 [#5]:
Просто мне еще не совсем понятно как нужно заполнить структуру INPUT_RECORD, чтобы работать именно с текстовым сообщением. и как указать координаты.
|
|
mirt.steelwater (статус: Посетитель), 22 декабря 2010, 15:52 [#6]:
у меня та же проблема - как писать в чужую консоль, ждать пока она ответит, читать, что она ответила - снова писать и т.п.
я начал для этого писать свой класс на основе TThread - надеюсь, что получится..
Ⓐ свобода сопротивление солидарность
|
|
min@y™ (статус: Доктор наук), 22 декабря 2010, 16:14 [#7]:
Цитата (blackhawk):
При попытке перевести в OEM все падает, но эта уже другая проблема.
Вот с этой проблемы нужно и начинать.
Что падает? Как падает? Код вызова функции преобразования в студию!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
blackhawk (статус: Посетитель), 22 декабря 2010, 16:27 [#8]:
var
HConsole: THandle;
WrBuff: LongWord;
Coord:_COORD;
Buff: String;
Buff2: String;
begin
HConsole:=GetStdHandle(STD_OUTPUT_HANDLE);
Coord.x:=2;
Coord.y:=2;
Buff:='абвгд';
SetLength(Buff2, Length(Buff));
CharToOem(PChar(Buff2), PChar(Buff));
WriteConsoleOutputCharacter(HConsole, PChar(Buff2), Length (Buff2) + 1, Coord, WrBuff);
При попытке вызвать CharToOem - приложение сразу валиться
|
|
mirt.steelwater (статус: Посетитель), 22 декабря 2010, 16:29 [#9]:
а если Length(Buff) = 0 -- что будет?)
Ⓐ свобода сопротивление солидарность
|
|
blackhawk (статус: Посетитель), 22 декабря 2010, 16:33 [#10]:
Тоже самое
"Исключительная ситуация
Исключение: Нарушение доступа (запись в 0х01064735)
Адрес: 0х7Е36AF1D
Функция ProcessEditorInputW"
|
|
mirt.steelwater (статус: Посетитель), 22 декабря 2010, 16:34 [#11]:
так напиши
var
Buff: String;
Buff2: PChar;
begin
Buff:='абвгд';
Buff2 := AllocMem ( Length (Buff) * SizeOf (Char) );
try
Buff2 := PChar (Buff);
CharToOem (Buff2,Buff2);
Buff := StrPas (Buff2);
finally
FreeMem (Buff2);
Buff2 := NIL;
end;
end;
Ⓐ свобода сопротивление солидарность
|
|
blackhawk (статус: Посетитель), 22 декабря 2010, 16:38 [#12]:
гы, то же самое. Только теперь еще и неизвестное исключение
|
|
blackhawk (статус: Посетитель), 22 декабря 2010, 16:39 [#13]:
Такое ощущение, что фару сам вызов CharToOem не нравиться.
|
|
blackhawk (статус: Посетитель), 22 декабря 2010, 16:51 [#14]:
Не нравиться выделение памяти. В принципе.
|
|
min@y™ (статус: Доктор наук), 22 декабря 2010, 16:52 [#15]:
SetLength(Buff2, Length(Buff) + 1);
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Вадим К (статус: Академик), 22 декабря 2010, 16:53 [#16]:
на сколько мне известно, последние версии Far - юникодные. Так что CharToOem не поможет.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 22 декабря 2010, 16:53 [#17]:
Цитата (blackhawk):
Не нравиться выделение памяти. В принципе.
А как ты думаешь, что делается у тебя процедурой SetLength()? Уж не выделение ли памяти?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
blackhawk (статус: Посетитель), 22 декабря 2010, 16:57 [#18]:
Вадим К:
"на сколько мне известно, последние версии Far - юникодные. Так что CharToOem не поможет."
Какие у меня варианты?
|
|
blackhawk (статус: Посетитель), 22 декабря 2010, 16:59 [#19]:
min@y™:
"А как ты думаешь, что делается у тебя процедурой SetLength()? Уж не выделение ли памяти?"
Конечно выделение. Изменение размера массива строк. Но это прокатывает.
Ошибка возникает сразу, как только вызывают CharToOem
|
|
mirt.steelwater (статус: Посетитель), 22 декабря 2010, 17:08 [#20]:
используй WideString
там действительно в размере памяти +1 нужно, я ошибся
Ⓐ свобода сопротивление солидарность
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|