| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Проблемы при работе с МЕМО |
| Автор: Rave 3.6.2004, 23:31 |
| Ввот такая ситуация: (Delphi 5) Читаю в цикле строки из TStringList, успешно их разбираю (проверено в отладчике), и тут мне надо занести их части в конкретные строки созданных на форме объектов МЕМО. Первая строка - читается, заносится... Вторая строка - В одно МЕМО заносится, во второе - нет.. Третья строка и далее - разбираются нормально, но в МЕМО не идут... В чём может быть дело? procedure ReadPredmets(Source: TStringList); var TEMP : String; i : integer; posit : integer; begin If Source.Count>0 Then Begin For i:=0 to Source.Count-1 do Begin TEMP:=Source.Strings[i]; posit:=Pos(';',TEMP); pform2.Memo19.Lines[i]:=Copy(TEMP,1,posit-1); delete(TEMP,1,posit); posit:=Pos(';',TEMP); pform2.Memo11.Lines[i]:=Copy(TEMP,1,posit-1); delete(TEMP,1,posit); posit:=Pos('=',TEMP); if posit > 0 Then pform2.Memo12.Lines[i]:='OK'; End; End; end; Никаких объявлений размеров МЕМО предварительно не делал... Ситуация с заносом первой строки и половины второй - ставит меня в тупик... Я понимаю, что если первая строка правильно зашла, то код работает. Но вторая не заходит... Вот такая беда... Помогите, кто-нибудь? P.S. FAQ обчитался.... нетути... |
| Автор: Illusion Dolphin 3.6.2004, 23:44 |
| pform2.Memo19.Lines[i]:=Copy(TEMP,1,posit-1); Насколько я знаю, то если в мемо не будет итой строки, то это обращение ни к чему хорошему не приведёт... Я бы делал что-то вроде этого: pform2.Memo19.clear; //очищаем мемо (по надобности, т.к. из кода не видно, что тебе необходимо... for i:=0 to Source.Count-1 do begin TEMP:=Source.Strings[i]; .... pform2.Memo19.Lines.add(Copy(TEMP,1,posit-1); //заносим построкова данные ... |
| Автор: Guest 3.6.2004, 23:53 |
| Спасибо, попробую... А первоначальный размер МЕМО как-нибудь можно задать? Оно по дефолту пустое и я его инициализирую таким вот кривоватым образом... |
| Автор: December 4.6.2004, 00:20 | ||
В смысле? Оно максимум 65 килов, а про минимум я ничего не слышал. |
| Автор: Rave 4.6.2004, 00:25 |
| Может быть там при инициализации только одна строка ? И при обращении к осталлным строкам до их создания - вылезают такие эффекты? |
| Автор: hhh 4.6.2004, 08:13 |
| 2Rave |
| Автор: hhh 4.6.2004, 08:15 |
| 2Rave Само сабой, как ты представляешь обратиться к несуществующему "пока" объекту? Прошу прощения за предыдущий пост - запарился |
| Автор: December 4.6.2004, 23:15 |
| При инициализации - ноль строк. По определению. |
| Автор: Guest 5.6.2004, 18:42 |
| Спасибо. С этим разобрался. По умолчанию в мемо уже есть одна пустая строка. Я её сперва очищаю, потом уже добавляю строки. В итоге получился вот такой код : (Thanks to Illusion Dolphin for idea) If Source.Count>0 Then Begin pform2.Memo19.clear; For i:=0 to Source.Count-1 do Begin TEMP:=Source.Strings[i]; posit:=Pos(';',TEMP); //вместо pform2.Memo19.Lines[i]:=Copy(TEMP,1,posit-1); пишем pform2.Memo19.Lines.Add(Copy(TEMP,1,posit-1)); //заметьте lines без индекса. delete(TEMP,1,posit); и т.д. Вот. Так что спасибо. И ещё один вопрос остался: как определить, что фокус ввода находится в этом мемо? И чем отличаются события OnKeyPress и OnKeyDown? |
| Автор: Rave 5.6.2004, 18:48 |
| Это я написал выше... Заранее спасибо за ответы |
| Автор: bagira 5.6.2004, 20:33 | ||
Rave 1. Для Memo существует два события фокуса: OnEnter и OnExit. Событие OnEnter происходит, когда элемент получает фокус ввода, а событие OnExit - когда теряет его. 2. Событие OnKeyPress - происходит при нажимании клавиши, а событие OnKeyDown - при отпускании ее. |
| Автор: Rave 6.6.2004, 22:40 |
| Спасибо |
| Автор: Guest 7.6.2004, 08:14 |
| bagira Угу, а OnKeyUp когда происходит? И так OnKeyPres - происходит когда кнопка нажата и отпущена. OnKeyDown - когда кнопка нажата. OnKeyUp - когда кнопка отпущена. |