Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

RichEdit в Kol [Delphi, Windows]


QAZ   (19.02.16 17:42

Никак не въеду в принцип работы ричедита в принципе и в кол тем более.
Нужно тупо назначить конкретный шрифт и размер, конкретно всему тексту.
Из того что мне удалось пример
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 который вроде как тоже должен изменять имя шрифта абсолютно не работает


RusSun ©   (19.02.16 19:40[1]

...
RichEdit1.RE_Font.FontHeight:=-14;


DWorker   (20.02.16 06:08[2]

Всё это описано в книге по КОЛу..


> RE_FmtBold - стиль "утолщенный" для шрифта в области форматирования,
>  для того,
> чтобы узнать, относится ли возвращенное значение ко всем
> символам в области
> выделения или только к первому символу, следует использовать
> свойство:
> RE_FmtBoldValid;
> И, аналогичные свойства для прочих стилей символов:
...
RE_FmtFontName и RE_FmtFontNameValid - имя шрифта.


QAZ   (20.02.16 18:33[3]

описано, но тот же RE_FmtFontName не работает

и больше интересует почему буквы пропадают


RusSun ©   (20.02.16 18:56[4]

RichEdit1.RE_Font.FontName:='Terminal';
RichEdit1.RE_Font.FontHeight:= 280; //14 в ворде
RichEdit1.RE_FmtBold:=false;


RusSun ©   (20.02.16 19:00[5]

function StrAnsiToOem(aStr : String) : String;
begin
 Result := '';
 if Length(aStr) > 0 then begin
   SetLength(Result, Length(aStr));
   CharToOem(PChar(aStr), PChar(Result));
 end;
end;


QAZ   (20.02.16 19:00[6]


> RusSun ©   (20.02.16 18:56) [4]

мой код пробовал?


RusSun ©   (20.02.16 19:42[7]


> и больше интересует почему буквы пропадают


ЌҐЄ®в®алҐ ®ЇвЁ¬Ё§ жЁЁ ®Є®­­ле Їа®Ја ¬¬
есть у меня decoder (win dos koi iso) обратно возвращает
Некоторые оптимизации оконных программ


RusSun ©   (20.02.16 20:01[8]


> Кодировка оем и данный шрифт принципиальны.

Как я понимаю это только для правильного отображения в консоли


program Project1;

{$APPTYPE CONSOLE}

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.


RusSun ©   (20.02.16 20:24[9]

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.RE_Font.FontHeight:= 280; //14 в ворде
 //
 RichEdit1.EndUpdate;
RichEdit1.RE_SaveToFile('txt.txt',reText,false);
end;


DWorker   (20.02.16 20:38[10]


> описано, но тот же 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?


QAZ   (20.02.16 20:40[11]


> RusSun ©   (20.02.16 19:42) [7]


> RusSun ©   (20.02.16 20:01) [8]

ты можешь просто посмотреть на результат моего кода без догадок и изменений?


DWorker   (20.02.16 20:44[12]

Да и с Memo таких проблем нету. Видимо в риче что-то не так


QAZ   (20.02.16 20:47[13]


> Работает он..

как же работает, если у меня даже в пустом дефолтном проекте на RE_FmtFontName никакой реакции, только через RE_Font


QAZ   (20.02.16 20:49[14]


> А зачем именно этот шрифт и именно oem?

затем, что это единственный способ в винде, корректно отобразить ДОСовский текст включая псевдографику в любом текстовом контроле


DWorker   (20.02.16 20:53[15]


> как же работает, если у меня даже в пустом дефолтном проекте
> на RE_FmtFontName никакой реакции, только через RE_Font


Ну у меня работает. Мб версия кол другая, мб ричи разные, гадать смысла не вижу.


> атем, что это единственный способ в винде, корректно отобразить
> ДОСовский текст включая псевдографику в любом текстовом
> контроле


В мемо шрифт отображается нормально


QAZ   (20.02.16 21:10[16]


> DWorker   (20.02.16 20:53) [15]

хм у меня в дефолте в этом риче вообще шрифт не меняется никаким способом, полюбому упоротая реализация
версия последняя с твоим "фиксом" меню


Dimaxx ©   (21.02.16 00:27[17]

Я тоже этот коловский ричедит не понимаю. Установил шрифт по умолчанию. Загрузка текста и его отображение происходит этим шрифтом. Но стоит начать набирать текст в любом месте - набирает системным.


RusSun ©   (21.02.16 06:08[18]


> > RusSun ©   (20.02.16 20:01) [8]
>
> ты можешь просто посмотреть на результат моего кода без
> догадок и изменений?

У меня > (20.02.16 19:42) [7] ЌҐЄ®в®алҐ ®ЇвЁ¬Ё§ жЁЁ ®Є®­­ле Їа®Ја ¬¬


QAZ   (21.02.16 10:40[19]


> RusSun ©   (21.02.16 06:08) [18]

вот видишь у тебя даже шрифт не установился через RichEdit1.RE_Font.FontName, у меня установился но буквы пропали, а у DWorker другим методом RichEdit1.RE_FmtFontName установился что у меня не работает
3 человека - 3 разных результата

з.ы. проверил в ВКЛ, если коловский визуально проглатывает буквы "а" и двойные "н", то вкэловский только двойные "н"


DWorker   (21.02.16 15:36[20]


> з.ы. проверил в ВКЛ, если коловский визуально проглатывает
> буквы "а" и двойные "н", то вкэловский только двойные "н"


Одним словом ричедит - "замечательный" компонент. А почему мемо не подходит? У меня на небольшом тесте отображало все буквы


QAZ   (21.02.16 16:17[21]


> А почему мемо не подходит?

ну раз у меня была необходимость отображать РТФ, то хотелось бы на полную использовать, а не городить набор элементов + нужен цвет, если найду как в мемо минимальным кодом буквы красить, то забью на рич

возникла теория что визуально скрытым буквам назначается другой шрифт, типа по умолчанию, но вот что за это отвечает...


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо