Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.06.2013, 19:42
Аватар для AlexandrV
AlexandrV AlexandrV вне форума
Начинающий
 
Регистрация: 10.02.2013
Сообщения: 197
Версия Delphi: XE3
Репутация: -624
По умолчанию Помогите с покраской текста

Есть код

Код:
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  
Старый 22.06.2013, 20:24
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

SynEdit (не TRichEdit)
если есть желание вручную - создать словарь, содержащий слова, подлежащие определенному выделению (если правил выделения несколько - несколько словарей или все в одном словаре, но помимо слова еще признак выделения) при отображении пробежать по словарю, если слово есть - выделить, нет - значит нет
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard
Ответить с цитированием
  #3  
Старый 22.06.2013, 21:12
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Забавно. вы уже третий за месяц, кто спросил про это. Снова даю ссылку на решение стандартными средствами.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #4  
Старый 22.06.2013, 21:12
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Да ему уже популярно объясняли, он все равно на этом позорище делает.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 23.06.2013, 09:58
Аватар для AlexandrV
AlexandrV AlexandrV вне форума
Начинающий
 
Регистрация: 10.02.2013
Сообщения: 197
Версия Delphi: XE3
Репутация: -624
По умолчанию

Цитата:
Сообщение от cotseec
SynEdit (не TRichEdit)
если есть желание вручную - создать словарь, содержащий слова, подлежащие определенному выделению (если правил выделения несколько - несколько словарей или все в одном словаре, но помимо слова еще признак выделения) при отображении пробежать по словарю, если слово есть - выделить, нет - значит нет

Врядли в делфи используется 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  
Старый 23.06.2013, 11:20
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Вечерком постараюсь выложить расширенный вариант с шрифтами и обработкой коментариев.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 23.06.2013, 11:52
Аватар для AlexandrV
AlexandrV AlexandrV вне форума
Начинающий
 
Регистрация: 10.02.2013
Сообщения: 197
Версия Delphi: XE3
Репутация: -624
По умолчанию

Исправь также несколько багов

1 В одинарных кавычках кавычки должны тоже красится

2 Допустим написали Select покрасился а если допустим мы у Select стерем букву или добавим к Select ненужную тогда все равно Select или Selec будет покрашен Обрабатывать событие лучше при нажатие на клавиши пробел и стереть. Сделаешь. Буду очень рад.

А вот что стоит добавить
1 Полный контроль шрифтам включяя стиль и размер

2 Полная обработка коментариев включая такие [fhfghfg]

добавить такие кавычки

'бла бла бла'
"бла бла бла"
<бла бла бла>
|бла бла бла|

Лучше для этого сделать компонент по аналагу XpManifest который достаточно положить и он начинает действовать. А вообще есть компоненты которые красят текст который нужно и также как в интерприатарах включая полную поддержку кавычек и коментариев
Ответить с цитированием
  #8  
Старый 23.06.2013, 22:19
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

Цитата:
Сообщение от AlexandrV
Исправь также несколько багов
......
AlexandrV это ТЗ? и каков бюджет? если не секрет
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard
Ответить с цитированием
  #9  
Старый 24.06.2013, 04:38
Аватар для AlexandrV
AlexandrV AlexandrV вне форума
Начинающий
 
Регистрация: 10.02.2013
Сообщения: 197
Версия Delphi: XE3
Репутация: -624
По умолчанию

Можете ктонибудь ссылку на SynEdit дать для XE3 только не через SVN а обычную желательно торрент
Ответить с цитированием
  #10  
Старый 24.06.2013, 06:10
Аватар для AlexandrV
AlexandrV AlexandrV вне форума
Начинающий
 
Регистрация: 10.02.2013
Сообщения: 197
Версия Delphi: XE3
Репутация: -624
По умолчанию

при попытки откомпелировать 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  
Старый 24.06.2013, 08:08
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Сбилди dpk`шки, он же так и пишет. Просто добавляешь их в группу проектов и билдишь.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #12  
Старый 24.06.2013, 08:10
Аватар для AlexandrV
AlexandrV AlexandrV вне форума
Начинающий
 
Регистрация: 10.02.2013
Сообщения: 197
Версия Delphi: XE3
Репутация: -624
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Сбилди dpk`шки, он же так и пишет. Просто добавляешь их в группу проектов и билдишь.

Можно подробнее. Это он пишет при попытки компиляции DPK. пути к DPK и к PAS прописаны
Ответить с цитированием
  #13  
Старый 24.06.2013, 08:17
Аватар для AlexandrV
AlexandrV AlexandrV вне форума
Начинающий
 
Регистрация: 10.02.2013
Сообщения: 197
Версия Delphi: XE3
Репутация: -624
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Сбилди dpk`шки, он же так и пишет. Просто добавляешь их в группу проектов и билдишь.

Добавил все 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  
Старый 24.06.2013, 09:05
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Хватит из темы делать чат, пользуйтесь правкой сообщений.
Ответить с цитированием
  #15  
Старый 24.06.2013, 09:53
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Молодой человек, вы не пробовали сначала посидеть, поковыряться, погуглиться, демки посмотреть, а уж потом какать в теме?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:37.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter