![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Есть код
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
p:=1;
end;
procedure TForm1.RichEdit1Change(Sender: TObject);
Var ghj:Integer;
begin
for ghj := 0 to Length(Form1.RichEdit1.Text) do begin
if PosEx('Begin',Form1.RichEdit1.Text,p) > 0 then begin
Form1.RichEdit1.SelStart:=PosEx('Begin',Form1.RichEdit1.Text,p)-1;
Form1.RichEdit1.SelLength:=5;
Form1.RichEdit1.SelAttributes.Color:=clBlue;
Form1.RichEdit1.SelStart:=Length(Form1.RichEdit1.Text);
p:=Form1.RichEdit1.SelStart;
Form1.RichEdit1.SelAttributes.Color:=clBlack;
end;
end;Такто работаеет но надо сделать также как это сделан в самой делфи нужно искать строку Begin и красить ее а если у нее после покраски стереть например 1 символ то красить обратно в черный можете помочь |
|
#2
|
||||
|
||||
|
SynEdit (не TRichEdit)
если есть желание вручную - создать словарь, содержащий слова, подлежащие определенному выделению (если правил выделения несколько - несколько словарей или все в одном словаре, но помимо слова еще признак выделения) при отображении пробежать по словарю, если слово есть - выделить, нет - значит нет |
|
#4
|
||||
|
||||
|
Да ему уже популярно объясняли, он все равно на этом позорище делает.
|
|
#5
|
||||
|
||||
|
Цитата:
Врядли в делфи используется SynEdit там RichEdit а не SynEdit. Мне нужно также как это в языках сделано к делфи или паскаль к примеру или например Noteepad++ SynEdit нет в делфи а для XE3 я не могу найти его. Цитата:
Код:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls,StrUtils;
type
TSynRichEdit = object
RichEdit: TRichEdit;
Dic: Array of record Element: String; Color: Integer; FontStyle:TFontStyles end;
constructor Init(RE: TRichEdit);
procedure Add(Element: String; Color: Integer;FontStyle:TFontStyles);
procedure Paint;
procedure CreateSQLDictionary;
procedure RichEditOnChange(Sender: TObject);
end;
type
TForm1 = class(TForm)
RichEdit1: TRichEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
SynRich: TSynRichEdit;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
SynRich.Init(RichEdit1);
SynRich.CreateSQLDictionary;
end;
{ TSynRichEdit }
procedure TSynRichEdit.Add(Element: String; Color: Integer;FontStyle:TFontStyles);
begin
SetLength(Dic, Length(Dic) + 1);
Dic[High(Dic)].Element := Element;
Dic[High(Dic)].Color := Color;
Dic[High(Dic)].FontStyle:=FontStyle;
end;
procedure TSynRichEdit.CreateSQLDictionary;
begin
Add('select', clBlue,[fsBold]);
Add('update', clBlue,[]);
Add('delete', clBlue,[]);
Add('set', clBlue,[]);
Add('from', clBlue,[]);
Add('where', clBlue,[]);
Add('inner', clBlue,[]);
Add('left', clBlue,[]);
Add('right', clBlue,[]);
Add('union', clBlue,[]);
Add('order by', clBlue,[]);
Add('on', clBlue,[]);
Add('distinct', clBlue,[]);
Add('top', clBlue,[]);
Add('having', clBlue,[]);
Add('group by', clBlue,[]);
Add('is', clBlue,[]);
Add('as', clBlue,[]);
Add('or', clGray,[]);
Add('and', clGray,[]);
Add('not', clGray,[]);
Add('like', clGray,[]);
Add('join', clGray,[]);
Add('in', clGray,[]);
Add('null', clGray,[]);
Add('(', clGray,[]);
Add(')', clGray,[]);
Add('<', clGray,[]);
Add('>', clGray,[]);
Add('=', clGray,[]);
Add('&', clGray,[]);
Add('count', clRed,[]);
Add('min', clRed,[]);
Add('max', clRed,[]);
Add('datalength', clRed,[]);
Add('year', clRed,[]);
Add('getdate', clRed,[]);
Add('substring', clRed,[]);
Add('ltrim', clRed,[]);
Add('rtrim', clRed,[]);
Add(#39, clGreen,[]);
Add('//', clGreen,[]);
end;
constructor TSynRichEdit.Init(RE: TRichEdit);
begin
SetLength(Dic, 0);
RichEdit := RE;
RichEdit.OnChange := RichEditOnChange;
end;
procedure TSynRichEdit.Paint;
var
i,p,c: Integer;
e,s: String;
begin
RichEdit.Lines.BeginUpdate;
c := RichEdit.SelStart;
s := AnsiUpperCase(RichEdit.Text);
s := StringReplace(s,#13#10,'|',[rfReplaceAll]);
for i := 0 to Length(Dic) - 1
do begin
e := AnsiUpperCase(Dic[i].Element);
if e = #39
then begin
p := 1;
while PosEx(#39, s, p) <> 0
do begin
p := PosEx(#39, s, p);
if PosEx(#39, s, p+1) = 0 then Break;
RichEdit.SelStart := p;
p := PosEx(#39, s, p+1)+1;
RichEdit.SelLength := p-RichEdit.SelStart-2;
RichEdit.SelAttributes.Color := Dic[i].Color;
end;
end
else begin
p := 0;
repeat
p := PosEx(e, s, p+1);
if p <> 0
then if (e[1] in ['(',')','<','=','>','&']) or
((p=1) or not (s[p-1] in ['a'..'z','A'..'Z','0'..'9']) and
not (s[p+Length(e)] in ['a'..'z','A'..'Z','0'..'9']))
then begin
RichEdit.SelStart := p-1;
RichEdit.SelLength := Length(e);
RichEdit.SelAttributes.Color := Dic[i].Color;
RichEdit.SelAttributes.Style := Dic[i].FontStyle
end;
until p = 0;
end;
end;
RichEdit.SelStart := c;
RichEdit.SelAttributes.Color := clBlack;
RichEdit.SelAttributes.Style := [];
RichEdit.Lines.EndUpdate;
end;
procedure TSynRichEdit.RichEditOnChange(Sender: TObject);
begin
RichEdit.OnChange := nil;
Paint;
RichEdit.OnChange := RichEditOnChange;
end;
end.А как сделать например чтобы так было Код:
//Эту строку удалять нельзя
{Эту строку удалять нельзя}
(*Эту строку удалять нельзя*)что нужно добаить и еще что нужно добавить чтобы указывать жирный текст или нет Последний раз редактировалось M.A.D.M.A.N., 23.06.2013 в 12:34. |
|
#6
|
||||
|
||||
|
Вечерком постараюсь выложить расширенный вариант с шрифтами и обработкой коментариев.
|
|
#7
|
||||
|
||||
|
Исправь также несколько багов
1 В одинарных кавычках кавычки должны тоже красится 2 Допустим написали Select покрасился а если допустим мы у Select стерем букву или добавим к Select ненужную тогда все равно Select или Selec будет покрашен Обрабатывать событие лучше при нажатие на клавиши пробел и стереть. Сделаешь. Буду очень рад. А вот что стоит добавить 1 Полный контроль шрифтам включяя стиль и размер 2 Полная обработка коментариев включая такие [fhfghfg] добавить такие кавычки 'бла бла бла' "бла бла бла" <бла бла бла> |бла бла бла| Лучше для этого сделать компонент по аналагу XpManifest который достаточно положить и он начинает действовать. А вообще есть компоненты которые красят текст который нужно и также как в интерприатарах включая полную поддержку кавычек и коментариев |
|
#8
|
||||
|
||||
|
Цитата:
|
|
#9
|
||||
|
||||
|
Можете ктонибудь ссылку на SynEdit дать для XE3 только не через SVN а обычную желательно торрент
|
|
#10
|
||||
|
||||
|
при попытки откомпелировать SynEdit от XE2 на XE3 вот что в ответ
Код:
[dcc32 Fatal Error] SynEdit_RXE2.dpk(30): E2225 Never-build package 'designide' must be recompiled [dcc32 Fatal Error] SynEdit_DXE2.dpk(35): E2202 Required package 'SynEdit_RXE2' not found C:\SynEdit\branches\CodeFolding\SynEdit\Packages\SynEdit_RXE2.dpk(30,2): error F2225: E2225 Never-build package 'designide' must be recompiled C:\SynEdit\branches\CodeFolding\SynEdit\Packages\SynEdit_DXE2.dpk(35): error F2202: E2202 Required package 'SynEdit_RXE2' not found |
|
#11
|
||||
|
||||
|
Сбилди dpk`шки, он же так и пишет. Просто добавляешь их в группу проектов и билдишь.
|
|
#12
|
||||
|
||||
|
Цитата:
Можно подробнее. Это он пишет при попытки компиляции DPK. пути к DPK и к PAS прописаны |
|
#13
|
||||
|
||||
|
Цитата:
Добавил все 2 дпк в группу проектов и вот что потом. Код:
[dcc32 Warning] SynEditTextBuffer.pas(133): W1010 Method 'GetCapacity' hides virtual method of base type 'TStrings' [dcc32 Warning] SynEditTextBuffer.pas(140): W1010 Method 'SetCapacity' hides virtual method of base type 'TStrings' [dcc32 Error] SynUnicode.pas(1679): E2010 Incompatible types: 'AnsiChar' and 'Char' [dcc32 Error] SynUnicode.pas(1686): E2010 Incompatible types: 'AnsiChar' and 'Char' [dcc32 Error] SynUnicode.pas(1687): E2010 Incompatible types: 'AnsiChar' and 'Char' [dcc32 Error] SynUnicode.pas(1688): E2010 Incompatible types: 'AnsiChar' and 'Char' [dcc32 Error] SynUnicode.pas(1695): E2010 Incompatible types: 'AnsiChar' and 'Char' [dcc32 Error] SynUnicode.pas(1696): E2010 Incompatible types: 'AnsiChar' and 'Char' [dcc32 Warning] SynUnicode.pas(1803): W1044 Suspicious typecast of UTF8String to PAnsiChar [dcc32 Warning] SynUnicode.pas(1820): W1044 Suspicious typecast of UTF8String to PAnsiChar [dcc32 Warning] SynUnicode.pas(1842): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString' [dcc32 Warning] SynUnicode.pas(1843): W1058 Implicit string cast with potential data loss from 'string' to 'AnsiString' [dcc32 Warning] SynUnicode.pas(1857): W1000 Symbol 'RaiseLastWin32Error' is deprecated: 'Use RaiseLastOSError' [dcc32 Warning] SynUnicode.pas(1870): W1000 Symbol 'RaiseLastWin32Error' is deprecated: 'Use RaiseLastOSError' [dcc32 Warning] SynUnicode.pas(3169): W1058 Implicit string cast with potential data loss from 'UTF8String' to 'RawByteString' [dcc32 Fatal Error] SynTextDrawer.pas(1874): F2063 Could not compile used unit 'SynUnicode.pas' Дело в том что эта для языка XE2 а у меня XE3 кажется D18 должен подойти если не ошибаюсь но его нет в пакете SynEdit есть нормальный SynEdit для XE3 Последний раз редактировалось M.A.D.M.A.N., 24.06.2013 в 09:52. |
|
#14
|
||||
|
||||
|
Хватит из темы делать чат, пользуйтесь правкой сообщений.
|
|
#15
|
||||
|
||||
|
Молодой человек, вы не пробовали сначала посидеть, поковыряться, погуглиться, демки посмотреть, а уж потом какать в теме?
|