-
Никак не въеду в принцип работы ричедита в принципе и в кол тем более. Нужно тупо назначить конкретный шрифт и размер, конкретно всему тексту. Из того что мне удалось пример procedure Test;
Var s,dos:AnsiString;
begin
s:='Некоторые оптимизации оконных программ';
SetString(dos,nil,length(s));
CharToOemA(PAnsiChar(s),PAnsiChar(dos));
RichEdit1.BeginUpdate;
RichEdit1.Text:=dos;
RichEdit1.SelectAll;
RichEdit1.RE_Font.FontName:='Terminal';
RichEdit1.RE_Font.FontHeight:=320;
RichEdit1.EndUpdate;
RichEdit1.RE_SaveToFile('D:\txt.txt',reText,false);
end; в результате имя шрифта устанавливается, размер непонятно в каких единицах (на глаз 14й) тоже, но у текста визуально проглатываются буквы, при этом в сохраненном в файл тексте все норм. Кодировка оем и данный шрифт принципиальны. может надо еще какой-то параметр изменить? и вообще я правильно текст меняю или нет? например метод RichEdit1.RE_FmtFontName который вроде как тоже должен изменять имя шрифта абсолютно не работает
-
...
RichEdit1.RE_Font.FontHeight:=-14;
-
Всё это описано в книге по КОЛу..
> RE_FmtBold - стиль "утолщенный" для шрифта в области форматирования, > для того, > чтобы узнать, относится ли возвращенное значение ко всем > символам в области > выделения или только к первому символу, следует использовать > свойство: > RE_FmtBoldValid; > И, аналогичные свойства для прочих стилей символов: ... RE_FmtFontName и RE_FmtFontNameValid - имя шрифта.
-
описано, но тот же RE_FmtFontName не работает
и больше интересует почему буквы пропадают
-
RichEdit1.RE_Font.FontName:='Terminal';
RichEdit1.RE_Font.FontHeight:= 280; RichEdit1.RE_FmtBold:=false;
-
function StrAnsiToOem(aStr : String) : String;
begin
Result := '';
if Length(aStr) > 0 then begin
SetLength(Result, Length(aStr));
CharToOem(PChar(aStr), PChar(Result));
end;
end;
-
> RusSun © (20.02.16 18:56) [4]
мой код пробовал?
-
> и больше интересует почему буквы пропадают
ЌҐЄ®в®алҐ ®ЇвЁ¬Ё§ жЁЁ ®Є®ле Їа®Ја ¬¬ есть у меня decoder (win dos koi iso) обратно возвращает Некоторые оптимизации оконных программ
-
> Кодировка оем и данный шрифт принципиальны.
Как я понимаю это только для правильного отображения в консоли
program Project1;
uses
Windows;
function StrAnsiToOem(aStr : String) : String;
begin
Result := '';
if Length(aStr) > 0 then begin
SetLength(Result, Length(aStr));
CharToOem(PChar(aStr), PChar(Result));
end;
end;
begin
Writeln(StrAnsiToOem('Некоторые оптимизации оконных программ'));
Readln;
end.
-
procedure Test;
Var s1,s,dos:AnsiString;
begin
s:='Некоторые оптимизации оконных программ';
SetString(dos,nil,length(s));
CharToOemA(PAnsiChar(s),PAnsiChar(dos));
RichEdit1.BeginUpdate;
SetString(s1,nil,length(dos));
OemToChar(PAnsiChar(dos),PAnsiChar(s1));
RichEdit1.Text:=s1;
RichEdit1.SelectAll;
RichEdit1.RE_Font.FontName:='Terminal';
RichEdit1.RE_Font.FontHeight:=280;
RichEdit1.RE_FmtBold:=false;
RichEdit1.EndUpdate;
RichEdit1.RE_SaveToFile('txt.txt',reText,false);
end;
-
> описано, но тот же RE_FmtFontName не работает
Работает он..
Var
s: AnsiString;
dos: AnsiString;
begin
s := 'Некоторые оптимизации оконных программ';
dos := ansi2oem(s);
RichEdit1.Text := dos;
RichEdit1.SelectAll;
RichEdit1.RE_FmtFontCharset := DEFAULT_CHARSET;
RichEdit1.RE_FmtFontName := 'Terminal';
RichEdit1.RE_FmtFontSize := 9 * 20;
> и больше интересует почему буквы пропадают
А вот буквы пропадут.. То ли рич замечательный, то ли.. А зачем именно этот шрифт и именно oem?
-
> RusSun © (20.02.16 19:42) [7]
> RusSun © (20.02.16 20:01) [8]
ты можешь просто посмотреть на результат моего кода без догадок и изменений?
-
Да и с Memo таких проблем нету. Видимо в риче что-то не так
-
> Работает он..
как же работает, если у меня даже в пустом дефолтном проекте на RE_FmtFontName никакой реакции, только через RE_Font
-
> А зачем именно этот шрифт и именно oem?
затем, что это единственный способ в винде, корректно отобразить ДОСовский текст включая псевдографику в любом текстовом контроле
-
> как же работает, если у меня даже в пустом дефолтном проекте > на RE_FmtFontName никакой реакции, только через RE_Font
Ну у меня работает. Мб версия кол другая, мб ричи разные, гадать смысла не вижу.
> атем, что это единственный способ в винде, корректно отобразить > ДОСовский текст включая псевдографику в любом текстовом > контроле
В мемо шрифт отображается нормально
-
> DWorker (20.02.16 20:53) [15]
хм у меня в дефолте в этом риче вообще шрифт не меняется никаким способом, полюбому упоротая реализация версия последняя с твоим "фиксом" меню
-
Я тоже этот коловский ричедит не понимаю. Установил шрифт по умолчанию. Загрузка текста и его отображение происходит этим шрифтом. Но стоит начать набирать текст в любом месте - набирает системным.
-
> > RusSun © (20.02.16 20:01) [8] > > ты можешь просто посмотреть на результат моего кода без > догадок и изменений?
У меня > (20.02.16 19:42) [7] ЌҐЄ®в®алҐ ®ЇвЁ¬Ё§ жЁЁ ®Є®ле Їа®Ја ¬¬
-
> RusSun © (21.02.16 06:08) [18]
вот видишь у тебя даже шрифт не установился через RichEdit1.RE_Font.FontName, у меня установился но буквы пропали, а у DWorker другим методом RichEdit1.RE_FmtFontName установился что у меня не работает 3 человека - 3 разных результата
з.ы. проверил в ВКЛ, если коловский визуально проглатывает буквы "а" и двойные "н", то вкэловский только двойные "н"
|