Strings := TStringList.Create;
Strings.Items.Add(Memo1.Text + #13#10 + '*Конец блока с текстом*' + #13#10#13#10);
Strings.Items.Add(Memo2.Text + #13#10 + '*Конец блока с информацией*' + #13#10#13#10);
Strings.Items.Add(Memo3.Text + #13#10 + ''*Конец блока с ссылками*' + #13#10#13#10);
Strings.SaveToFile(FileName);
Delphi
Сообщений 31 страница 60 из 151
Поделиться312006-05-19 20:07:01
Поделиться322006-05-19 22:24:54
Понял, спасибо ОГРОМНОЕ, уже всё работает...
Поделиться332006-05-23 03:12:48
Вобщем, хочу я намутить одну фигню... Здесь постораюсь детально описать идею. От вас я хочу услышать комментарии/подсказки, т.к. ещё не представляю как это сделать
Итак, есть у нас скрипт в текстовом формате, вида:
[BB] bla-bla-bla-bla-bla-bla [1] bla-bla-bla [4] [BC] bla-bla-bla [1] bla-bla-bla [3] bla-bla-bla [4] и т.д.
Где: [BB] - это, например, код имени персонажа (или что-то вроде этого).
[1] - перевод каретки на следующую строку.
[3] - перевод каретки на следующую строку с очисткой экрана.
[4] - прекращение вывода текста.
[BC] - вещь.
bla-...-bla - прочий текст.
Теперь нужно следующее:
Чтобы прога прошла по тексту и заменила (кстати, скорей всего в соответствии со спец. таблой): [BB] на {\Персонаж} ; [BC] на {\Вещь} ; [1] на {\кон.стр.} ;
[3] на {\след. экр.} ; [4] на {\конец} .
Собственно говоря всё, что описанно выше вполне можно было сделать обычным блокнотом, причём довольно быстро
Но продолжим: Дело в том, что прога уже должна знать эти коды (всмысле {\конец} и т.п. ) и делать наряду с этими преобразованиями ещё и следующее: исходя из "тега" {\конец} пронумеровывать блоки теста (вставлять перед ними, например "тег" {\номер1}, {\номер2}... {\номер999} ), ну и сохранять в новом формате
Затем, при загрузке уже нового формата, она должна поступать, например, как Круптар:
загружать текст в ЛистБокс, в соответствии с порядковыми номерами в файле, а затем при нажатии на строчку, наша прога грузит блок текста в РичЭдит (или Мемо) следующим образом: Все "теги" вроде {\Персонаж}, {\Враг}, {\Вещь} она нам представляет в виде "Персонаж", "Враг", "Вещь" и выделяет разными цветами (для интуитивного выделения). И ещё: при подсчитывании длины строки каждый из этих "тегов" должен пониматься как указанное пользователем кол-во символов!!!
"Тег" {\кон.стр.} наша прога не должна выводить, вместо этого тест просто должен переходить на следующую строку, "тег" {\след. экр.} должен отмечаться каким-нибудь сиволом другого цвета, который можно будет поставить с помощью кнопки на панеле инструментов (ну и считать его, или не считать за символ тоже должен выбирать пользователь), а "тег" {\конец} нам тоже не должен показываться. Соответсвенно в файл "теги" {\кон. стр.} и {\конец} должны писаться изходя из текста: строка кончается ничем - ставим {\кон. стр.}, а если кончается весь блок, то дописывать {\конец}.
Примерный формат файла:
{\номер1} {\original}
{\Персонаж} bla-bla-bla {\кон.стр.}
bla-bla-bla-bla-bla-bla {\след. экр.}
bla-bla-bla {\конец}
{\translation}
{\Персонаж} бла-бла-бла {\кон.стр.}
бла-бла-бла-бла-бла-бла {\след. экр.}
бла-бла-бла {\конец}
{\Номер2}.....
Пока всё, я спать....
Поделиться342006-05-23 17:56:58
RichEdit - не самый хороший компонент для вывода разноцветного текста. Я использую SynEdit, но и там с этим очень большие проблемы - чтобы раскрасить нужную часть строки приходится менять код в самом компоненте. Так что не знаю, как ты всё это собираешься делать =)
Поделиться352006-05-23 19:20:00
Так что не знаю, как ты всё это собираешься делать =)
Я и сам не знаю
Я и спрашивал, может кто чего-нибудь посоветует...
Поделиться362006-05-24 02:56:48
Насчёт разноцветного текста - а бывает какой-нить изменённый Мемо с поддержкой данной функции? Вроде слышал про МемоПлюс - никто не видел такого? Он может разные строки красить в разные цвета?
Или может быть можно на основе существующего Мемо создать новый компонент с таким свойством? А как?
Или уже кто-то научился красить строки мемо в нужный цвет? Подскажите, плиз! Меня РичЭдит не устраивает, а Мемо - если бы ещё и строки красить можно было, то вообще больше ничего и не надо...
Поделиться372006-05-24 18:45:34
RichEdit и SynEdit могут красить в разные цвета
Поделиться382006-05-25 10:06:16
To Djinn:
Вобщем, попробывал я начать реализовывать расцветку на основе РичЭдит.
Времени было в обрез (работа...), вобщем нашёл я код подсветки HTML синтаксиса и опрался на него...
Получилось примерно следующее:
var
isTag: boolean;
i,x,z: integer;
s,str: string;
Color: TColor;
begin
begin
for i:=0 to Length(RichEdit1.Text) do
begin
RichEdit1.SelStart := i;
RichEdit1.SelLength := 1;
s := RichEdit1.SelText;if (s= '[') then isTag := True;
if isTag then
RichEdit1.SelAttributes.Color:= clRed;
if (s= ']') then isTag := False;
end;
end;
Но есть пара моментов:
1. Цвет один
2. Если потом начать писать после раскрашенного кода, то цвет текста будет красным.
Итак, я пока нашёл один выход:
1. Каким-то образом засунуть коды (двухзначные, пока...) и их цветовые соответствия в ИНИ файл (кстати, возможно в туда вообще засунуть всякие clRED, всмысле как их оттуда считать?): 21=clRED и т.п. Вобщем устроить таблицу цветов.
2. Написать функцию, которая сканирует текст и при нахождении открывающей скобки (пока "[") копирует последующий текст (до закрывающей скобки) в отдельную переменную, затем происходит поиск соответствующего кода в таблице, подсветка кода, поиск следующей открывающей скобки и т.д. И подвесить эту функцию на нажатие кнопки, а так же на загрузку текста...
Минусы:
1. Тормознутость... Задержка при загрузке ещё не страшно (реализовать загрузку, как я уже говорил, я хочу как в Круптаре, то есть мааленькими блоками), но вот при каждом нажатии клавиш... Надо функцию писать максимально быстрой...
2. Надо выполнять ещё и подсветку обычного текста в обычный цвет, иначе он может перекраситься в один из цветов. А это тоже не добавляет функции скорости...
Джинн, что ты на это скажешь?
И где взять SynEdit?
Поделиться392006-05-25 18:04:49
Вобщем так - Полазил я по Инету, нашёл много интересного по части SynEdit.
В данный момент он у меня может расскрашивать ОДИН код (например [Враг]) в любой цвет, причём Сам код и цвет расскрасски можно задать самому Но это ПОКА один...
Вопрос: вот код перевода каретки #13#10 ? а код пробела?
Насчёт разноцветного текста - а бывает какой-нить изменённый Мемо с поддержкой данной функции? Вроде слышал про МемоПлюс - никто не видел такого? Он может разные строки красить в разные цвета?
Загляни сюда: http://www.delphikingdom.com/asp/viewit … logid=1148
Плюс, если хочешь могу дать статьи (там в основном листинги) по всякой расскраске Мемо и РичЭдит.
Поделиться402006-05-25 19:54:46
Код пробела #20 или ' '
Поделиться412006-05-25 20:02:50
Andrew Shtein, дай статьи плиз, veroh@yandex.ru
Поделиться422006-05-25 21:55:51
To Djinn:
Если можешь, дай пожалуйста исходники Круптара (желательно 6-й версии(ну или выше )) - хочу посмотреть как у тебя реализованны загрузка и сохранение файлов. Пожалуйста!
Хочу побыстрее сделать стабильную версию и заняться фичами - есть идея как присобачить туды встроенный словарь
Кстати, зачем в SynEdit слева серая полоска?
To Guyver: письмо с адресом архива выслал... Статьи выбирал навскидку, так что могут быть не все и некоторые не по теме. Вес - 123 кб. Все про Мемо и РичЭдит.
Offtop: МЛЯ, мне же до послезавтра надо диплом написать...
Отредактировано Andrew Shtein (2006-05-25 22:30:39)
Поделиться432006-05-26 00:24:29
Спасибо за статьи - правда не помогли они мне :о) У меня вот какая трабла:
Есть у меня richedit, я в него текст гружу построчно... Так вот - как сделать так, что бы текст в каждой строке, где встречается слово "Вася", был зелёным... И так только в этих строках, а в других он был нормального чёрного цвета :о)
Как я не изголяюсь - получается не то - либо только слова "Вася" во всём тексте зелёные, либо текст до первого "Васи" нормальный, а потом он ВЕСЬ зелёного цвета... Ну никак не получается... А мне надо чтоб именно полностью вся строчка с "Васей" была зелёной - и ни больше, ни меньше...
И вроде бы первая статья про ричэдит, которую ты мне прислал, должна была помочь, но как я её не изменял - у меня ничего не работает :*( А компонент RichMemo, который я скачал по ссылке в верхнем посте, выделяет только слова, а не строки, эх - плохо быть дураком!!!
Поделиться442006-05-26 01:17:47
To GuyVer: Качни SynEdit и не мучайся...
To Djinn:
Слухай, я конечно балбес, но обьясни мне как из таблы вида:
*1
name=1
font=Arial
*2
name=Vasya
font=gothik
считать значения... я уже задолбался...
Поделиться452006-05-26 19:03:53
Кстати, зачем в SynEdit слева серая полоска?
Для нумерования строк. Можешь отключить её Gutter.Visible := False
Слухай, я конечно балбес, но обьясни мне как из таблы вида:
*1
name=1
font=Arial
*2
name=Vasya
font=gothik
считать значения... я уже задолбался...
Считываешь строку, копируешь в отдельный string слово перед равно, и ещё в отдельный string - значение после равно.
Функция Copy(S: String; Index, Count: Integer): String;
Поделиться462006-05-26 19:20:06
Как высчитать кол-во символов до равно и после?
Как я понимаю, сначала надо по это строчке пройтись, найти в ней "Равно", и всё что до равно - в одну сторону, а после в другую.
Но вот это-то я и не могу сделать...
Поделиться472006-05-26 22:51:26
Киньте мне на мыло пжлста кто-нить SynEdit - я его скачал, но при инсталляции ошибка какая-то выскакивает, может он у меня старый? Хелп...
Поделиться482006-05-26 23:41:12
http://www.unihighlighter.com/ - здесб можно найти как SynEdit, так и инструкцию по установке Ну и ещё небольшой бонус в виде UniHighligther...
Поделиться502006-05-27 01:32:15
Как я понимаю, сначала надо по это строчке пройтись, найти в ней "Равно", и всё что до равно - в одну сторону, а после в другую.
Но вот это-то я и не могу сделать...
Порыскал в нете, понял что скорей всего это можно сделать через функцию "Pos"
Поделиться512006-05-27 18:36:57
Порыскал в нете, понял что скорей всего это можно сделать через функцию "Pos"
Так и делается обычно =)
Поделиться522006-05-29 22:48:02
интересно... вы все тут присутствующие про делфиворлд слышали?
http://delphiworld.narod.ru/ вот посетите, ДВ6 скачайте, поизучайте... от стольки лишних компонентов избавитесь и столько лишних вопросов исчезнет. Я вообще не понимаю, зачем компоненты для делфи? Если все можно сделать самому, да еще и намного короче. (за что еще не люблю компоненты, так это за мусор, вставляемый туда создателями, всякие эбоуты с картинками, которые потом в код программы иногда переползают, некоторые вообще платные... имхо - полный бред...)
Поделиться532006-05-30 01:09:54
Компоненты нужны и многие очень полезны.
некоторые вообще платные... имхо - полный бред...)
Если тебе не нравятся эти компоненты, напиши свои =)
Я пишу свои и ни на что не жалуюсь.
Поделиться542006-05-30 18:31:53
Ну если ты так крут - то ты молодец ;о) А вот у меня даже в школе программирования не было :*(
Кстати, SynEdit - вещь! Лучше компонента я пока не видел!!! Спасибо что подсказали...
Поделиться552006-05-31 01:40:56
Djinn, скажи лучше - как делать для своей проги обновление через инет? Как ты энто в Круптаре реализовал?
Поделиться562006-05-31 02:15:49
Компоненты нужны и многие очень полезны.
Lain_13 написал(а):некоторые вообще платные... имхо - полный бред...)
Если тебе не нравятся эти компоненты, напиши свои =)
Я пишу свои и ни на что не жалуюсь.
А я и говорю, нефик пользоваться готовеньким! Кстати, и пишу.
...к вопросу о автообновлении...
Вот один из вариантов: пишем мааааахонькую прожку без использования GUI, которая обращается к сайту, читает оттудова определенный файл (а там написана версия и то, что нужно скачать), обрабатывает его, качает то, что указано в файле, закрывает открытые сеансы программы, меняет файлы, запускает ее сново. ВСЕ! ПРОГА ОБНОВЛЕНА!
з.ы.:
1. прогу можно засунуть в основной ЕХЕ и распаковывать по мере надобности.
2. прогу можно зделать с GUI и отображать прогресс обновления... да и всякую другую лабуду, например номер новой версии, список изменений, спрашивать, а надо ли обновлять и т.п.
3. вообще много чего модно сделать... например бинарные патчи...
з.з.ы.: как сделано в круптаре я не смотрел, качать не хочу... все равно переводом приставочных игр врятли займусь когда нибуть... (хоть и говорят: не зарекайся...)
Отредактировано Lain_13 (2006-05-31 02:16:30)
Поделиться572006-06-04 07:06:04
Кстати, а как вы защищаете ввод текста 'от дурака': в смысле, как избежать появления ошибки если в поле ввода пустота или введены буквы, когда нужен только integer? Я знаю только средства обработки исключений - может можно как попроще?
Поделиться582006-06-04 21:34:28
Можно свою функцию StrToInt написать, тогда не будет сообщения об ошибке
Поделиться592006-06-06 01:12:16
А не проще в поле ввода на изменение сделать подпрограмму удаляющую все символы, отличающиеся от цифр.
Вот пример:
procedure TForm2.LabeledEdit5Change(Sender: TObject); var s:string; i,k:integer; sysind:boolean; begin k:=LabeledEdit5.SelStart; s:=LabeledEdit5.text; i:=1; while i<=length(s) do begin sysind:=false; if (ord(s[i])>=48)and(ord(s[i])<=57) then sysind:=true; if not(sysind) then begin delete(s,i,1); dec(i); dec(k); end; inc(i); end; if length(s)>3 then begin // - это ограничение на длину строки delete(s,k,1); dec(k); end; LabeledEdit5.text:=s; LabeledEdit5.SelStart:=k; end;
Поделиться602006-06-06 05:26:40
здорово, спасибо.