Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 458

/ вопрос решён /

Доброго времени суток, уважаемые эксперты!
Помогите доделать программу. Цель выводить символы разного цвета в RichEdit.
Печатные символы должны выводиться одним цветом, вместо не печатных должен быть их код другим цветом

const c: array [boolean] of tcolor=(clred, clblue);
var b: byte;
    m: boolean;
    i: integer;
begin
  i:=0;
  while i<29 do begin
    b:=round(i*255/30);
    inc(i);
    m:=b in [48..58,65..90,97..122,192..255];
    richedit1.SelAttributes.color:=c[m];
    if m then
      richedit1.Lines.Strings[0]:=
        richedit1.Lines.Strings[0]+chr(b)+','
      else
      richedit1.Lines.Strings[0]:=
        richedit1.Lines.Strings[0]+inttohex(b,2)+',';
  end;
end;

Drinkenz Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Drinkenz (статус: 1-ый класс)
Вопрос отправлен: 24 июля 2013, 20:05
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 8; последнее сообщение — 26 июля 2013, 19:59; участников в обсуждении: 2.
min@y™

min@y™ (статус: Доктор наук), 24 июля 2013, 20:22 [#1]:

Ну а выводится-то в итоге что? Где скриншот?
И самое главное: если нужно разноцветный текст только отображать, то использование TRichEdit - хреновая идея.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Drinkenz

Drinkenz (статус: 1-ый класс), 24 июля 2013, 20:36 [#2]:

Все символы выводятся черным цветом. Скриншоты я не умею вставлять.
min@y™

min@y™ (статус: Доктор наук), 24 июля 2013, 20:48 [#3]:

Цитата (Drinkenz):

Все символы выводятся черным цветом.

А для чего именно такой функционал? Для чего это всё с практической точки зрения? Я это к тому, что изначально TRichEdit, IMHO, самый глючный компонент в системе. В своей практике я всегда старался избегать его использования, и мне это всегда удавалось. Если цветной текст нужен только для просмотра (и копирования в б/о), то можно воспользоваться чем-нибудь попроще и постабильнее.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Drinkenz

Drinkenz (статус: 1-ый класс), 24 июля 2013, 20:58 [#4]:

Какие компоненты могут быть проще RichEdit? Если Memo, то он не поддерживает цветных шрифтов.
Код будет использован для просмотра содержимого всякого рода файлов. При просмотре можно будет чисто визуально отличить русские от английских букв, печатное от не печатного, возможно выделить цветом всякие теги,чанки,сигнатуры. Наподобие HIEW короче.
Drinkenz

Drinkenz (статус: 1-ый класс), 24 июля 2013, 21:04 [#5]:

На данный момент я занимаюсь отладкой LZW кодировщика и какой нибудь инструмент для просмотра выходящего потока байт был бы очень кстати.
А буквы цветные нужны для наглядности.
min@y™

min@y™ (статус: Доктор наук), 24 июля 2013, 21:28 [#6]:

Цитата (Drinkenz):

Какие компоненты могут быть проще RichEdit?

Для просмотра - есть. Например, TWebBrowser, THtmlLite и прочие компоненты для просмотра HTML.
Есть ещё вариант покруче - использовать TSynEdit, но для него надо будет написать соответствующий компонент-highlighter - движок пользовательской онлайн-подсветки синтаксиса, если выделять коды непечатных символов как-нибудь так: abcd{0x1D}efgh, но это на любителя...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Drinkenz

Drinkenz (статус: 1-ый класс), 26 июля 2013, 19:00 [#7]:

Решил проблему добавлением TWebBrowser. Может кому пригодится.

procedure Adw(b: byte);
const tg: array[boolean,0..1]of string=
  (('<span style="color: #00f; font-size: 26px">','</span>'),
  ('<span style="color: #f00; font-size: 20px; font-weight: bold">','</span>'));
var m: boolean;
     s: string;
begin
with form1 do begin
  m:=(b in [48..57,65..90,97..122,192..255]);// цифры, англ, русск. буквы
  if m then
      s:=chr(b)+','
      else
      s:=inttohex(b,2)+',';
  web.add(tg[m,0]+s+tg[m,1]);
  web.SaveToFile('temp.htm');
  invalidate;
end;
end;
// использование:  Adw(255)

этот код добавить в FormPaint
Webbrowser1.Navigate('file:///'+
  ExtractFilePath(application.ExeName)+'temp.htm');

26 июля 2013, 19:01: Статус вопроса изменён на решённый (изменил автор вопроса — Drinkenz)

min@y™

min@y™ (статус: Доктор наук), 26 июля 2013, 19:59 [#8]:

Через файл - гениально ужас! Если заюзаешь THtmlLite, обойдёшься без файла и ядра Internet Explorer.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:35
Выполнено за 0.03 сек.