![]() |
|
|
Регистрация | << Правила форума >> | 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)
если есть желание вручную - создать словарь, содержащий слова, подлежащие определенному выделению (если правил выделения несколько - несколько словарей или все в одном словаре, но помимо слова еще признак выделения) при отображении пробежать по словарю, если слово есть - выделить, нет - значит нет Понять, что хочет заказчик - бесценно, ведь он платит MasterCard ![]() |
#3
|
||||
|
||||
![]() Забавно. вы уже третий за месяц, кто спросил про это. Снова даю ссылку на решение стандартными средствами.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#4
|
||||
|
||||
![]() Вечерком постараюсь выложить расширенный вариант с шрифтами и обработкой коментариев.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
||||
|
||||
![]() Исправь также несколько багов
1 В одинарных кавычках кавычки должны тоже красится 2 Допустим написали Select покрасился а если допустим мы у Select стерем букву или добавим к Select ненужную тогда все равно Select или Selec будет покрашен Обрабатывать событие лучше при нажатие на клавиши пробел и стереть. Сделаешь. Буду очень рад. А вот что стоит добавить 1 Полный контроль шрифтам включяя стиль и размер 2 Полная обработка коментариев включая такие [fhfghfg] добавить такие кавычки 'бла бла бла' "бла бла бла" <бла бла бла> |бла бла бла| Лучше для этого сделать компонент по аналагу XpManifest который достаточно положить и он начинает действовать. А вообще есть компоненты которые красят текст который нужно и также как в интерприатарах включая полную поддержку кавычек и коментариев |
#6
|
||||
|
||||
![]() Цитата:
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard ![]() |
#7
|
||||
|
||||
![]() Да ему уже популярно объясняли, он все равно на этом позорище делает.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#8
|
||||
|
||||
![]() Цитата:
Врядли в делфи используется 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. |
#9
|
||||
|
||||
![]() Почему этот код
Код:
procedure TForm2.RED1KeyPress(Sender: TObject; var Key: Char); var stroca:integer; i:Integer; begin case key of #32:begin if Form2.RED1.Text[Length(Form2.RED1.Text)]=#32 then System.exit else begin stroca:=Length(Form2.RED1.Text); repeat stroca:=stroca-1; until (Form2.RED1.Text[stroca]=#32) or (stroca=0); Form2.RED1.SelStart:=stroca; Form2.RED1.SelLength:=Length(Form2.RED1.Text); for i := 0 to Length(ColorText) do begin if AnsiUpperCase(Form2.RED1.SelText) = ColorText[i].ColText then begin Form2.RED1.SelAttributes.Color:=ColorText[i].ColColor; Form2.RED1.SelAttributes.Style:=ColorText[i].ColFontStyle; end else begin Form2.RED1.SelAttributes.Color:=Form2.FontDialog1.Font.Color; Form2.RED1.SelAttributes.Style:=Form2.FontDialog1.Font.Style; end; Form2.RED1.SelStart:=Length(Form2.RED1.Text); end; end; end; end; end; ColorText[0].ColText:=AnsiUpperCase(PRK1); ColorText[0].ColColor:=ClBlue; ColorText[0].ColFontStyle:=[fsbold]; ColorText[1].ColText:=':'; ColorText[1].ColColor:=clGreen; ColorText[1].ColFontStyle:=[fsBold]; ColorText[2].ColText:='|'; ColorText[2].ColColor:=ClRed; ColorText[2].ColFontStyle:=[fsBold]; ColorText:Array[0..2] of TColorText; Type TColorText=record ColText:String; ColColor:TColor; ColFontStyle:TFontStyles; end; красит только 1 слово Begin |
#10
|
||||
|
||||
![]() Молодой человек, вы козерог?
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#11
|
||||
|
||||
![]() Цитата:
Пишу программы за еду. __________________ |
#12
|
||||
|
||||
![]() Я хочу этот код доработать а не писать другой. Способ при том здесь гораздо проще
|