Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Lines->Strings[i] и "\n"

429
02 октября 2002 года
Slon
78 / / 20.01.2000
Здравствуйте.
Мне требуется заполнить массив значением первых символов строк RichEdit.
Вопрос в том, как определить позицию первого символа n-й строки.

Привожу свои размышления.
Первый код.

int Pos = 0;
for(int i=0; i<RichEdit->Lines->Count; i++)
{
RichEdit->SelStart = Pos;
MyStruct.Color = RichEdit->SelAttributes->Color;
MyStruct.Alignment = RichEdit->Paragraph->Alignment;
Pos += RichEdit->Lines->Strings.Length();
}

Данный код работает, если текст, загруженный в RichEdit не имеет символов
&quot;n&quot; и &quot;r&quot;. А если какая-либо строка заканчивается по Enter (проще говоря),
то к длине, воззвращаемой Length() надо добавлять 2.
Вопрос в том, как узнать был ли перевод строки по &quot;n&quot;, или просто строка
не поместилась. Ведь Lines->Strings возвращает строку без &quot;n&quot;!
Пока что решаю проблему так

for(int i=0; i<RichEdit->Lines->Count; i++)
{
RichEdit->SelStart = 1;
CharactText.Color = RichEdit->SelAttributes->Color;
CharactText.Alignment = RichEdit->Paragraph->Alignment;
RichEdit->Lines->Delete(0);
}

Но Delete сильно замедляет скорость, хотя и RichEdit невидимый у меня.
Что посоветуете?

[ Это Сообщение было отредактировано Slon в 2002-10-02 0850 ]
317
02 октября 2002 года
Relax
573 / / 20.09.2000
отключи WordWrap, тогда строки, которые не помещаются не будут переноситься на следующую строку.
а почему он у тебя невидимый? - может быть тогда проще просто TStringList использовать?
429
02 октября 2002 года
Slon
78 / / 20.01.2000
Цитата:

On 2002-10-02 1056, Relax wrote
отключи WordWrap, тогда строки, которые не помещаются не будут переноситься на следующую строку.



Нет. У меня довольно специфическая программа.
В полноэкранном DirectX вывожу текст с крупным шрифтом на экран. Мне нужно отобразить его в том виде, в каком он был при предварит. просмотре. Цвет текста, как и выравнивание одно на каждом абзаце.
Т.е. если строка переходила так ...... Bor
land .....
то и на выводе должно так быть. Цвет и выравнивание должно совпадать.

Цитата:

а почему он у тебя невидимый? - может быть тогда проще просто TStringList использовать?


Я его создаю невидимым и шириной в Screen.
Он мне нужен только для того, чтобы текст, переданный в него принял нужные формы.
И после этого заполняю свой массив данными о строках.
А вообще потом для более быстрого оперирования строками я и использую TStringList.

317
02 октября 2002 года
Relax
573 / / 20.09.2000
что-то я никак в постановку заадчи не въеду . Если я правильно понял - тебе просто нужен крайний левый столбец символов? а что мешает вычислять позицию символа, отталкиваясь от ширины RichEdit в символах?
429
02 октября 2002 года
Slon
78 / / 20.01.2000
Цитата:

On 2002-10-02 1303, Relax wrote
что-то я никак в постановку заадчи не въеду . Если я правильно понял - тебе просто нужен крайний левый столбец символов?


Мне нужно знать характеристики (цвет и вырвнивание) всех строк в RichEdit.
Т.к. цвет меняется только от абзаца к абзацу, то в общем-то не обязательно определять исходя из первого символа строки. Подойдет любой символ данной строки. Но я так понимаю, нужно сначала встать в нужную позицию (RichEdit->SelStart = n), а потом определять характеристики того, на чем стою.
Вот мне и нужно получить значение n.
Типа этого
for(int=0; i<RichEdit->Lines->Count; i++)
{
int n = _ПОЗИЦИЯ_ЛЮБОГО_СИМВОЛА_i-той_СТРОКИ_;
RichEdit->SelStart = n;
_ХАРАКТЕРИСТИКА_СТРОКИ_.цвет = RichEdit->SelAttributes->Color;
_ХАРАКТЕРИСТИКА_СТРОКИ_.выравнивание = RichEdit->Paragraph->Alignment;
}

Цитата:
а что мешает вычислять позицию символа, отталкиваясь от ширины RichEdit в символах?


Теперь я не понимаю. А как?

[ Это Сообщение было отредактировано Slon в 2002-10-02 1450 ]

317
02 октября 2002 года
Relax
573 / / 20.09.2000
ну я имею ввиду, что если шрифт моноширинный, то при определенной ширине RichEdit в строку входит определенное кол-во символов, например N, тогда если позиция первого символа первой строки = 1, то позиция первого символа второй строки N + 1, третьей строки 2*N + 1 и т.д.
429
02 октября 2002 года
Slon
78 / / 20.01.2000
Цитата:
Originally posted by Relax
ну я имею ввиду, что если шрифт моноширинный, то при определенной ширине RichEdit в строку входит определенное кол-во символов, например N, тогда если позиция первого символа первой строки = 1, то позиция первого символа второй строки N + 1, третьей строки 2*N + 1 и т.д.



Что это у вас с форумом?
Только ответил и вдруг перестали пускать. Сделал шаг назад. Зашел уже на другой адрес.
А моего сообщения нет. Но вообше то лучше стало.
В общем я писал, что шрифт не моноширинный, и что символов в каждой строке разное кол-во, и что "\n" не имеет ширины.
И что уже нашел способ перейти к i-ой строке RichEdit:
RichEdit->SelStart = RichEdit->Perform(EM_LINEINDEX, i, 0);

:)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог