Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Выделение в текстовых компанентах отдельных слов?  (Прочитано 11108 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Наталья
Гость
« : 13-08-2004 09:40 » 

В каком текстовом компаненте и как можно выделять отдельные слова (цвет, шрифт). Нужно, чтобы некоторые слова при работе программы  автоматически выделялись как в коде Delphi, когда,  например, набираем слово begin и оно становится выделенным. Помогите кто знает.!!!!!!
 Желательно с примером.
Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 13-08-2004 10:31 » 

RichEdit позволяет менять шрифт, цвет и стиль, но только "в ручную".
Можно написать "наследника" от RichEdit, или воспользоваться готовыми компонентами сторонних производителей. Например библиотека RaLib (http://soft.surgut.ru/instrument/raLib/RALib.exe)  содержит интересный компонент позвояюший создавать текстовый редактор, который в зависимости от типа редактируемого файла (.pas, .htm .txt и т.п.) умеет выделять ключевые слова, т.е. выполнять то, что вас интересует. Примеры использования компонент библиотеки прилагаются.
Записан

С уважением, Oldy.
Судейкина Ирина
Гость
« Ответ #2 : 20-10-2004 02:16 » 

uses
 RichEdit;
 
procedure TForm1.RichEdit1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
  iCharIndex, iLineIndex, iCharOffset, i, j: Integer;
  Pt: TPoint;
  s: string;
begin
  with TRichEdit(Sender) do
  begin
    Pt := Point(X, Y);
    // Get Character Index from word under the cursor
    iCharIndex := Perform(Messages.EM_CHARFROMPOS, 0, Integer(@Pt));
    if iCharIndex < 0 then Exit;
    // Get line Index
    iLineIndex  := Perform(EM_EXLINEFROMCHAR, 0, iCharIndex);
    iCharOffset := iCharIndex - Perform(EM_LINEINDEX, iLineIndex, 0);
    if Lines.Count - 1 < iLineIndex then Exit;
    // store the current line in a variable
    s := Lines[iLineIndex];
    // Search the beginning of the word
    i := iCharOffset + 1;
    while (i > 0) and (s <> ' ') do Dec(i);
    // Search the end of the word
    j := iCharOffset + 1;
    while (j <= Length(s)) and (s[j] <> ' ') do Inc(j);
    // Display Text under Cursor
    Caption := Copy(s, i, j - i);
  end;
end;
Записан
newmen
Интересующийся

ru
Offline Offline

« Ответ #3 : 20-10-2004 04:52 » 

Судейкина Ирина, я как понял, проблема немного в другом.
В поле (richedit) через richedit.font.color меняется цвет всего текста, а как сделать, чтобы слова были, скажем, разноцветными, или с разными атрибутами?   (мне тоже интересно знать)))
Записан
Серж
Гость
« Ответ #4 : 20-10-2004 06:57 » 

Наталья, у компоненты TCustomRichEdit есть свойство DefAttributes, которое применяется к фрагментам текста. Примеры есть в Helpах Delphi.
Записан
Серж
Гость
« Ответ #5 : 20-10-2004 07:13 » 

Еще одно свойство, которое нужно использовать, - SelAttributes
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #6 : 20-10-2004 10:32 » 

Oldy, мне в этом плане очень нравится SynEdit. автор - Vit с форума vingrad.ru. компонент для "разноцветного" отображения в редакторе файлов разных стилей, и поставляется, если мне память не изменяет, с исходниками.
Записан

Судейкина Ирина
Гость
« Ответ #7 : 22-10-2004 02:10 » 

newmen поставь компоненту FontDialog

if FontDialog1.Execute then
 begin
 RichEdit1.SelAttributes.Name:=FontDialog1.Font.Name;
 RichEdit1.SelAttributes.Size:=FontDialog1.Font.Size;
 RichEdit1.SelAttributes.Style:=FontDialog1.Font.Style;
 RichEdit1.SelAttributes.Color:=FontDialog1.Font.Color;
 end;
Записан
Серж
Гость
« Ответ #8 : 22-10-2004 06:49 » new

Судейкина Ирина, по-моему, FontDialog здесь не нужен, а нужно постепенно либо выделяя фрагменты, либо вводя новый текст в RichEdit, применять именно те операторы, которые Вы привели в левой части выражений.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines