Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549

Выделить слово, внутри которого стоит курсор

15.07.2014, 17:21. Показов 2134. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, пользователь в memo ставит курсор внутрь какого-то слова, как выделить это слово целиком?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.07.2014, 17:21
Ответы с готовыми решениями:

Как сделать, что бы в Memo1, на месте (строке) где стоит курсор, выделялась цветом строчка, где стоит печатный курсор «|»?
Как сделать, что бы в Memo1, на месте (строке) где стоит курсор, выделялась цветом строчка, где стоит печатный курсор «|»?

Вставить слово в RichEdit, где стоит курсор
Вставить слово в RichEdit, где стоит курсор. И вставить 2 строки, ну я думаю разницы нету...

Резидент. При нажатии клавиши F2, слово на котором находится курсор, выделить прописными буквами
Добрый вечер! Очень прошу помочь реализовать программу на ассемблере. При нажатии клавиши F2, слово на котором находится курсор, выделить...

5
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
15.07.2014, 17:28
Лучший ответ Сообщение было отмечено hiphone как решение

Решение

Вот так: Get the whole word where the caret is in a memo. С Дельфи сам переведешь?
2
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
15.07.2014, 17:51  [ТС]
Спасибо, почти помогло, осталось избавится от выделения знаков препинания.

Вот функцию перевёл:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void SelectWordUnderCaret(TMemo* AMemo) {
    int Line, Column, InitPos, EndPos;
    String LineText;
 
    Line   = AMemo->Perform(EM_LINEFROMCHAR,AMemo->SelStart, 0) ;
    Column = AMemo->SelStart - AMemo->Perform(EM_LINEINDEX, Line, 0) ;
    if (AMemo->Lines->Count - 1 < Line) return;
    LineText = AMemo->Lines->Strings[Line];
    Column++;
    InitPos = Column;
    while ((InitPos > 0) && (LineText[InitPos] != ' ')) InitPos--;
    Column++;
    EndPos = Column;
    while ((EndPos <= LineText.Length()) && (LineText[EndPos] != ' ')) EndPos++;
    String Result = LineText.SubString(InitPos, EndPos - InitPos);
    Result = Result.Trim();
 
    AMemo->SelStart  = AMemo->Perform(EM_LINEINDEX, Line, 0)+InitPos;
    AMemo->SelLength = Result.Length();
}
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
15.07.2014, 18:47
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <locale>
 
// ...
 
void SelectWordUnderCaret(TMemo *AMemo)
{
    int Line = AMemo->Perform(EM_LINEFROMCHAR, AMemo->SelStart, 0);
    int Column = AMemo->SelStart - AMemo->Perform(EM_LINEINDEX, Line, 0);
    if (AMemo->Lines->Count - 1 < Line)
        return;
 
    String LineText = AMemo->Lines->Strings[Line];
    int InitPos = ++Column;
    while ((InitPos > 0) && std::isalnum(LineText[InitPos])) InitPos--;
    int EndPos = ++Column;
    while ((EndPos <= LineText.Length()) && std::isalnum(LineText[EndPos])) EndPos++;
    String Result = LineText.SubString(InitPos, EndPos - InitPos).Trim();
 
    AMemo->SelStart = AMemo->Perform(EM_LINEINDEX, Line, 0) + InitPos;
    AMemo->SelLength = Result.Length();
}
, например
0
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
17.07.2014, 21:50  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
, например
Ваш код выделяет только 1 символ, мб isalnum с русскими буквами не работает?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
17.07.2014, 22:42
Блин. Она не работает с MBCS вообще. Тогда просто и надежно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void SelectWordUnderCaret(TMemo *AMemo)
{
    String an = L"abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъьыэюя0123456789";
 
    int Line = AMemo->Perform(EM_LINEFROMCHAR, AMemo->SelStart, 0);
    int Column = AMemo->SelStart - AMemo->Perform(EM_LINEINDEX, Line, 0);
    if (AMemo->Lines->Count - 1 < Line)
        return;
 
    String LineText = AMemo->Lines->Strings[Line];
    int InitPos = ++Column;
    while ((InitPos > 0) && an.Pos(LineText.SubString(InitPos, 1).LowerCase()))
        InitPos--;
    int EndPos = ++Column;
    while ((EndPos <= LineText.Length()) && an.Pos(LineText.SubString(EndPos, 1).LowerCase()))
        EndPos++;
    String Result = LineText.SubString(InitPos, EndPos - InitPos).Trim();
 
    AMemo->SelStart = AMemo->Perform(EM_LINEINDEX, Line, 0) + InitPos;
    AMemo->SelLength = Result.Length();
}
Это работает...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.07.2014, 22:42
Помогаю со студенческими работами здесь

Скрывается блок, который внутри блока у которого стоит overflow: hidden
всем привет. буду краток есть головоломка, с которой вижу так просто не справиться есть таблица основанная на компоненте jqwidgets ...

Word : Выделить зелёным фоном то слово в выделенном абзаце, номер которого получен из функции InputBox
1. Word : Выделить зелёным фоном то слово в выделенном абзаце, номер которого получен из функции InputBox . Если слова с таким номером в...

В Excel внутри ячейки внутри слова не ставится курсор
в Excel внутри ячейки внутри слова не ставиться курсор. Выделив какию-нибудь ячейку я не могу поставить туда курсор и что-то исправать...

Выделить в MS Word 2007 выделить каждое четвёртое слово
Как выделить в MS Word 2007 каждое четвёртое слово? Просто подсвечивать их синим или жёлтым, любым цветом - главное, чтобы они были...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru