-
Здравствуйте. Подскажите пожалуйста, как создать компонент - наследник TComboBox, который при создании уже будет содержать некоторые строки.
-
Перекрыть конструктор и вставить в него эти строки
-
Делал так:
constructor TSerialBaudrateComboBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Style := csDropDownList;
Font.Size := 10;
Font.Style := [fsBold];
Items.Add('110');
Items.Add('300');
Items.Add('600');
Items.Add('1200');
Items.Add('2400');
Items.Add('4800');
Items.Add('9600');
Items.Add('14400');
Items.Add('19200');
Items.Add('38400');
Items.Add('56000');
Items.Add('57600');
Items.Add('115200');
Items.Add('128000');
Items.Add('256000');
end;
Ошибка при вставке компонента на форму: Control '' has no parent window
-
зачем же ты зарегистрировал в иде неотлаженный компонент?
-
Мне показалось, что так будет быстрее.
-
ну вот теперь ты видишь и правишь один код, а ошибку генерирует совсем другой код твоего комбобокса.
молодец.
-
При такой модификации во время выполнения строки присутствуют. А почему не получается сделать аналогично во время проектирования, чтобы при клике на Items в инспекторе объектов видеть эти строчки?
constructor TSerialBaudrateComboBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Style := csDropDownList;
Font.Size := 10;
Font.Style := [fsBold];
if not (csDesigning in ComponentState) then
begin
Items.Add('110');
Items.Add('300');
Items.Add('600');
Items.Add('1200');
Items.Add('2400');
Items.Add('4800');
Items.Add('9600');
Items.Add('14400');
Items.Add('19200');
Items.Add('38400');
Items.Add('56000');
Items.Add('57600');
Items.Add('115200');
Items.Add('128000');
Items.Add('256000');
end;
end;
-
Медвежонок Пятачок, возможно, ошибка генерируется из-за того, что комбобокс пытается отреагировать на изменения свойства Items и для этого ему нужно знать Parent (наверное), который определяется после выполнения кода конструктора.
-
потому что итемсы это паблишед свойство, и оно читается во время лоадед из дфм.
а в дфм у тебя пусто.
-
CBox := TComboBox.Create(Self);
CBox.Items.Add('test');
Здесь комбобокс создаётся во время выполнения. Но та же ошибка "Control '' has no parent window". Значит, дело не в загрузке из .dfm?
-
а теперь снова смотри [5]
-
Как сделать аналогично, чтобы во время проектирования при клике на Items в инспекторе объектов видеть эти строчки?
-
как как. добавить эти строчки конечно же.
когда уже есть парент.
-
Я имел ввиду следующее. Бросаешь компонент на форму. Смотришь в инспекторе объектов Items и обнаруживаешь там несколько строчек.
-
без разницы что ты там имел.
хочешь видеть строки - создай их.
-
TMyComboBox = class(TComboBox)
protected
procedure CreateWnd;override;
end;
implementation
procedure TMyComboBox.CreateWnd;
begin
inherited;
Items.Add('1');
end;
-
DimaBr, спасибо!