Модераторы: Vitalik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как организовать подсветку фрагметов тексте? сравнеие файлов... 
V
    Опции темы
creater
  Дата 23.12.2004, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 20.12.2004

Репутация: нет
Всего: нет



Ситуация следующая:
Имеются два файла которые проверяются на версию изменения...

Происходит сравнение двух текстовых файлов построчно.
При нахождении различных слов(фрагментов) в строке эти отличные слова заносятся в список.

Как подсветить конкретные слова в строках?

Т.е. допустим имеется изначально

TForm1 *Form1;

а в новой версии
в этой же строчке (новой версии файла)

TForm1 *Form111;

И вот подсветить нужно "11" т.е. то что добавилось нового.
smile
smile
smile
PM MAIL   Вверх
Vitalik
Дата 30.12.2004, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 9
Всего: 12



Цитата(creater @ 23.12.2004, 07:22)
Ситуация следующая:
...

С существующей реализацией нашего компонента, такого эффекта пока что добиться нельзя.
Но идея в принципе не плохая!
Давай определимся, как лучше доработать компонент, чтобы он мог помочь в такой и подобных ситуациях smile

Каким образом лучше создавать (задавать) правило для такой подсветки? Начальной позицией и конечной позицией в виде координат (Row,Col), где Row - строка, а Col - столбец? Или же позицию задавать номером символа от начала файла? А может реализовать оба варианта?
Есть еще какие-нибудь идеи и соображения по этому поводу? smile
PM MAIL WWW ICQ YIM   Вверх
Vitalik
Дата 6.4.2005, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 9
Всего: 12




 ! 
 
Обсуждение проблемы подсветки частей слов правилом "Ключевые слова" перенесено в отдельную тему "Мне надо подсветить слово "форум" и все слова где оно является частью слова"

Обсуждение текущей темы остаётся открытым;-)

PM MAIL WWW ICQ YIM   Вверх
Vitalik
Дата 20.5.2005, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: 9
Всего: 12



creater, есть интересное решение этой проблемы без использования компонента подсветки. Нужно просто обрабатывать событие OnPaint у SynEdit'a.

Вот наварганил примерчик, позволяющий выделить текст от одной позиции курсора (SelectBegin) до другой (SelectEnd).

Пользуйтесь на здоровье!

Код
procedure TForm1.SynEdit1Paint(Sender: TObject; ACanvas: TCanvas);
var
  SelectBegin, SelectEnd: TPoint;
  Line, CharBegin, TextFrom, DrawX, DrawY, TextLen: integer;
  SelectText: string;
begin
  SelectBegin := Point(4, 1); // Начало выделения: 2 строка, 4 символ
  SelectEnd   := Point(6, 2); // Конец выделения:  3 строка, 6 символ
  for Line := SelectBegin.Y to SelectEnd.Y do // Пробегаем все строки текста
    with Sender as TSynEdit do begin
      // Если сейчас строка не видна на экране
      if not (Line in [TopLine .. TopLine + ClientHeight div LineHeight]) then
        Continue; // переходим к следующей строке

      // Если это первая выделяемая строка
      if Line = SelectBegin.Y then
        // Учитываем с какого символа выделять
        CharBegin := SelectBegin.X
      else // Иначе
        // выделяем текст с начала строки
        CharBegin := 0;

      // Если прокрутили вправо до начала выделения
      if LeftChar > CharBegin + 1 then begin
        //
        DrawX := 0;
        // Учитываем, что нужно выводить лишь часть строки
        TextFrom := LeftChar; // типа: CharBegin+1 + LeftChar-(CharBegin+1)
      end else begin
        DrawX := CharWidth * (CharBegin - LeftChar + 1);
        TextFrom := CharBegin + 1;
      end;

      // Если это последняя выделяемая строка      
      if Line = SelectEnd.Y then
        // то учитываем до какого символа выделять
        TextLen := SelectEnd.X
      else // Иначе
        // выделяем текст до конца строки
        TextLen := Length(Lines[Line]);

      // Координаты вывода выделенного текста
      DrawY := LineHeight * (Line - TopLine + 1);
      // Видимая часть выделенного текста, отображаемая на экране
      SelectText := Copy(Lines[Line], TextFrom, TextLen-TextFrom+1);

      // Выделяем текст красным
      Canvas.Brush.Color := clRed;
      // Выводим выделенный текст в нужном месте
      Canvas.TextOut(Gutter.Width + 2 + DrawX, DrawY, SelectText);
    end;
end;

PM MAIL WWW ICQ YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | SynUniHighlighter и SynEdit | Следующая тема »


 




[ Время генерации скрипта: 0.0538 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.