Мемо

11 отговора 0 прегледа
#1

Мемо

Здравейте, искам да управлявам мемо с текста в него. При зареждането на текста от стринг s например при срещането на символа | да го изтрие и да добави нов ред; при срещане на PFOTO: стрингът след него да зарежда картинка в image компонента. За първото примерно пробвах това, но не става:
s := ListItem.SubItems[7];
for i := 0 to length(s) do Begin
if s <> '|' then meKomentar.Lines.Append(s)
else meKomentar.Lines.Add('');
end;
Как може да се осъществят тези неща? Дали е по-добре при самото попълване на мемото на проверявам за тези символи или първо да попълня мемото и после да изследвам ред по ред.

Отговор
в отговор на novak11 #2

Re: Мемо

дай малко код

Успехът се гради на знания и собствена религия!
Отговор
в отговор на novak11 #3

Re: Мемо

Ами разгледай StringReplace функцията и я ползвай, когато променяш Memo-то.
Ама по-добре работи с RichEdit, защото Мемо е ограничено до около 32000 символа.

function StringReplace(const S, OldPattern, NewPattern: string; Flags: ReplaceFlags): tring;

Редактирано от NikB на

Отговор
в отговор на NikB #4

Re: Мемо

Според теб дали е по-добре при самото попълване на мемото на проверявам за тези символи или първо да попълня мемото и после да изследвам ред по ред? RichEdit не намерих в Lazarus.

Отговор
в отговор на novak11 #5

Re: Мемо

1. За попълване/проверка: зависи как върви работата
- ако бързо идват много редове и с това завършва запълването, по-добре е да ги добавиш в един стринг ( с разделители CR+LF, т.е. #$0D#$0F), след това да направиш замяната и накрая да напишеш Memo.Text := стринга.
- ако от време на време идват единични редове - замяната ще я правиш преди попълването.
2. Не съм се занимавал с Лазаррус, но RichEdit е Win контрола и няма начин да липсва - може да се казва нещо друго.

Отговор
в отговор на NikB #6

Re: Мемо

Ето това:

Form1.meKomentar.Text := StringReplace(s,'|',#$0D,[rfReplaceAll]);

върши работата! Много благодаря!

Редактирано от novak11 на

Отговор
в отговор на NikB #7

Re: Мемо

"по-добре е да ги добавиш в един стринг ( с разделители CR+LF, т.е. #$0D#$0F)"

Тези разделите не са съвсем така. Излиза само първия, #$0D. Другия, който е нещо подобно на: <--| , мисля съответства на Ctrl+Enter и отива на нов ред, не е този символ. Би ли казал кой е кода на другия символ? В Character Maps не мога да го намеря. Трябва да заменя цялата двойка едновременно, защото после като го запиша във файл, отива на нов ред и после като го чета обратно в ListView излизат на толкова редове, колкото са в мемото, а трябва всичко да е на един ред, разделен с '|'. Вижда се само при запис във файл.

Редактирано от novak11 на

Отговор
в отговор на novak11 #8

Re: Мемо

А, LineFeed (LF) e с код 10 (0x0A, щестнадесетично) - онова 0F e печатна грешка

Отговор
в отговор на NikB #9

Re: Мемо

Много благодаря! Сега вече стана точно както го исках.

Отговор
в отговор на NikB #10

Re: Мемо

Като копирам текст примерно от форума или с уеб адрес, пак ми го изкарва на повече редове при запис, макар че в ListView е наред. Да не би да има още някой друг символ в уеба, който да трябва да изтривам?

Отговор
в отговор на novak11 #11

не разбрах въпроса

не разбрах въпроса, някакъв пример да дадеш?

Отговор
в отговор на NikB #12

Re: не разбрах въпроса

Примерно пиша си мемото, давам запис, прехвърля си текста в съответното поле в ListView, като ми разделя новия ред с | , както искам и всичко ми е на един ред. Запис ListView във файл - всичко е ок!

Сега копирам текста от форума в мемото, примерно:
"Автор: NikB
Тема: Re: не разбрах въпроса

не разбрах въпроса, някакъв пример да дадеш?"

В полето на ListView всичко е точно. Записвам във файл, после чета в ListView и отиваха на друг ред. Сега пак го пробвах с:
Автор: NikB
Тема: Re: не разбрах въпроса

не разбрах въпроса, някакъв пример да дадеш?
[линк]

Всичко излезна наред! Вчера не ставаше! Обаче пък превключването на директориите се гъбяса. Мислех си, че има някакъв символ, който не съм включил. Пак ще тествам отново нещата.

Сега всичко му е наред! Странно, вчера беше както описах по-горе. Игнорирай предишното съобщение и много благодаря за съдействието!

Редактирано от novak11 на

Отговор