Конференция "KOL" » RichEdit в Kol [Delphi, Windows]
 
  • QAZ (19.02.16 17:42) [0]
    Никак не въеду в принцип работы ричедита в принципе и в кол тем более.
    Нужно тупо назначить конкретный шрифт и размер, конкретно всему тексту.
    Из того что мне удалось пример
    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]

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

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

    возникла теория что визуально скрытым буквам назначается другой шрифт, типа по умолчанию, но вот что за это отвечает...
 
Конференция "KOL" » RichEdit в Kol [Delphi, Windows]
Есть новые Нет новых   [118241   +25][b:0][p:0.002]