Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2013, 02:23   #1
NIKO666
Заблокирован
 
Регистрация: 19.11.2012
Сообщений: 4
Восклицание Выделить несколько строчек текста в RichEdit

Доброго времени суток, коллеги. У меня возник вопрос один, который сам решить не смог. Поискал на форумах и тоже решения не нашел, может не в ту сторону копал, не знаю.
Так вот, вопрос следующий:
Как можно выделить кусок текста в RichEdit?
Текст размещен на нескольких строках, причем выделяется не сначала первой строки и не до конца последней. Известна начальная позиция выделения в виде TPoint, то есть X-Позиция в строке, а Y - сама позиция линии в RichEdit. Так же известны такие же данные по позиции "заканчивания выделения".
Пробовал вот так, но текст не выделяется.
Код:
          Convert.RxRERTF.Focused;  //переводим фокус в РичЭдит
          Convert.RxRERTF.CaretPos := PosSpace; //Устанавливаем каретку на начало выделения
          keybd_event(VK_SHIFT, 0, 0, 0); //Зажимаем Шифт
          Convert.RxRERTF.CaretPos := PosZvezdochka; //Устанавливаем каретку на конец выделения
          //Тут копируем выделение

          //----
          keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); //Отпускаем Шифт
На счет SelStart и SelLength не знаю как тут использовать, считать символы думаю еще геморней будет, тем более в РичЭдите не только текст но еще и картинки, таблицы и т.п.

Может у вас есть идеи по этому поводу? Подскажите, выручите, пожалуйста.
NIKO666 вне форума Ответить с цитированием
Старый 26.05.2013, 02:53   #2
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

selstart selend вроде единственный вариант...
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 26.05.2013, 07:45   #3
NIKO666
Заблокирован
 
Регистрация: 19.11.2012
Сообщений: 4
По умолчанию

А как тогда найти N-ый символ начала и кол-во символов до конца выделения? Это ж еще тот гемор, тем более правильно не будет работать из за того что у нас не только текст. Должен быть способ...
NIKO666 вне форума Ответить с цитированием
Старый 26.05.2013, 07:53   #4
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Цитата:
Сообщение от NIKO666 Посмотреть сообщение
А как тогда найти N-ый символ начала и кол-во символов до конца выделения? Это ж еще тот гемор, тем более правильно не будет работать из за того что у нас не только текст. Должен быть способ...
а что мешает мышью выделить? Суть вопроса непонятна...
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 26.05.2013, 07:55   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Должен быть способ...
Надо же. А его нет. Вернее есть на уровне WinApi, но и там нужно знать позицию и длину
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.05.2013, 20:47   #6
NIKO666
Заблокирован
 
Регистрация: 19.11.2012
Сообщений: 4
По умолчанию

Цитата:
Сообщение от alextrof94 Посмотреть сообщение
а что мешает мышью выделить? Суть вопроса непонятна...
Выделяются и копируются несколько блоков текста при нажатии на одну кнопку, позиции блоков известны. Мышью там никак нельзя, это тупо. Так как нужно разбить общий текст с картинками и таблицами на множество маленьких блоков, в этом сама суть этой части программы
NIKO666 вне форума Ответить с цитированием
Старый 26.05.2013, 20:54   #7
NIKO666
Заблокирован
 
Регистрация: 19.11.2012
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Надо же. А его нет. Вернее есть на уровне WinApi, но и там нужно знать позицию и длину
Я не на верном пути? Посмотри еще раз код, если не затруднит.

Цитата:
Сообщение от NIKO666 Посмотреть сообщение
Код:
          Convert.RxRERTF.Focused;  //переводим фокус в РичЭдит
          Convert.RxRERTF.CaretPos := PosSpace; //Устанавливаем каретку на начало выделения
          keybd_event(VK_SHIFT, 0, 0, 0); //Зажимаем Шифт
          Convert.RxRERTF.CaretPos := PosZvezdochka; //Устанавливаем каретку на конец выделения
          //Тут копируем выделение

          //----
          keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); //Отпускаем Шифт
По моему я на верном пути, может подскажешь какими функциями можно сделать то что я хочу?
NIKO666 вне форума Ответить с цитированием
Старый 27.05.2013, 10:31   #8
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Опиши подробнее, что ты хочешь сделать, иначе не понятно. Зачем копировать несколько блоков текста? Почему именно ричэдит, а не память? Для чего это все?
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в Microsoft word 2003 закрыть несколько строчек в одни большие скобки? evgenii1 Microsoft Office Word 3 24.08.2012 15:27
не могу понять несколько строчек в pascal в простом исходнике zhenka619 Помощь студентам 7 30.12.2011 14:06
Выделить строку RichEdit жирным Aleksandr Общие вопросы Delphi 4 11.07.2011 14:36
Загрузка в RichEdit текста из файла, и получение его из RichEdit Byurrer Общие вопросы C/C++ 1 09.04.2011 10:17
Как выделить несколько страниц текста Иванов2 Microsoft Office Word 4 28.09.2009 22:24