Форум: "Начинающим";
Текущий архив: 2010.09.26;
Скачать: [xml.tar.bz2];
ВнизРусификация Найти похожие ветки
← →
Nickolay (2010-07-01 12:06) [0]Сразу извиняюсь за свой "стон", но все-таки "консоль не поет по-русски": консольное приложение не выдает "Привет!" в Delphi 7 с помощью инструкции WriteLn("Привет!").
Пытался сделать по статье Евгения Каснерика с вашего сайта,
но процедур CharToOem, CharToOemBuff почему-то нет в библиотеке.
Как быть?
← →
Anatoly Podgoretsky © (2010-07-01 12:20) [1]> Nickolay (01.07.2010 12:06:00) [0]
Кто украл, а что ты делал? Может ты не указал нужные модули в USES
← →
RWolf © (2010-07-01 13:08) [2]Если запускать программу из-под FAR, то достаточно ввести предварительно команду chcp 1251. Весь консольный вывод будет перекодироваться в ANSI.
← →
Deltas © (2010-07-01 13:11) [3]uses
Windows;
function AnsiToOem(const S: string): string;
var
Length: Integer;
begin
Length := System.Length(S);
SetLength(Result, Length);
CharToOemBuff(PChar(S), PChar(Result), Length);
end;
← →
Deltas © (2010-07-01 13:11) [4]Writeln(AnsiToOem("Привет!"));
← →
Anatoly Podgoretsky © (2010-07-01 13:47) [5]
> Writeln(AnsiToOem("Привет!"));
> For compatibility with 16-bit versions of Windows, ...
← →
AnsiToOem (2010-07-01 14:02) [6]
function AnsiToOem(S: string): string;
begin
System.SetLength(Result, Length(S));
CharToOem(PChar(S), PChar(Result));
end;
Так чуть короче, безvar Length: Integer;
и мне не понятен смысл: (const S: string)
← →
И. Павел © (2010-07-01 14:10) [7]> и мне не понятен смысл
string не рекомендуется передавать по значению, если его не предполагается изменять - много времени занимает.
← →
Deltas © (2010-07-01 14:30) [8]
> Anatoly Podgoretsky © (01.07.10 13:47) [5]
> > Writeln(AnsiToOem("Привет!"));
> > For compatibility with 16-bit versions of Windows, ...
>
Я переопределил идентификатор AnsiToOem, здесь вызывается функция описанная чуть выше, в [3], а не та, которая импортирована из библиотеки и описана в модуле Windows.
← →
Игорь Шевченко © (2010-07-01 14:37) [9]
> Я переопределил идентификатор AnsiToOem, здесь вызывается
> функция описанная чуть выше, в [3], а не та, которая импортирована
> из библиотеки и описана в модуле Windows.
а зачем ?
← →
Deltas © (2010-07-01 14:39) [10]
> а зачем ?
Случайно
← →
AnsiToOem (2010-07-01 14:45) [11]В частности у меня эта функция называется:
function ConsToRussian(S: string): string;
begin
System.SetLength(Result, Length(S));
CharToOem(PChar(S), PChar(Result));
end;
никаких переопределений
:)
← →
Anatoly Podgoretsky © (2010-07-01 14:48) [12]
> Deltas © (01.07.10 14:30) [8]
Я уже увидел, невнимательным был и это подтверждение тезиза, что не надо использовать имена стандартных функций, если это не обосновано.
← →
Anatoly Podgoretsky © (2010-07-01 14:54) [13]Да еще и когда название не соответствует действию. Это не ANSItoOEM, а CharToOem
AnsiToOem (01.07.10 14:45) [11]
А у тебя функция не рабочая, рано или поздно получишь AV
← →
AnsiToOem (2010-07-01 14:58) [14]Почему не рабочая, если не затруднит, поясни, пожалуйста.
Довольно длительное время использую - на AV не нарывался.
← →
Deltas © (2010-07-01 15:00) [15]AnsiToOem (01.07.10 14:45) [11]
Все же, намного правильнее передавать в этом случае строку по ссылке, а не по значению. (const S: string), т.к. в этом случае в стек (или даже в регистр процессора может засунуть хитрый компилятор Delphi) будет записано всего 4 байта, вместо Length(S) + 9 байтов.
← →
AnsiToOem (2010-07-01 15:03) [16]> Deltas © (01.07.10 15:00) [15]
Соглашусь
← →
Deltas © (2010-07-01 15:12) [17]Anatoly Podgoretsky © (01.07.10 14:54) [13]
По-моему, функция рабочая, работа с памятью корректная.
← →
Nickolay (2010-07-01 15:24) [18]Ребята! Спасибо за функции и "uses Windows;" - все работает.
А вот "chcp 1251" - что-то не действует! Выдает, что "текущая страница уже есть 1251", а "Привет!" так и не печатает.
← →
RWolf © (2010-07-01 15:25) [19]
> Deltas © (01.07.10 15:12) [17]
> По-моему, функция
> рабочая, работа с памятью корректная.
вызови её так:ConsToRussian("");
← →
RWolf © (2010-07-01 15:27) [20]
> Nickolay (01.07.10 15:24) [18]
> Ребята! Спасибо за функции и "uses Windows;" - все работает.
> А вот "chcp 1251" - что-то не действует! Выдает, что "текущая
> страница уже есть 1251", а "Привет!" так и не печатает.
ключевое слово — «в FAR».
← →
Nickolay (2010-07-01 15:32) [21]Естественно, и "chcp 1251", и EXE-шник запускал из-под FAR!
← →
Deltas © (2010-07-01 15:33) [22]
> RWolf © (01.07.10 15:25) [19]
согласен
← →
Deltas © (2010-07-01 15:36) [23]
> RWolf © (01.07.10 15:25) [19]
тем более, если строка-параметр будет содержать нулевые символы, работать будет некорректно
← →
RWolf © (2010-07-01 15:46) [24]
> Nickolay (01.07.10 15:32) [21]
> Естественно, и "chcp 1251", и EXE-шник запускал из-под FAR!
http://clip2net.com/page/m0/6616284
← →
Nickolay (2010-07-01 15:56) [25]
> RWolf © (01.07.10 15:46) [24]
Все дело, наверное, в верии FAR. У меня:
The FAR manager, version 1.70 beta 2 (build 321)
Copyright (C) 1996-2000 Eugene Roshal, Copyright (C) 2000 FAR Group
← →
Anatoly Podgoretsky © (2010-07-01 16:36) [26]> RWolf (01.07.2010 15:25:19) [19]
Ну и как, насколько корректна работа с памятью,
← →
Dimka Maslov © (2010-07-01 17:15) [27]Вообще-то правильней будет переопределить системную переменную output, чтобы функция обработки вывода перекодировала в нужную кодировку а затем осуществляла вывод на консоль.
← →
Leonid Troyanovsky © (2010-07-01 23:19) [28]
> Dimka Maslov © (01.07.10 17:15) [27]
> Вообще-то правильней будет переопределить системную переменную
Сперва тож хотел заказать "Text-file device drivers", но,
поразмыслив о правильности, пропустил.
--
Regards, LVT.
← →
Anatoly Podgoretsky © (2010-07-02 00:54) [29]> Leonid Troyanovsky (01.07.2010 23:19:28) [28]
Побоялся, что скажут ты не умничай.
← →
Nickolay (2010-07-02 09:01) [30]Ребята, а про модуль Windows где можно почитать? А то у меня куча толстых книг (Архангельского, Хомоненко и др.), а про Windows только слегка упоминается. В справке Delphi тоже ничего нет.
← →
RWolf © (2010-07-02 09:29) [31]
> Nickolay (02.07.10 09:01) [30]
Пуск — Программы — Borland Delphi 7 — Help — MS SDK Help Files — Win32 SDK Reference.
← →
Anatoly Podgoretsky © (2010-07-02 10:35) [32]> Nickolay (02.07.2010 09:01:30) [30]
MSDN
← →
Nickolay (2010-07-02 12:52) [33]MSDN - это который в поставке Visual C++ 6.0 идет?
← →
Anatoly Podgoretsky © (2010-07-02 14:46) [34]> Nickolay (02.07.2010 12:52:33) [33]
Лучше который на сайте msdn.microsoft.com
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.09.26;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.004 c