Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Подсветка

6.2K
09 февраля 2006 года
thenilman
44 / / 28.05.2005
Я организовал выделение цветом различных элементов (заключённых в '<...>', '"..."', '<!...>') следующим образом:
Код:
procedure TChild.Redraw;
var nsc,ToEnd,FoundAt,StartPos,f1,f2:integer;
npoint:TPoint;
begin
npoint:=CodeEdit.CaretPos;
nsc:=SC;
nottochange:=true;
with CodeEdit do begin
  FoundAt:=0;
  StartPos:=0;
  ToEnd:=0;
  SelLength:=0;
  StartPos:=0;
  zastavka.HowManyTime.Caption:='';
  zastavka.Status.Caption:='&#207;&#240;&#238;&#240;&#232;&#241;&#238;&#226;&#234;&#224;...';
  zastavka.Progress.MaxValue:=nSC*3;
  zastavka.Progress.Progress:=0;
  Repeat
    zastavka.Progress.Progress:=StartPos;
    Application.ProcessMessages;
    ToEnd:=Length(Text)-StartPos;
    FoundAt:=FindText('<', StartPos, ToEnd, [stMatchCase]);
    f1:=foundat;
    SelStart:=FoundAt;
    StartPos:=SelStart+1;
    ToEnd:=Length(Text)-StartPos;
    FoundAt:=FindText('>', StartPos, ToEnd, [stMatchCase]);
    f2:=foundat;
    if FoundAt<>-1 then begin
      SelLength:=FoundAt-SelStart+1;
      SelAttributes.Color:=clred;
      SelAttributes.Style:=[fsbold];
      end;
    StartPos:=FoundAt+1;
    until (f1=-1) or (f2=-1);
  FoundAt:=0;
  StartPos:=0;
  ToEnd:=0;
  SelLength:=0;
  StartPos:=0;
  Repeat
    zastavka.Progress.Progress:=nSC+(StartPos);
    Application.ProcessMessages;
    ToEnd:=Length(Text)-StartPos;
    FoundAt:=FindText('"', StartPos, ToEnd, [stMatchCase]);
    f2:=FoundAt;
    SelStart:=FoundAt;
    StartPos:=SelStart+1;
    ToEnd:=Length(Text)-StartPos;
    FoundAt:=FindText('"', StartPos, ToEnd, [stMatchCase]);
    f1:=FoundAt;
    if FoundAt<>-1 then begin
      SelLength:=FoundAt-SelStart+1;
      SelAttributes.Color:=$000080FF;
      SelAttributes.Style:=[fsitalic];
      end;
    StartPos:=FoundAt+1;
    until (f1=-1) or (f2=-1);

  FoundAt:=0;
  StartPos:=0;
  ToEnd:=0;
  SelLength:=0;
  StartPos:=0;
  Repeat
    zastavka.Progress.Progress:=(2*nSC)+(StartPos);
    Application.ProcessMessages;
    ToEnd:=Length(Text)-StartPos;
    FoundAt:=FindText('<!', StartPos, ToEnd, [stMatchCase]);
    f1:=FoundAt;
    SelStart:=FoundAt;
    StartPos:=SelStart+2;
    ToEnd:=Length(Text)-StartPos;
    FoundAt:=FindText('>', StartPos, ToEnd, [stMatchCase]);
    f2:=FoundAt;
    if FoundAt<>-1 then begin
      SelLength:=FoundAt-SelStart+2;
      SelAttributes.Color:=clgray;
      SelAttributes.Style:=[fsunderline];
      end;
    StartPos:=FoundAt+1;
    until (f1=-1) or (f2=-1);
  CaretPos:=npoint;  
  end;
end;

Но эта фигня страшно тормозит. Есть какие-нибудь предложения по оптимизации?
ЗЫ. если в цикле проворачивать по каждому символу, то вылезают глюки - CodeEdit имеет тип TRichEdit, и у него текст - в формате rtf со всеми возможными скрытыми символами
12K
09 февраля 2006 года
phoenix_87
20 / / 01.02.2006
Цитата:
Originally posted by thenilman
Я организовал выделение цветом различных элементов (заключённых в '<...>', '"..."', '<!...>') следующим образом:
...
Но эта фигня страшно тормозит. Есть какие-нибудь предложения по оптимизации?
ЗЫ. если в цикле проворачивать по каждому символу, то вылезают глюки - CodeEdit имеет тип TRichEdit, и у него текст - в формате rtf со всеми возможными скрытыми символами



Есть готовый компонент для разного рода подстветки текста: SynEdit.

6.2K
10 февраля 2006 года
thenilman
44 / / 28.05.2005
Цитата:
Originally posted by phoenix_87
Есть готовый компонент для разного рода подстветки текста: SynEdit.


1)У меня Delphi 7
2)Если его можно где-то скачать, кинь ссылку, пожалуйста

12K
10 февраля 2006 года
phoenix_87
20 / / 01.02.2006
Цитата:
Originally posted by thenilman
1)У меня Delphi 7
2)Если его можно где-то скачать, кинь ссылку, пожалуйста


Собственно это целый пакет.
Версия 1.1:
http://www.torry.net/vcl/edits/enh/ossynedit.zip (829 Кб)
На официальном сайте несколько версий:
http://synedit.sourceforge.net/download.php

P.S. Правда моя старая версия 1.0 со всеми примерами и под разные delphi (до шестой) весит 14 Мб...

6.2K
11 февраля 2006 года
thenilman
44 / / 28.05.2005
Цитата:
Originally posted by phoenix_87
http://www.torry.net/vcl/edits/enh/ossynedit.zip


не работает

Цитата:

На официальном сайте несколько версий:
http://synedit.sourceforge.net/download.php


Во втором варианте не ставится пакет

12K
11 февраля 2006 года
phoenix_87
20 / / 01.02.2006
Цитата:
Originally posted by thenilman
не работает

Во втором варианте не ставится пакет


В смысли не ставится? не компилируется или битый файл?
Если не компилируется - то напиши, на что именно Delphi ругается (желательно с куском кода). У меня на седьмую не ставился, я там что-то в исходнике поменял и все стало нормально (что - не помню, давно это было).
Если битый файл - yandex.ru, google.com всегда работают. Не могу же я свои 14 Мб выложить...

6.2K
14 февраля 2006 года
thenilman
44 / / 28.05.2005
Цитата:
Originally posted by phoenix_87
У меня на седьмую не ставился, я там что-то в исходнике поменял и все стало нормально


Глюк в чём - он не находит какой-то там unit, я и сам, честно говоря, его не нашёл; если его закомментарить, не находит тип TЧёртЗнаетКакойFont. У меня щас его при себе нету, дома Инет кончился, приходится писать откуда получится :(

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог