![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Frame в dll [D6, Win2k]
Ekaterina © (2002-08-15 10:10:00)Есть dll. В ней есть фрейм и форма. Экспортируется процедура, которая помещает фрейм на форму.
procedure Test;
var f:TFrame1;
begin
Form2:=TForm2.Create(Application);
try
f:=TFrame1.Create(Form2);
f.Parent:=Form2;
Form2.Show;
Application.ProcessMessages;
Sleep(2000);
finally
f.Free;
form2.Free;
end;
end;
Это вроде работает. Теперь берём на фрейм помещаем ComboBox и задаём любой непустой Items (если пустой, то всё нормально).
На строкеf:=TFrame1.Create(Form2);получаем ошибку:
"Error reading ComboBox1.Items.Strings: Control "Frame1" has no parent window".
Что надо сделать???
Ekaterina (2002-08-15 12:04:00) [1]Вообще-то, если дело происходит не в dll, то работает и так. Всё создаётся нормально и с Items-ами. И вообще, он не должен пытаться отрисовывать Items-ы, пока не попытается отрисовывать форму. Сперва создаётся форма, потом все её компоненты, вместе с ComboBoxом должен создаться и Items. А рисование происходит после Form2.Show.
Skier (2002-08-15 11:57:00) [2]>Ekaterina
> Интересно всё-таки, в чём ошибка в моём варианте.
Окно ComboBox-а ещё не создано, а он уже пытается отрисовывать
свои Items-ы.
Вообще-то можно написать свой класс TYourComboBox и
в перекрытом методе CreateWnd ( после inherited !)
задавать нужные Items-ы.
Ekaterina (2002-08-15 11:38:00) [3]Это, конечно, способ обойти проблему, но не её решение. Интересно всё-таки, в чём ошибка в моём варианте.
Skier (2002-08-15 11:33:00) [4]>Ekaterina
procedure Test;
var f:TFrame1;
begin
Form2:=TForm2.Create(Application);
try
f:=TFrame1.Create(Form2);
f.Parent:=Form2;
f.ComboBox1.Items.Add("New Item");
Form2.Show;
Application.ProcessMessages;
Sleep(2000);
finally
f.Free;
form2.Free;
end;
end;