Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1277814153
_REA
2010-06-29 16:22
2010.09.26


11-1223506346
AnarchyMob
2008-10-09 02:52
2010.09.26
Ассемблер и Win CE


15-1277826513
AKE
2010-06-29 19:48
2010.09.26
Что вы думаете о идее:


6-1226291905
Publ
2008-11-10 07:38
2010.09.26
Скрыть HTTP_REFERRER


2-1277826858
DROWSY
2010-06-29 19:54
2010.09.26
В каком пакете находятся?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский