У меня теоритический вопрос.
вопрос вот в чем:
нам необходимо создать в рантайме несколько компонентов одного типа,
- Код: Выделить всё
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 как-то эти компоненты различает.
Как?