| « Поставить закладку » « Сделать стартовой » | |||
|
|||
| Статьи:: Delphi :: Разные статьи :: Русификация компонента TRichEdit
Русификация компонента TRichEdit
Для того, чтобы компонент TRichEdit сохранял символы национальных алфавитов в их натуральном виде, а не в виде шестнадцатиричных кодов, необходимо создать специальный конвертор и зарегистрировать его в компоненте. Конвертор наследуется от класса TConversion, в котором определены два виртуальных метода ConvertReadStream и ConvertWriteStream, которые отвечают за преобразование потока символов соответственно при чтении и записи файла. Чтение файла, содержащего русские символы, происходит корректно и без применения специальных мер, поэтому мы должны перекрыть только метод записи. В перекрытом методе необходимо разместить код, преобразующий шестнадцатиричные коды в символы русского алфавита. Ниже приведен пример русификации (redMain - компонент типа TRichEdit).
type
// Объявляем класс конвертора.
TRussianConvertor=class(TConversion)
// Перекрываем только метод записи в поток.
function ConvertWriteStream(Stream: TStream; Buffer: PChar;
BufSize: Integer): Integer; override;
end;
// Реализация метода записи в поток.
function TRussianConvertor.ConvertWriteStream(Stream: TStream;
Buffer: PChar; BufSize: Integer): Integer;
type
// Тип, упрощающий анализ потока символов.
TFourChars = record
HexTag,HexCode: array[0..1] of Char;
end;
PFourChars=^TFourChars;
var
RusBuffer: PChar;
i,RusSize: Integer;
// Функция, преобразующая двухсимвольное
// Hex-представление в символ.
function HexToChar(Hex: PChar): Char;
function HexNumber(C: Char): Integer;
begin
C:=UpCase(C);
case C of
'0'..'9': Result:=Ord(C)-Ord('0');
'A'..'F': Result:=Ord(C)-Ord('A')+10;
else Result:=0;
end;
end;
begin
Result:=Chr(HexNumber(Hex[0])*16+HexNumber(Hex[1]));
end;
begin
RusBuffer:=StrAlloc(BufSize);
RusSize:=0;
i:=0;
// Цикл по всем символам.
while i<BufSize do
begin
with PFourChars(@Buffer[i])^ do
// Hex-представление символа.
if HexTag='''' then
begin
RusBuffer[RusSize]:=HexToChar(HexCode);
Inc(i,4);
end
else
// Все остальные случаи.
begin
RusBuffer[RusSize]:=Buffer[i];
Inc(i);
end;
Inc(RusSize);
end;
// Запись нового буфера в поток.
Result:=Stream.Write(RusBuffer^,Pred(RusSize));
StrDispose(RusBuffer);
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
// Регистрация конвертора для расширения rft.
redMain.RegisterConversionFormat('rtf',TRussianConvertor);
end;
По аналогичному принципу может быть построен, например, конвертор, позволяющий загружать и сохранять файлы в формате Microsoft Word. Рубрика: Разные статьи
XML документация в C#.
Сегодня речь пойдет об одной интересной и полезной возможности языка С#, которая поможет нам в документировании кода. Она называется «XML документация» или «Документирующие комментарии XML». Это такие специальные теги XML, которые содержаться в комментариях и описывают свойства или методы в конкретном файле. Так вот, есть по крайней мере три веских причины, почему всегда следует заполнять XML комментарии.
Подробнее... |
Рубрика: XML в .NET
| Добавлено: 08.10.2008
Курсоры в MySQL 5.
Начиная с 5-ой версии, MySQL имеет возможность создавать курсоры. Курсор — это виртуальная таблица, предоставляющая альтернативный способ просмотра табличных данных. Курсор не содержит данных, а лишь ссылается на них из других таблиц. Из этого вытекает ряд особенностей, но об этом ниже.
Подробнее... |
Рубрика: MySQL
| Добавлено: 08.10.2008
Microsoft опубликовала подробности о сессиях Windows 7.
Подробнее... |
Рубрика: Мероприятия
| Добавлено: 08.10.2008
Остальные статьи:
Microsoft делится подробностями о том, что будет после Windows
Тестируем новый javascript от нового браузера Google
MySQL Query Cache
Использование провайдеров компиляции в Asp.net
Чего мы ждем от C# 4.0
Delphi 2009 и C++Builder 2009
Джоэл Спольски и Джеф Этвуд запустили новый вебсайт для программистов - StackOve...
Поиск кода Google /* что нового? */
10 jQuery скриптов для улучшения интерфейса
Генераторы отчетов FastReport 4 и QuickReport 5: версии 2008 года
День программиста — набор стерeотипов
Индусские програмисты
Вышел Django 1.0
Портативная версия Google Chrome Portable
Исходные коды .Net Frameword 3.5 SP1 для отладки в Visual Studio
Пишем правильный online WYSIWYG-редактор |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|