Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
1 / 1 / 2
Регистрация: 15.03.2015
Сообщений: 8
1

RichEdit. Удаление слова, строки, абзаца под курсором

15.03.2015, 15:58. Показов 2127. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Собственно задание, пишем текстовый редактор, с помощью RichEdit. В дополнение ко всему функционалу, нужно 3 кнопки: удаление слова под курсором, удаление абзаца, удаление строки.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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[i] <> ' ') 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;
Вот что есть, но этот алгоритм не учитывает того, что после слова может быть и точка и другие разделительные знаки. Относительно абзаца и строки всё труднее. Помогите составить алгоритм пожалуйста.

Добавлено через 4 часа 5 минут
Под курсором имеется в виду мигающий | а не при наведении мышкой (не случайно уточняю)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2015, 15:58
Ответы с готовыми решениями:

Удаление слова, строки, абзаца
Приложение должно выполнять основные функции текстового редактора, т.е. позволять создавать и...

Мерцание слова под курсором
Мне надо, чтоб при нажатии клавиши F5 слово, на котором находится курсор начало мигать. Если нажать...

В RichEdit выделение абзаца
Подскажите, можно ли в RichEdit выделить абзац программно, или обратится к абзацу целиком, что бы...

Подсветка строки под курсором в qTableView
Есть виджет наследуемый от qTableView с переопределенными интерфейсами drag and drop(вместо ячейки...

2
1 / 1 / 2
Регистрация: 15.03.2015
Сообщений: 8
16.03.2015, 20:42  [ТС] 2
Никто с RichEdit не работал?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function SelectWordUnderCaret(ARichEdit:TRichEdit):string;
var
   Line    : Integer;
   Column  : Integer;
   LineText: string;
   InitPos : Integer;
   EndPos  : Integer;
begin
   //Выдираем позицию каретки
   Line   := ARichEdit.Perform(EM_LINEFROMCHAR,ARichEdit.SelStart, 0) ;
   Column := ARichEdit.SelStart - ARichEdit.Perform(EM_LINEINDEX, Line, 0) ;
   if ARichEdit.Lines.Count-1 < Line then Exit;
 
   //Помещаем текст строки в переменную
   LineText := ARichEdit.Lines[Line];
 
   Inc(Column);
   InitPos := Column;
   //Ищем начало слова
   while (InitPos > 0) and not (LineText[InitPos] in ['.', ' ', ',', #0]) do Dec(InitPos);
   Inc(Column);
 
   EndPos := Column;
   //Ищем конец слова 
   while (EndPos <= Length(LineText)) and not (LineText[EndPos] in ['.', ' ', ',', #0]) do Inc(EndPos);
 
   //Обрезаем пробелы
   Result := Trim(Copy(LineText, InitPos, EndPos - InitPos));
 
   //И выбираем слово. 
   ARichEdit.SelStart  := ARichEdit.Perform(EM_LINEINDEX, Line, 0)+InitPos;
   ARichEdit.SelLength := Length(Result);
end;
Вот что удалось наклепать, но работает не совсем корректно, если слово стоит в начале строки и после идет знак препинания, выделяет со знаком препинания. Помогите, кто может, пожалуйста.
0
1 / 1 / 2
Регистрация: 15.03.2015
Сообщений: 8
18.03.2015, 21:43  [ТС] 3
Подниму, теперь актуально только относительно абзацев. Если строка начинается с n пробелов bkb c отступа, пометить ее как начало, как это сделать?
0
18.03.2015, 21:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.03.2015, 21:43
Помогаю со студенческими работами здесь

Удаление строки в RichEdit в при условии, что она пустая
В общем вопрос такой. У меня есть текст в RichEdit, каждая строка ограничена по длине в 32 символа....

При нажатии кнопки мыши изменить цвет строки под курсором
Ассемблер. При нажатии кнопки мыши изменить цвет строки под курсором. Если лень писать код,...

Удаление абзаца в файле
Дано целое число К и текстовый файл. Удалить из файла абзац с номером К (абзацы отделяются друг от...

Удаление слова из строки
Задание: Написать программу удаления последнего слова из строки Код: #include &lt;iostream.h&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru