Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.05.2014, 23:00
saw_vitali saw_vitali вне форума
Прохожий
 
Регистрация: 24.02.2013
Сообщения: 7
Репутация: 10
По умолчанию запись в RichEdit нижнего индекса

Доброго времени суток!
Мне необходима помощь.
Необходимо вывести результаты расчета в RichEdit в формате, как на скрине (с нижними индексами).
Изображения
Тип файла: jpg Ответ.jpg (10.6 Кбайт, 23 просмотров)
Ответить с цитированием
  #2  
Старый 12.05.2014, 02:13
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от saw_vitali
Необходимо вывести результаты расчета в RichEdit в формате, как на скрине (с нижними индексами).
Использовать SubScript или SuperScript в TRichEdit
Ответить с цитированием
  #3  
Старый 12.05.2014, 09:58
saw_vitali saw_vitali вне форума
Прохожий
 
Регистрация: 24.02.2013
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen

Спасибо.
Как я понимаю далее мне необходимо программно по символьно выводить строку и форматировать символы во время вывода?
На данный момент я вывожу результаты так:
FormResult.RichEdit1.Lines.Add('Результаты расчета: σ1='+Result1+' МПа и σ2= '+Result2+' МПа.' );

Последний раз редактировалось saw_vitali, 12.05.2014 в 10:08.
Ответить с цитированием
  #4  
Старый 12.05.2014, 10:04
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Можно и посимвольно сформировать строку, но мне кажется лучше ее сделать в формате rtf и уже этот текст загнать в RichEdit. Остается только посмотреть, как такой текст представляется в нужном формате.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 12.05.2014, 10:08
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от saw_vitali
Как я понимаю далее мне необходимо программно по символьно выводить строку и форматировать её во время вывода.
Можно и так. Но так как функция RE_SetCharFormat работает на выделении, то можно сразу поместить всю строку в RichEdit, а потом выделяя (SelStart-SelLength) нужные части применять эту функцию.

Кстати эта функция имитирует верхний/нижний индекс просто делая смещение текста вверх/вниз. Но у RichEdit есть и официальный способ сделать верхний/нижний индекс.

Вот исправленная версия этой функции, которая делает "настоящий" верхний/нижний индекс:
Код:
procedure RE_SetCharFormat2(aRichEdit: TRichEdit; CharacterFormat: TCharacterFormat);
var
  Format: TCharFormat2;
begin
  FillChar(Format, SizeOf(Format), 0);
  with Format do
  begin
    cbSize := SizeOf(Format);
    dwMask := RichEdit.CFM_SUBSCRIPT;

    case CharacterFormat of
      CFM_Superscript: dwEffects := CFE_SUPERSCRIPT;
      CFM_Subscript: dwEffects := CFE_SUBSCRIPT;
      CFM_Normal: dwEffects := 0;
    end;

  end;
  aRichEdit.Perform(EM_SETCHARFORMAT, SCF_SELECTION, Longint(@Format));
end;
Ответить с цитированием
  #6  
Старый 12.05.2014, 10:12
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Страдалецъ
Можно и посимвольно сформировать строку, но мне кажется лучше ее сделать в формате rtf и уже этот текст загнать в RichEdit. Остается только посмотреть, как такой текст представляется в нужном формате.
Если делать через rtf тогда вот эта ссылка должна помочь.
Ответить с цитированием
  #7  
Старый 12.05.2014, 14:27
saw_vitali saw_vitali вне форума
Прохожий
 
Регистрация: 24.02.2013
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Можно и так. Но так как функция RE_SetCharFormat работает на выделении, то можно сразу поместить всю строку в RichEdit, а потом выделяя (SelStart-SelLength) нужные части применять эту функцию.

Кстати эта функция имитирует верхний/нижний индекс просто делая смещение текста вверх/вниз. Но у RichEdit есть и официальный способ сделать верхний/нижний индекс.

Вот исправленная версия этой функции, которая делает "настоящий" верхний/нижний индекс:
Код:
procedure RE_SetCharFormat2(aRichEdit: TRichEdit; CharacterFormat: TCharacterFormat);
var
  Format: TCharFormat2;
begin
  FillChar(Format, SizeOf(Format), 0);
  with Format do
  begin
    cbSize := SizeOf(Format);
    dwMask := RichEdit.CFM_SUBSCRIPT;

    case CharacterFormat of
      CFM_Superscript: dwEffects := CFE_SUPERSCRIPT;
      CFM_Subscript: dwEffects := CFE_SUBSCRIPT;
      CFM_Normal: dwEffects := 0;
    end;

  end;
  aRichEdit.Perform(EM_SETCHARFORMAT, SCF_SELECTION, Longint(@Format));
end;



У меня данный код не заработал.
Можно рабочий проект?
Ответить с цитированием
  #8  
Старый 12.05.2014, 15:24
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Похоже это неполная часть некоего кода, который на просторах инета что-то не виден.
Вот тут видимо базовая основа всей этой конструкции:
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 12.05.2014, 15:35
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от saw_vitali
У меня данный код не заработал.
Можно рабочий проект?
Вот здесь пример: http://yadi.sk/d/aQd-V3vDPwPtm
По нажатию кнопки Button1 загружает текст из Edit1 в RichEdit1 и делает все гласные (русские) буквы нижним индексом.

UPD
Цитата:
Сообщение от Страдалецъ
Похоже это неполная часть некоего кода, который на просторах инета что-то не виден.
Вот тут видимо базовая основа всей этой конструкции:
Верно. Ссылку на базовую основу я давал в первом сообщении. Там имитируется верхний/нижний индекс сдвигом текста на некоторое расстояние вверх/вниз.
А вторая функция, это моя переделка базовой основы, которая пришла ко мне по прочтению MSDN и в которой уже используется настоящие верхние/нижние индексы, а не их имитация.

Последний раз редактировалось poli-smen, 12.05.2014 в 15:46. Причина: Добавил ответ для Страдалецъ
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
saw_vitali (12.05.2014)
  #10  
Старый 12.05.2014, 16:25
saw_vitali saw_vitali вне форума
Прохожий
 
Регистрация: 24.02.2013
Сообщения: 7
Репутация: 10
По умолчанию

poli-smen.....
Можно посмеяться, но скачал проект, откомпилировал его и .... он не работает....

Кинул на форму кнопки через обе процедуры первая работает а вторая нет....
Может у меня что то со средой?

Пользуюсь Delphi XE5 Up2
Вложения
Тип файла: rar Test.rar (2.18 Мбайт, 8 просмотров)
Тип файла: rar TestRichSubscript.rar (849.7 Кбайт, 9 просмотров)

Последний раз редактировалось saw_vitali, 12.05.2014 в 16:28.
Ответить с цитированием
  #11  
Старый 12.05.2014, 17:14
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от saw_vitali
poli-smen.....
Можно посмеяться, но скачал проект, откомпилировал его и .... он не работает....

Кинул на форму кнопки через обе процедуры первая работает а вторая нет....
Может у меня что то со средой?

Пользуюсь Delphi XE5 Up2
Попробуй заменить в примере тип String, на AnsiString. У меня в XE2 так заработало.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
saw_vitali (12.05.2014)
  #12  
Старый 12.05.2014, 17:53
saw_vitali saw_vitali вне форума
Прохожий
 
Регистрация: 24.02.2013
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Попробуй заменить в примере тип String, на AnsiString. У меня в XE2 так заработало.
Заработало
Ответить с цитированием
  #13  
Старый 13.05.2014, 01:39
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Ну и до кучи добавлю еще сюда вариант с rtf:
Код:
Var
  Stream: TStringStream;
begin
 Stream := TStringStream.Create;
 Stream.WriteString('{\rtf1\ansi\ansicpg1251\deff0{\fonttbl{\f0\froman\fcharset204 Times New Roman Cyr;}}\viewkind4\uc1\pard\lang1033\fs32 '+
                    'Результаты расчета: \u948\''3f\sub 1 \nosupersub = 250 Мпа и \u948 \''3f\sub 2 \nosupersub = 210 МПа}');
 Stream.Position := 0;
 RichEdit1.Lines.LoadFromStream(Stream);
 Stream.Free;
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:16.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter