Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.01.17;
Скачать: CL | DM;

Вниз

Помогите с созданием компонента.   Найти похожие ветки 

 
Voron ©   (2001-12-28 12:49) [0]

У меня такая проблема:
unit CustomTreeView1;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, ComCtrls;
type
TCustomTreeView1 = class(TCustomTreeView)
public
constructor Create(AOwner: TComponent); override;
end;
procedure Register;
implementation
constructor TCustomTreeView1.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Items.Add(nil, "My new node");
end;
procedure Register;
begin
RegisterComponents("Try", [TCustomTreeView1]);
end;
end.

компилируется, но когда кидаю компонент на форму выдается ошибка: "Control "" has no parent window" как так has no parent window?
Если в конструкторе
if not (csDesigning in ComponentState) then Items.Add(nil, "My new node");
то все работает, но в десижен тайме естественно Node не создается. А мне надо чтоб и при добавлении компонента на форму автоматически Node создавались, как быть?
И еще: в связи с этой проблемой копал исходники TShelTreeView модуль ShellCtrls там:
TCustomShellTreeView = class(TCustomTreeView, IShellCommandVerb)
а выше:
IShellCommandVerb = interface ["{7D2A7245-2376-4D33-8008-A130935A2E8B}"]
Что такое это такое и как сей интерфейс юзать?
Никакой информации по IShellCommandVerb не нашел.
Помагите, плиз, разобраться.
С уважением, Voron.


 
Юрий Зотов ©   (2001-12-28 13:07) [1]

В контролах серии ComCtrl многие методы работают через посылку сообщений собственному окну (рекомендую посмотреть исходники - увидите сами). В том числе, вызов Items.Add тоже, скорее всего, приводит к посылке сообщения.

Но во время работы конструктора никакого окна еще нет - оно создается позже, при вызове CreateWnd. Отсюда и ошибка.

Вывод - замещайте не конструктор, а метод CreateWnd, а уже в нем (строго ПОСЛЕ inherited) вызывайте Items.Add.


 
Voron ©   (2001-12-28 13:57) [2]

2 Юрий Зотов ©
Благодарю, то что надо.
Но один вопрос - если я пишу в конструкторе
if not (csDesigning in ComponentState) then Items.Add(nil, "My new node");
и запускаю приложение с этим компонентом, то при появлении формы на экране в моем компоненте Node уже создан. В связи с этим, и вышесказанным Вами мне непонятно, в рантайме при вызове моего конструктора окно уже создано, так получается?
Чем в моем случае отличается создание моего TreeView в рантайме и в десижентайме? Каких механизмов я не понимаю, подскажите, плиз, какие разделы справки почитать.



Страницы: 1 вся ветка

Текущий архив: 2002.01.17;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.006 c
1-52600
Romul
2001-12-29 17:10
2002.01.17
Вопрос по TThread


4-52679
Undert
2001-11-15 19:02
2002.01.17
Опять таблица...


14-52664
Ray_Parker
2001-11-13 13:44
2002.01.17
Вопрос по медиа программированию


14-52648
Alexandr
2001-11-16 08:32
2002.01.17
Нехилая тут цензура


1-52545
Smok_er
2001-12-28 05:37
2002.01.17
Exception EJPEG