Magic Team

Объявление

Сайт переехал сюда: http://magicteam.net
Новый форум: http://magicteam.net/forum

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Magic Team » Программирование » Delphi


Delphi

Сообщений 31 страница 60 из 151

31

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);

0

32

Понял, спасибо ОГРОМНОЕ, уже всё работает...

0

33

Вобщем, хочу я намутить одну фигню... Здесь постораюсь детально описать идею. От вас я хочу услышать комментарии/подсказки, т.к. ещё не представляю как это сделать :D

Итак, есть у нас скрипт в текстовом формате, вида:
[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}.....

Пока всё, я спать....

0

34

RichEdit - не самый хороший компонент для вывода разноцветного текста. Я использую SynEdit, но и там с этим очень большие проблемы - чтобы раскрасить нужную часть строки приходится менять код в самом компоненте. Так что не знаю, как ты всё это собираешься делать =)

0

35

Так что не знаю, как ты всё это собираешься делать =)

Я и сам не знаю  :D
Я и спрашивал, может кто чего-нибудь посоветует...

0

36

Насчёт разноцветного текста - а бывает какой-нить изменённый Мемо с поддержкой данной функции? Вроде слышал про МемоПлюс - никто не видел такого? Он может разные строки красить в разные цвета?

Или может быть можно на основе существующего Мемо создать новый компонент с таким свойством? А как?

Или уже кто-то научился красить строки мемо в нужный цвет? Подскажите, плиз! Меня РичЭдит не устраивает, а Мемо - если бы ещё и строки красить можно было, то вообще больше ничего и не надо...

0

37

RichEdit и SynEdit могут красить в разные цвета

0

38

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?

0

39

Вобщем так - Полазил я по Инету, нашёл много интересного по части SynEdit.
В данный момент он у меня может расскрашивать ОДИН код (например [Враг]) в любой цвет, причём Сам код и цвет расскрасски можно задать самому :) Но это ПОКА один...

Вопрос: вот код перевода каретки #13#10 ? а код пробела?

Насчёт разноцветного текста - а бывает какой-нить изменённый Мемо с поддержкой данной функции? Вроде слышал про МемоПлюс - никто не видел такого? Он может разные строки красить в разные цвета?

Загляни сюда: http://www.delphikingdom.com/asp/viewit … logid=1148

Плюс, если хочешь могу дать статьи (там в основном листинги) по всякой расскраске Мемо и РичЭдит.

0

40

Код пробела #20 или ' '

0

41

Andrew Shtein, дай статьи плиз, veroh@yandex.ru

0

42

To Djinn:
Если можешь, дай пожалуйста исходники Круптара (желательно 6-й версии(ну или выше  :D )) - хочу посмотреть как у тебя реализованны загрузка и сохранение файлов. Пожалуйста!

Хочу побыстрее сделать стабильную версию и заняться фичами - есть идея как присобачить туды встроенный словарь  :D

Кстати, зачем в SynEdit слева серая полоска?

To Guyver: письмо с адресом архива выслал... Статьи выбирал навскидку, так что могут быть не все и некоторые не по теме. Вес - 123 кб. Все про Мемо и РичЭдит.

Offtop: МЛЯ, мне же до послезавтра надо диплом написать...

Отредактировано Andrew Shtein (2006-05-25 22:30:39)

0

43

Спасибо за статьи - правда не помогли они мне :о) У меня вот какая трабла:

Есть у меня richedit, я в него текст гружу построчно... Так вот - как сделать так, что бы текст в каждой строке, где встречается слово "Вася", был зелёным... И так только в этих строках, а в других он был нормального чёрного цвета :о)

Как я не изголяюсь - получается не то - либо только слова "Вася" во всём тексте зелёные, либо текст до первого "Васи" нормальный, а потом он ВЕСЬ зелёного цвета... Ну никак не получается... А мне надо чтоб именно полностью вся строчка с "Васей" была зелёной - и ни больше, ни меньше...

И вроде бы первая статья про ричэдит, которую ты мне прислал, должна была помочь, но как я её не изменял - у меня ничего не работает :*( А компонент RichMemo, который я скачал по ссылке в верхнем посте, выделяет только слова, а не строки, эх - плохо быть дураком!!!

0

44

To GuyVer: Качни SynEdit и не мучайся...

To Djinn:
Слухай, я конечно балбес, но обьясни мне как из таблы вида:

*1
name=1
font=Arial
*2
name=Vasya
font=gothik

считать значения... я уже задолбался...

0

45

Andrew Shtein написал(а):

Кстати, зачем в SynEdit слева серая полоска?

Для нумерования строк. Можешь отключить её Gutter.Visible := False

Andrew Shtein написал(а):

Слухай, я конечно балбес, но обьясни мне как из таблы вида:

*1
name=1
font=Arial
*2
name=Vasya
font=gothik
считать значения... я уже задолбался...

Считываешь строку, копируешь в отдельный string слово перед равно, и ещё в отдельный string - значение после равно.
Функция Copy(S: String; Index, Count: Integer): String;

0

46

Как высчитать кол-во символов до равно и после?
Как я понимаю, сначала надо по это строчке пройтись, найти в ней "Равно", и всё что до равно - в одну сторону, а после в другую.
Но вот это-то я и не могу сделать...

0

47

Киньте мне на мыло пжлста кто-нить SynEdit - я его скачал, но при инсталляции ошибка какая-то выскакивает, может он у меня старый? Хелп...

0

48

http://www.unihighlighter.com/ - здесб можно найти как SynEdit, так и инструкцию по установке :) Ну и ещё небольшой бонус в виде UniHighligther...

0

49

Сенкс!

0

50

Как я понимаю, сначала надо по это строчке пройтись, найти в ней "Равно", и всё что до равно - в одну сторону, а после в другую.
Но вот это-то я и не могу сделать...

Порыскал в нете, понял что скорей всего это можно сделать через функцию "Pos" :)

0

51

Andrew Shtein написал(а):

Порыскал в нете, понял что скорей всего это можно сделать через функцию "Pos"

Так и делается обычно =)

0

52

интересно... вы все тут присутствующие про делфиворлд слышали?
http://delphiworld.narod.ru/ вот посетите, ДВ6 скачайте, поизучайте... от стольки лишних компонентов избавитесь и столько лишних вопросов исчезнет. Я вообще не понимаю, зачем компоненты для делфи? Если все можно сделать самому, да еще и намного короче. (за что еще не люблю компоненты, так это за мусор, вставляемый туда создателями, всякие эбоуты с картинками, которые потом в код программы иногда переползают, некоторые вообще платные... имхо - полный бред...)

0

53

Компоненты нужны и многие очень полезны.

Lain_13 написал(а):

некоторые вообще платные... имхо - полный бред...)

Если тебе не нравятся эти компоненты, напиши свои =)
Я пишу свои и ни на что не жалуюсь.

0

54

Ну если ты так крут - то ты молодец ;о) А вот у меня даже в школе программирования не было :*(
Кстати, SynEdit - вещь! Лучше компонента я пока не видел!!! Спасибо что подсказали...

0

55

Djinn, скажи лучше - как делать для своей проги обновление через инет? Как ты энто в Круптаре реализовал?

0

56

Djinn написал(а):

Компоненты нужны и многие очень полезны.

Lain_13 написал(а):

некоторые вообще платные... имхо - полный бред...)

Если тебе не нравятся эти компоненты, напиши свои =)
Я пишу свои и ни на что не жалуюсь.

А я и говорю, нефик пользоваться готовеньким! Кстати, и пишу.

...к вопросу о автообновлении...
Вот один из вариантов: пишем мааааахонькую прожку без использования GUI, которая обращается к сайту, читает оттудова определенный файл (а там написана версия и то, что нужно скачать), обрабатывает его, качает то, что указано в файле, закрывает открытые сеансы программы, меняет файлы, запускает ее сново. ВСЕ! ПРОГА ОБНОВЛЕНА!
з.ы.:
1. прогу можно засунуть в основной ЕХЕ и распаковывать по мере надобности.
2. прогу можно зделать с GUI и отображать прогресс обновления... да и всякую другую лабуду, например номер новой версии, список изменений, спрашивать, а надо ли обновлять и т.п.
3. вообще много чего модно сделать... например бинарные патчи...
з.з.ы.: как сделано в круптаре я не смотрел, качать не хочу... все равно переводом приставочных игр врятли займусь когда нибуть... (хоть и говорят: не зарекайся...)

Отредактировано Lain_13 (2006-05-31 02:16:30)

0

57

Кстати, а как вы защищаете ввод текста 'от дурака': в смысле, как избежать появления ошибки если в поле ввода пустота или введены буквы, когда нужен только integer? Я знаю только средства обработки исключений - может можно как попроще?

0

58

Можно свою функцию StrToInt написать, тогда не будет сообщения об ошибке

0

59

А не проще в поле ввода на изменение сделать подпрограмму удаляющую все символы, отличающиеся от цифр.

Вот пример:

Код:
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;

0

60

^_^  здорово, спасибо.

0


Вы здесь » Magic Team » Программирование » Delphi