Форум: "Компоненты";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];
ВнизПроблема с Items Найти похожие ветки
← →
Neo Trinitron © (2006-03-21 11:08) [0]Уважаемые Мастера! Столкнулся с такой проблемой: создаю компоненту - наследник TLabel. На неё помещаю TCheckBox и TComboBox. На этом этапе компонента работает нормально. Однако при помытке добавить ITems в ComboBox выдаёт ошибку: "Component "" has no parent window". Почему так? Вот код конструктора:
begin
inherited Create(AOwner);
CB:=TCheckBox.Create(Self);
FComb:=TComboBox.Create(Self);
CB.Parent:=Self;
FComb.Parent:=Self;
FComb.Items.Add(">");
FComb.Items.Add(">=");
FComb.Items.Add("<");
FComb.Items.Add("<=");
FComb.Items.Add("=");
FComb.Items.Add("<>");
FComb.Items.Add("like");
.....
ЗЫ: Сама компонента компилится нормально. Может чего криво написал - новичок в этом, буду признателен за замечания.
← →
Reindeer Moss Eater © (2006-03-21 11:15) [1]Почитай документацию кто может быть парентом.
← →
Юрий Зотов © (2006-03-21 11:20) [2]> Neo Trinitron © (21.03.06 11:08)
> На неё помещаю TCheckBox и TComboBox.
Это невозможно. См. [1].
> CB.Parent:=Self;
> FComb.Parent:=Self;
Обе этих строки ошибочны. См. [1].
← →
Neo Trinitron © (2006-03-21 11:38) [3]> CB.Parent:=Self;
> FComb.Parent:=Self;
>Обе этих строки ошибочны. См. [1].
Убрал эти строки. Parentом по идее должен быть тот обьект на котором расположены эти компоненты. Кто же если не Self?
← →
Neo Trinitron © (2006-03-21 11:39) [4]ЗЫ: По-прежнему не работает.
← →
Reindeer Moss Eater © (2006-03-21 11:40) [5]>ЗЫ: По-прежнему не работает.
И не должно.
← →
clickmaker © (2006-03-21 11:42) [6]
> Neo Trinitron © (21.03.06 11:39) [4]
Label не может быть парентом. Только Owner"ом. Почему - F1
← →
Юрий Зотов © (2006-03-21 11:58) [7]> Neo Trinitron © (21.03.06 11:38) [3]
Parent"ом может быть ТОЛЬКО TWinControl. А TLabel - это TGraphicControl. Поместить на него никакой другой контрол невозможно.
← →
Neo Trinitron © (2006-03-21 12:07) [8]>Поместить на него никакой другой контрол невозможно.
Но без Items.Add всё работает красиво...Как же грамотно поступить? Неужели в Delphi нельзя делать такие незамысловатые компонетны?
← →
Reindeer Moss Eater © (2006-03-21 12:09) [9]CB.Parent:=Self.Parent;
← →
Neo Trinitron © (2006-03-21 12:25) [10]>CB.Parent:=Self.Parent;
И так не хочетъ...
← →
Reindeer Moss Eater © (2006-03-21 12:32) [11]Значит у твоего лэйбла на этот момент нет парента.
Иди кури букварь уже.
← →
Юрий Зотов © (2006-03-21 13:36) [12]> Neo Trinitron © (21.03.06 12:07) [8]
> Неужели в Delphi нельзя делать такие незамысловатые компонетны?
Можно, только действительно нужно знать тот самый букварь, который Вам усиленно советуют таки прочитать. Например, возьмите панель (или фрейм) и там помещайте все, что угодно.
← →
icWasya © (2006-03-21 19:22) [13]Вообще говоря, большая часть функциональности TCombobox реализуется средствами WIN API. В том числе и забота с TCombobox.Items - все Itemsы хранятся внутри виндусовского комбобокса. И только после того, как у него создастся окно(Handle).
Выход:
1) как уже говорили, наследовать Вашу компоненту от какого-нибудь потомка TWinControl;
2) переопределить метод CreateWnd, например так
type
TMyLabel=Class(...)
...
procedure CreateWnd;override;
...
procedure TMyLabel.CreateWnd;
begin
inherited;
FComb.Parent:=Self;// из конструктора убрать
if FComb.Items.Count>0 then Exit;
FComb.Items.Add(">");// и эти строки из конструктора убрать
FComb.Items.Add(">=");
FComb.Items.Add("<");
FComb.Items.Add("<=");
FComb.Items.Add("=");
FComb.Items.Add("<>");
FComb.Items.Add("like");
end;
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.044 c