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

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

Поведение TEdit на модальной форме. [D7, WinXP]


wiser87 ©   (2009-07-15 08:37:00) 

Проблема такая: есть главная форма Form1 и модальная Form2. Form2 является редактором ini-файлов, которые используются в программе. На Form2 расположено более 20 компонентов TEdit.
Мне необходимо отслеживать любое изменение в них. В первый раз, когда вызывается Form2, изменения отслеживаются. Но стоит закрыть эту форму и открыть вызвать вновь, то программа перестает отслеживать изменения. Почему?

Вот код:

Процедура Tform2.MassivEdits создает массив из компонентов TEdit.

procedure Tform2.MassivEdits;
var
 i: integer;
 AComponent: TComponent;
begin
 FEdits:=Tlist.Create;
 for i := 1 to MaxInt do
 begin
 AComponent := FindComponent('Edit'+IntToStr(i));
 if AComponent = NIL then break;
 FEdits.Add(AComponent);
 end;
end;


Процедура TForm2.EditChange (Sender:TObject) отвечает события (например, вывод текста в строке состояния), которые будут происходить в случае изменения любого TEdit.

procedure TForm2.EditChange (Sender:TObject);
begin
 StatusBar1.SimpleText:='Были внесены изменения!';
end;


Процедура TForm2.Changes присваивает свойству OnChange всех компонентов TEdit вызов процедуры EditChange.

procedure TForm2.Changes;
var
i: integer;
begin
for i:=0 to FEdits.Count-1 do
 begin
 TEdit(FEdits[i]).OnChange:=EditChange;
 end;
end;


При показе Form2 формируется массив и присваивается свойство OnChange компонентам TEdit.

procedure TForm2.FormShow(Sender: TObject);
begin
MassivEdits;
Changes;
end;


При закрытие формы происходит высвобождение массива FEdits

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Fedits.Free;
end;


Помогите разобраться что не так?


Игорь Шевченко   (2009-07-15 11:37:00) [1]


> Почему?


Запускаем из-под среды, ставим точки останова в указанных процедурах, смотрим, что выполняется при первом показе, смотрим, что при последующих показах.


clickmaker   (2009-07-15 11:14:00) [2]

> Помогите разобраться что не так?

а смысл этого массива в чем?


{RASkov}   (2009-07-15 09:02:00) [3]

> [0] wiser87 ©   (15.07.09 08:37)
> что не так?

Много чего не так.... для начала не ту конференцию выбрал...
Код ужасный, а проблема непонятная... Хоть и много написано :(
....
В данном случае не нужны ни MassivEdits; ни Changes; ибо едиты статические(т.е. в дизайнере присутствуют) поэтому и обработчик OnChange можно там же(в дизайнере) им и добавить... А если уж так хочется все это программно, то следует их переписать по нормальному...


Наверх

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