Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подсчет символов [D6, Win95/98]


Pretender ©   (2004-11-24 15:40:00) 

Люди, подскажите, пожалуйста, как сделать следующее:

на форме есть компонента Memo1. А как сделать так, чтобы в компонене Label1 считались символы, которые вводятся в Memo, а при нажатии BackSpace они стирались и счетчик тоже убавлялся на соответствующее количество символов? С Label проблем нет, подскажите алгоритм как это организовать. Я пробовал сделать через обработчик событий OnKeyPress, но считались вообще все нажатия клавиш, BackSpace тоже :).


Poirot   (2004-11-24 18:29:00) [1]

>>Если WordWrap=True, то они (\n) не нужны. И без них прекрасно >>строки переносятся.
Да, но если ты введёшь этот самый \n. Так кто тебе его запрещает ввести?!!.. проблема в том, что Count для мемо соответствует количеству строк именнов мемо, а не в тексте...
И соглашусь что просто так тривиально уменьшать количество символов непрально, но всётаки это зависит от задачи. А если не надо считать \n в данной задаче - тогда это уже проблема другая - их не считать... логично?! - это слишком долго для одной каждого изменения сивола...
А ворд врап это вообще отдельная песня. Так как если ты сохранишь содержимое мемо в файл, то там уже буит реальное количество строк и совершщенно не приделать буит этот самый ворд врап.
PS: пРедлагаю закончит флуд. Задача тривиальна. Мб поговорить на более интересные темы?! а?!... :)


Ega23   (2004-11-24 18:13:00) [2]

Проверял - я про врапы... Если есть \n то они есть....
Если WordWrap=True, то они (\n) не нужны. И без них прекрасно строки переносятся.
Даже сейчас, набивая данный текст, я его пишу в мемо. И строка
11111111111111111111111111111111111111111111111111111111111111 1111111111111111
у меня занимает полторы строчки, а на экране выглядит целой.
Когда строишь пользовательский интерфейс, то очень у многих компонентов Align выставляешь. А это автоматически означает, что при одинаковой длине текста Мемо на разных разрешениях экрана может быть разное количество строк.
И ещё. Я могу поставить в качестве разделителя строк символ #13, а также #13+#10 (на сколько мне известно DOS-овское и UNIX-овое различие разделителя строк).


Poirot   (2004-11-24 17:37:00) [3]

Флуд на пустом месте....
Poirot ©   (24.11.04 17:01) [6] - ещё раз перечитай...
Проверял - я про врапы... Если есть \n то они есть....
А врапы это не переносы строки...
ЗЫ: Initional conditions изначально показывать надо, а не в конце...


Ega23   (2004-11-24 17:36:00) [4]

2 Poirot ©

Ну и вдогонку, раз мы все такие "умные":
Лезем на сайт, ну, допустим, www.megafon.ru, выбираем сервис "Отправить SMS" и в форме текста сообщения начинаем нажимать Enter. Сколько символов из 110 отведённых остаётся?

Так что учите матчасть, молодой человек.


ALEIIIKA   (2004-11-24 17:35:00) [5]

Сорри я не усмортел, думал меня спрашивает.


Ega23   (2004-11-24 17:30:00) [6]

2 Poirot ©   (24.11.04 17:15) [8]
1.
Возми в руки Делфи и проверь.
Ну естественно проверил.
Доказательство:
Form1, Memo1, Button1, Label1.
Memo1.Width:=81; Memo1.Font - по умолчанию. В общем 11 символов вмещается в строку; Memo1.WordWrap:=True;

procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:=IntToStr(Length(Memo1.Text));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Caption := IntToStr(Length(Memo1.Lines.Text) - 2*(Memo1.Lines.Count-1))
end;

Вводим

Начинаем ввод символов. Вводим строчку '1111111111 1111111111'
Button1 -> Label1.Caption=21
Button2 -> Label1.Caption=19

Где правильно?

Докучи о каких-то Врапах вообще изначально речи не было:)

Специально пересмотрел: изначально о только ПЕЧАТНЫХ символах речи тоже не было.


Poirot   (2004-11-24 17:28:00) [7]

Дык блин что я и написал в
Poirot ©   (24.11.04 17:01) [6]
Введённые - а ентер он тоже может ввести:) Это мемо!!!!
Сам почитай.. я взял и проверил...


Плохиш   (2004-11-24 17:24:00) [8]


> Poirot ©   (24.11.04 17:15) [8]
> Ega23 ©   (24.11.04 17:06) [7]
> Возми в руки Делфи и проверь.

Ты эта, сам бы взял и проверил. В Text находятся только символы введённыепользователем, что вроде как автору и нужно.


Poirot   (2004-11-24 17:15:00) [9]

Ega23 ©   (24.11.04 17:06) [7]
Возми в руки Делфи и проверь.
Ты не прав. Практика показывает:)
Докучи о каких-то Врапах вообще изначально речи не было:)
ЗЫ:нехорошо сначала что-то делать а потом обговаривать условия ка кэто должно работать.


Ega23   (2004-11-24 17:06:00) [10]

Ставим Memo1.WordWrap:=True и никаких тебе $0D + $0A


Poirot   (2004-11-24 17:01:00) [11]

Ega23 ©   (24.11.04 16:54) [5]
Это если без учёта переноса строки то да, а если считать именно символы чепятные символы, то нет!


Ega23   (2004-11-24 16:54:00) [12]

2 wal ©   (24.11.04 15:54) [3]

procedure TForm1.OnMemo1Change(Sender:TObject)
begin
Label1.Caption := IntToStr(Length(Memo1.Text))
end;

Достаточно там.


Pretender   (2004-11-24 16:52:00) [13]

Вечером проверю. Ребят, спасибо! Но если что я опять пристану. :)


wal   (2004-11-24 15:54:00) [14]


procedure TForm1.OnMemo1Change(Sender:TObject)
begin
 Label1.Caption := IntToStr(Length(Memo1.Lines.Text) - 2*(Memo1.Lines.Count-1))
end;

Помоему так.

С уважением.


Jay   (2004-11-24 15:52:00) [15]

Проверяй код клавиш, если Backspace (#8), значит минут один...


Poirot   (2004-11-24 15:47:00) [16]

А ты попробуй TMemo.OnChange обработчик попользовать у твоего мемо:)


Наверх

Титульная страница Поиск, карта сайта Написать письмо