RichEdit или Memo color
Люди кто знает можно ли в мэмо или рич эдите часть текста выделить отличным от остального цветом
Вот кусочек трэда с 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
Люди кто знает можно ли в мэмо или рич эдите часть текста выделить отличным от остального цветом
На сколько я знаю: в мэмо - нельзя, а в рич эдите - можно, правда задание различных параметров (шрифт, цвет, размер букв и т.д.) происходит по абзацам.
На сколько я знаю: в мэмо - нельзя, а в рич эдите - можно, правда задание различных параметров (шрифт, цвет, размер букв и т.д.) происходит по абзацам.
Целую строку в Memo можно выделять другим цветом, рисуя по канве (может, можно и произвольный фрагмент - не пробовал) - кода под рукой сейчас нет, напишу его завтра в новом посте.
Люди кто знает можно ли в мэмо или рич эдите часть текста выделить отличным от остального цветом
Вот обещанный мною код для 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
:)
а в рич эдите - можно, правда задание различных параметров (шрифт, цвет, размер букв и т.д.) происходит по абзацам.
Нет. Хоть каждому символу свой цвет, размер и шрифт задавай.
Или как в том анекдоте:
"Чукча не читатель, чукча - писатель"=)
И так перевожу свой ранний пост, для владеющих англицким языком:
Вот кусочек трэда с 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.
Господа, вы посты читаете?
Или как в том анекдоте:
"Чукча не читатель, чукча - писатель"=)
И так перевожу свой ранний пост, для владеющих англицким языком:
.............................
О низкой производительности никто и не спорит.
А о подсветке кода и речи не шло.
-cheese- хотел узнать только, можно ли часть текста в TRichEdit выделить отличным от остального цветом.
Если это обычный документ, то заметных тормозов не будет.