Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Проблемы при работе с МЕМО


Автор: Rave 3.6.2004, 23:31
Ввот такая ситуация: (Delphi 5)
Читаю в цикле строки из TStringList, успешно их разбираю (проверено в отладчике),
и тут мне надо занести их части в конкретные строки созданных на форме объектов МЕМО.
Первая строка - читается, заносится...
Вторая строка - В одно МЕМО заносится, во второе - нет.. sad.gif
Третья строка и далее - разбираются нормально, но в МЕМО не идут... В чём может быть дело?

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
Это я написал выше...
Заранее спасибо за ответы smile.gif

Автор: bagira 5.6.2004, 20:33
Цитата
И ещё один вопрос остался: как определить, что фокус ввода находится в этом мемо?
И чем отличаются события OnKeyPress и OnKeyDown? 



Rave
1. Для Memo существует два события фокуса: OnEnter и OnExit. Событие OnEnter происходит, когда элемент получает фокус ввода, а событие OnExit - когда теряет его.

2. Событие OnKeyPress - происходит при нажимании клавиши, а событие OnKeyDown - при отпускании ее.

Автор: Rave 6.6.2004, 22:40
Спасибо smile.gif

Автор: Guest 7.6.2004, 08:14
bagira
Угу, а OnKeyUp когда происходит?

И так OnKeyPres - происходит когда кнопка нажата и отпущена.
OnKeyDown - когда кнопка нажата.
OnKeyUp - когда кнопка отпущена.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)