Как MSE различает компоненты?
 Добавлено: 14.02.2009 18:55:42
Добавлено: 14.02.2009 18:55:42Доброго времени суток!
У меня теоритический вопрос.
вопрос вот в чем:
нам необходимо создать в рантайме несколько компонентов одного типа,
а затем обратиться к одному из них, например так:
Этот код рабочий, НО!
Вначале, при создании tbooleanedit я как-то забыл присваивать значение
что вызывало при обращении к компоненту ошибку сегментации
ХОТЯ сами компоненты создавались и отображались
Тут собственно и вопрос, MSE их создал и отобразил, значит значение name по дефолту все-таки было присвоено. Но вот какое? Самое банальное, что я придумал:
и принажатии на оба tbooleanedit в showmessage получил пустую строку.
Но ведь MSE как-то эти компоненты различает.
Как?
			У меня теоритический вопрос.
вопрос вот в чем:
нам необходимо создать в рантайме несколько компонентов одного типа,
- Код: Выделить всё
 for i := 1 to 10 do
 begin
 ch := tbooleanedit.create(mainfo);
 with ch as tbooleanedit do
 begin
 parentwidget := mainfo.tscrollbox1;
 bounds_x := 10;
 bounds_y := i * 10;
 name := 'tbooleanedit'+inttostr(i);
 end;
 end; // for i := ...
а затем обратиться к одному из них, например так:
- Код: Выделить всё
- if (findcomponent('tbooleanedit1' as tbooleanedit).value = true
 then showmessage('!!!');
Этот код рабочий, НО!
Вначале, при создании tbooleanedit я как-то забыл присваивать значение
- Код: Выделить всё
- name := 'tbooleanedit'+inttostr(i);
что вызывало при обращении к компоненту ошибку сегментации
ХОТЯ сами компоненты создавались и отображались
Тут собственно и вопрос, MSE их создал и отобразил, значит значение name по дефолту все-таки было присвоено. Но вот какое? Самое банальное, что я придумал:
- Код: Выделить всё
- procedure tmainfo.createtbooleanedits(const sender: TObject);
 var ch : tbooleanedit;
 begin
 ch := tbooleanedit.create(mainfo); //первый
 with ch as tbooleanedit do
 begin
 parentwidget := mainfo;
 color := cl_white;
 bounds_x := 10;
 bounds_y := 10;
 // name := 'tbooleanedit1';
 onsetvalue := @ getsvalue;
 end;
 ch := tbooleanedit.create(mainfo);//второй
 with ch as tbooleanedit do
 begin
 parentwidget := mainfo;
 color := cl_white;
 bounds_x := 10;
 bounds_y := 30;
 // name := 'tbooleanedit2';
 onsetvalue := @ getsvalue;
 end;
 end;
 procedure tmainfo.getsvalue(const sender: TObject; var avalue: Boolean;
 var accept: Boolean);
 begin
 showmessage(':'+(sender as tbooleanedit).name+':');
 end;
и принажатии на оба tbooleanedit в showmessage получил пустую строку.
Но ведь MSE как-то эти компоненты различает.
Как?