Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

RichEdit или Memo color

1.9K
11 августа 2003 года
-cheese-
25 / / 01.07.2003
Люди кто знает можно ли в мэмо или рич эдите часть текста выделить отличным от остального цветом
358
11 августа 2003 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by -cheese-
Люди кто знает можно ли в мэмо или рич эдите часть текста выделить отличным от остального цветом


Вот кусочек трэда с bdn:

> Does anybody has any example routines of how
> to do syntax highlighting in a TRichEdit component.

TRichEdit is not designed for syntax highlighting. Although possible, the
effect is very slow and not very accurate or effective at all. You would be
best off using a component that is specifically designed for syntax
highlighting, such as TSynEdit, http://synedit.sourceforge.net

427
12 августа 2003 года
Glazunov Oleg
79 / / 20.03.2000
Цитата:
Originally posted by -cheese-
Люди кто знает можно ли в мэмо или рич эдите часть текста выделить отличным от остального цветом



На сколько я знаю: в мэмо - нельзя, а в рич эдите - можно, правда задание различных параметров (шрифт, цвет, размер букв и т.д.) происходит по абзацам.

2.5K
15 августа 2003 года
VladСD
24 / / 20.04.2003
Цитата:
Originally posted by Glazunov Oleg


На сколько я знаю: в мэмо - нельзя, а в рич эдите - можно, правда задание различных параметров (шрифт, цвет, размер букв и т.д.) происходит по абзацам.


Целую строку в Memo можно выделять другим цветом, рисуя по канве (может, можно и произвольный фрагмент - не пробовал) - кода под рукой сейчас нет, напишу его завтра в новом посте.

2.5K
17 августа 2003 года
VladСD
24 / / 20.04.2003
Цитата:
Originally posted by -cheese-
Люди кто знает можно ли в мэмо или рич эдите часть текста выделить отличным от остального цветом


Вот обещанный мною код для Memo (заимствовано из русских справок по C++ Архангельского):
//------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "UMain.h"
//------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TControlCanvas *MyCanvas;

AnsiString SLine; // текст строки

int NLine = -1; // номер строки

int HLine; // высота строки

TColor BgLineColor = clBlue; // цвет фона

TColor TextLineColor = clWhite; // цвет текста
//------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{ MyCanvas = new TControlCanvas;
MyCanvas->Control = Memo1;


}
//------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
delete MyCanvas;
}
//------------------------------------------------
void __fastcall TForm1::SelectText(TObject *Sender)

{

char Buff[255] = ""; // буфер

TEXTMETRIC tm; // структура с метрикой строки

UnSelectText(Sender);

NLine = Memo1->CaretPos.y;

*Buff = sizeof(Buff);

Memo1->Perform(EM_GETLINE, NLine,(long)&Buff);

SLine = Buff;

MyCanvas->Font->Assign(Memo1->Font);

GetTextMetrics(MyCanvas->Handle, &tm);

HLine = tm.tmHeight + tm.tmExternalLeading;

MyCanvas->Brush->Color = BgLineColor;

MyCanvas->Font->Color = TextLineColor;

MyCanvas->TextOut(1, NLine*HLine+1, SLine);

}
//------------------------------------------------
void __fastcall TForm1::UnSelectText(TObject *Sender)

{

if (NLine > -1)

{

MyCanvas->Brush->Color = Memo1->Color;

MyCanvas->Font->Color = Memo1->Font->Color;

MyCanvas->TextOut(1, NLine*HLine+1, SLine);

NLine = -1;

}

}







void __fastcall TForm1::Button1Click(TObject *Sender)
{
SelectText(Sender);
}
//------------------------------------------------


void __fastcall TForm1::FontEdit1Accept(TObject *Sender)
{
Memo1->Font=FontEdit1->Dialog->Font;
}
//------------------------------------------------
void __fastcall TForm1::FontEdit1Cancel(TObject *Sender)
{
ShowMessage("Зря!");
}
//------------------------------------------------




void __fastcall TForm1::ColorSelect1Accept(TObject *Sender)
{
BgLineColor=ColorSelect1->Dialog->Color;
}
//------------------------------------------------//------------------------------------------------
//------------------------------------------------
//------------------------------------------------

#ifndef UMainH
#define UMainH
//------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ActnList.hpp>
#include <StdActns.hpp>
//------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TMemo *Memo1;
TActionList *ActionList1;
TFontEdit *FontEdit1;
TButton *Button2;
TColorSelect *ColorSelect1;
void __fastcall FormCreate(TObject *Sender);
void __fastcall FormDestroy(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
void __fastcall FontEdit1Accept(TObject *Sender);
void __fastcall FontEdit1Cancel(TObject *Sender);
void __fastcall ColorSelect1Accept(TObject *Sender);
private: // User declarations
void __fastcall SelectText(TObject *Sender);
void __fastcall UnSelectText(TObject *Sender);

public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//------------------------------------------------
extern PACKAGE TForm1 *Form1;
//------------------------------------------------
#endif

:)

429
18 августа 2003 года
Slon
78 / / 20.01.2000
Цитата:
Originally posted by Glazunov Oleg

а в рич эдите - можно, правда задание различных параметров (шрифт, цвет, размер букв и т.д.) происходит по абзацам.



Нет. Хоть каждому символу свой цвет, размер и шрифт задавай.

358
18 августа 2003 года
moonmike
423 / / 18.10.2002
Господа, вы посты читаете?
Или как в том анекдоте:
"Чукча не читатель, чукча - писатель"=)
И так перевожу свой ранний пост, для владеющих англицким языком:
Цитата:
Originally posted by moonmike

Вот кусочек трэда с bdn:

> Does anybody has any example routines of how
> to do syntax highlighting in a TRichEdit component.

TRichEdit is not designed for syntax highlighting. Although possible, the
effect is very slow and not very accurate or effective at all. You would be
best off using a component that is specifically designed for syntax
highlighting, such as TSynEdit, http://synedit.sourceforge.net


BDN - Borland Developers Network(Сеть разработчиков Борланд). В данной сети решаются многие вопросы. На поставленный вопрос отвечал Remy Lebeau - член команды TeamB. Данная команда поддурживается Борландом для консультаций пользователей их продуктов.
Так вот сам перевод:
Вопрос:
> Does anybody has any example routines of how
> to do syntax highlighting in a TRichEdit component.
Кто-нибудь может показать мне пример подсветки кода в компоненте TRichEdit?
Ответ:
TRichEdit is not designed for syntax highlighting. Although possible, the
effect is very slow and not very accurate or effective at all. You would be
best off using a component that is specifically designed for syntax
highlighting, such as TSynEdit
TRichEdit не предназначен для подсветки кода. Это возможно, но крайне неэффективно. Лучше использовать компонент специально разработанный для подсветки синтаксиса, к примеру, TSynEdit.

429
18 августа 2003 года
Slon
78 / / 20.01.2000
Цитата:
Originally posted by moonmike
Господа, вы посты читаете?
Или как в том анекдоте:
"Чукча не читатель, чукча - писатель"=)
И так перевожу свой ранний пост, для владеющих англицким языком:
.............................



О низкой производительности никто и не спорит.
А о подсветке кода и речи не шло.
-cheese- хотел узнать только, можно ли часть текста в TRichEdit выделить отличным от остального цветом.
Если это обычный документ, то заметных тормозов не будет.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог