Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > RichEdit


Автор: taiven 2.5.2009, 12:05
Вобщем, в связи с тем, что в стандартном TRichEdit нет нормальных Undo и Redo(т.к. используется RichEdit 1.0 насколько я понимаю) решил использвать более позднюю версию контрола. Делаю так:
Код

class RichControl : public TRichEdit
{
   public:
      __fastcall RichControl(TComponent *Owner) : TRichEdit(Owner){}
      void __fastcall CreateParams(TCreateParams& Params)
      {
         TRichEdit::CreateParams(Params);
         CreateSubClass(Params, "RichEdit20A");
      }
};

и всё бы хорошо, да вот только шрифт "Courier" нивкакую не хочет отображаться . Вместо него почему-то вылазит "Arial". Кто-нибудь сталкивался с чем-то подобным?  В чём может быть дело? У кого-нибудь ещё наблюдается подобный эффект?

Автор: A5uKa 2.5.2009, 17:04
Делаю точно так же как ты ... но шрифт Courier не использую smile

Но вот вопрос - где ты его вообще нашёл этот шрифт.
"Courier NEW" вижу а "Courier" нет. - видимо поэтому.

п.с. New Работает нормально.  smile 

Автор: taiven 3.5.2009, 20:59
Да нет, шрифт этот есть(например в стандартном Notepad.exe). Сейчас посмотрел, оказывается этот шрифт и в обычном TRichEdit ведёт себя странно... Например если сделать так:
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    RichEdit1->Font->Name = "Courier";
}

то для текста, который в данный момент находится в RichEdit шрифт меняется. Но, если после этого начать вводить текст, то он(вновь введённый текст) почему-то отображается другим шрифтом("Arial" вроде). При этом, если снова нажать на Button1, то вообще ничего не происходит.
С остальными шрифтами всё нормально работает, а с этим, какая-то ерунда... 

Автор: A5uKa 4.5.2009, 00:14
Пытливые умы... 

Я считаю, что в этой rtf этот формат не поддерживается или заменён на New... 
копайся...

Автор: mrbrooks 4.5.2009, 08:05
taiven, какая версия Бормана?
В 2009 к примеру для TRichEdit использует RichEdit 2.0. Правда с откатами изменений там все одно косяк - только одна операция отката. Выходили из ситуации таким способом.

Код

RichEdit1->Perform(EM_SETUNDOLIMIT,100,0); // задаем 100 операций для контрола

RichEdit1->Perform(EM_UNDO,0,0);                      // для UNDO

RichEdit1->Perform(EM_REDO,0,0);        // для REDO

Автор: Mpak 4.5.2009, 10:02
Насколько я понимаю, Courier это устаревший шрифт, и  нынче используется для определения семейства шрифтов, и как такого шрифта Courier сейчас нет.. А вот Courier New есть и он относится к семейству Courier... в общем чет такое.. хотя я могу быть не прав, т.к. это мои догадки по этому поводу. Вот smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)