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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2010, 21:48   #1
George2010
Пользователь
 
Регистрация: 31.08.2010
Сообщений: 11
По умолчанию Нумерация строк в RichEdit

Передо мной была поставлена задача -
чтобы строки в RichEdit нумеровались и номера
строк были недоступны для редактирования.
Я написал процедуру:

(в Uses прописал RichEdit).
procedure TFListNotRazF.FormatText();
var
fmt: TParaFormat2;
pos : Integer;
begin

pos := RichEdit1.SelStart;
RichEdit1.SelectAll;

FillChar( fmt, SizeOf( fmt ), 0 );
fmt.cbSize := SizeOf( fmt );
fmt.dwMask := PFM_NUMBERING or PFM_NUMBERINGSTART or
PFM_NUMBERINGSTYLE or PFM_NUMBERINGTAB;

fmt.wNumbering := 2;
/// wNumbering:
// 0 - нет нумерации
// 1 - маркированный список (•, •, •, ...).
// 2 - арабские цифры (1, 2, 3, ...).
// 3 - маленькие буквы (a, b, c, ...).
// 4 - большие буквы (A, B, C, ...).
// 5 - маленькие римские цифры (i, ii, iii, ...).
// 6 - большие римские цифры (I, II, III, ...).
// 7 - последовательность символов Unicode/
fmt.wNumberingStart := 1;
/// wNumberingStart:
// Число, с которого начинается нумерация./
fmt.wNumberingStyle := $200;
/// wNumberingStyle:
// Стиль нумерации
// 0 : 1)
// $100 : (1)
// $200 : 1.
// $300 : 1
// $400 : убрать список
// $8000 : продолжает нумеровать список не изменяя стиля/
fmt.wNumberingTab := 1440 div 4;
/// wNumberingTab:
// расстояние между номером и текстом параграфа/

RichEdit1.Perform( EM_SETPARAFORMAT, 0, lParam( @fmt ) );

RichEdit1.SelStart:=pos;

end;

И запустил эту процедуру перед заполнением RichEdit, а также
в событии RichEditKeyUp(это нужно чтобы в случае нажатия Enter правильно
пересчитывались номера строк).

Но возникла проблема - номера строк считаются от 1 до 255.
Дальше все строки нумеруются как 255.

Т.е.
1...
....
253...
254...
255...
255...
255...
......
255...

Перед заполнением RichEdit добавил строку -
SendMessage(RichEdit1.Handle,EM_EXL IMITTEXT,0,limit);
(limit - перем. количество строк).
Но это не помогло.
George2010 вне форума Ответить с цитированием
Старый 09.12.2010, 14:11   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А если в начало каждой строки программно внести номер и защитить его от редактирования (есть соответствующее свойство, Protected кажется, дельфи нет под рукой. Это свойство в объекте форматирующем выделенный текст). И как-то потом нужно решить проблемы с перенумерацией после вставки-удаления строк
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 09.12.2010 в 14:15.
Аватар вне форума Ответить с цитированием
Старый 09.12.2010, 16:09   #3
alexprey
Форумчанин
 
Регистрация: 25.05.2010
Сообщений: 169
По умолчанию

А можно просто рисовать на канве, во время прорисовки TRichEdit
Для этого нужно обработать большинство событий и заменить стандартную процедуру Paint (вроде так)
alexprey вне форума Ответить с цитированием
Старый 15.04.2011, 16:20   #4
George2010
Пользователь
 
Регистрация: 31.08.2010
Сообщений: 11
По умолчанию

Для нумерации строк надо использовать другой компонент - SynEdit.
George2010 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа:Нумерация и отмена нумерации строк в мемо или richedit Obender13 Помощь студентам 4 17.01.2011 15:00
нумерация строк strannik SQL, базы данных 1 19.05.2010 09:09
Нумерация строк Sparky БД в Delphi 6 16.02.2010 21:38
Нумерация строк ShnapS БД в Delphi 5 06.05.2009 20:59
Нумерация строк. QT 4 NikLik Qt и кроссплатформенное программирование С/С++ 2 18.12.2008 22:38