Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2008, 23:49   #1
xReactions
Заблокирован
 
Регистрация: 02.05.2008
Сообщений: 10
По умолчанию Помогите с подсветкой в Memo

Уважаемые пользователи помогите пожалуйсто с подсветкой текста в TMemo если возможно, чтобы при наборе текста TMemo проверял текст и если он найдёт ( if или connect ) тогда выделит слово в синий цвет.
xReactions вне форума Ответить с цитированием
Старый 05.05.2008, 00:08   #2
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
По умолчанию

Лучше RichEdit использовать
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Старый 05.05.2008, 00:24   #3
xReactions
Заблокирован
 
Регистрация: 02.05.2008
Сообщений: 10
По умолчанию

хорошо ! но если в RichEdit делать у меня он выделяется и глючит а надо чтоб не глючело пожалуйсто помогите тогда с RichEdit'ом буду очень благодарен
xReactions вне форума Ответить с цитированием
Старый 05.05.2008, 00:31   #4
StartMis
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 175
По умолчанию

Попробуй вот несовсем то что просиш но может подойдет:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  FoundAt: LongInt;
  StartPos, ToEnd: Integer;
begin
  with RichEdit1 do
  begin
    { begin the search after the current selection if there is one }
    { otherwise, begin at the start of the text }
    if SelLength <> 0 then

      StartPos := SelStart + SelLength
    else

      StartPos := 0;

    { ToEnd is the length from StartPos to the end of the text in the rich edit control }

    ToEnd := Length(Text) - StartPos;

    FoundAt := FindText(edit1.Text, StartPos, ToEnd, [stMatchCase]);
    if FoundAt <> -1 then
    begin
      SetFocus;
      SelStart := FoundAt;
      SelLength := Length(edit1.Text);
      Richedit1.SelAttributes.Color:=clred;
      edit1.SetFocus;
    end;
  end;
end;

Последний раз редактировалось Stilet; 01.06.2009 в 09:28.
StartMis вне форума Ответить с цитированием
Старый 05.05.2008, 01:03   #5
xReactions
Заблокирован
 
Регистрация: 02.05.2008
Сообщений: 10
По умолчанию

спасибо но не то !
xReactions вне форума Ответить с цитированием
Старый 05.05.2008, 01:18   #6
StartMis
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 175
По умолчанию

Выложи исходник каторый у тебя глючит
StartMis вне форума Ответить с цитированием
Старый 05.05.2008, 15:04   #7
xReactions
Заблокирован
 
Регистрация: 02.05.2008
Сообщений: 10
По умолчанию

Вот лови, он толжен не глючить как тормоз а просто продолжать писать...
Вложения
Тип файла: rar richedit12.rar (174.6 Кб, 19 просмотров)
xReactions вне форума Ответить с цитированием
Старый 05.05.2008, 16:05   #8
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Немного поправил
Код:
var
  k0: integer = 0;
  k1: integer;

procedure TForm1.RichEdit1Change(Sender: TObject);
const
  word: array[1..18] of string[9] = ('if','then','else','begin','end','for','to',
    'do','while','repeat','until','case','of','type','var','const','procedure',   
    'function');
var
  i: integer;
  ch: char;
  s: string;
begin
  k1:=length(RichEdit1.Text);
  if k1 <> 0 then
    begin
      ch:=RichEdit1.Text[k1];
      s:='';
      if ch = #32 then s:=copy(RichEdit1.Text,k0+1,k1-k0-1);
      if ch = #10 then s:=copy(RichEdit1.Text,k0+1,k1-k0-2);
      for i:=1 to length(word) do
        if s = word[i] then
          begin
            RichEdit1.SelStart:=k0;
            RichEdit1.SelLength:=length(s);
            RichEdit1.SelAttributes.Color:=clblue;
            RichEdit1.SelStart:=k1;
          end;
      if (ch = #32) or (ch = #10) then k0:=k1;
    end;
end;
_Dmitry вне форума Ответить с цитированием
Старый 05.05.2008, 16:12   #9
xReactions
Заблокирован
 
Регистрация: 02.05.2008
Сообщений: 10
По умолчанию

спасибо большое но можно сделать так чтобы не было одного бага просто когда написал например with if и сделался пробел он выделился но если ещё нажать между i ... f тогда он дальше синим будет писать !
xReactions вне форума Ответить с цитированием
Старый 05.05.2008, 16:38   #10
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Конечно можно. Делайте.
Думаю идея понятна. Слова разделяются пробелами (#32) или "концами строк" (#13#10). Сравниваем их со словарем, если совпадают, меняем цвет.
_Dmitry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Memo WOLFak Компоненты Delphi 11 03.06.2008 10:58
Помогите организовать добавление в memo или listbox... Arkuz Компоненты Delphi 6 25.04.2008 18:16
Memo Kocapb Общие вопросы C/C++ 2 17.01.2008 02:06
В Memo сделать так, чтобы текст был разного цвета, разноцветный memo Artem Компоненты Delphi 3 07.09.2007 13:40
Memo elagin Компоненты Delphi 8 27.05.2007 22:18