Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.01.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.005 c
4-52680
Art
2001-11-16 15:13
2002.01.17
А как добавить свой пункт в меню свойства файла или отправить???


1-52527
tovSuhov
2001-12-27 14:30
2002.01.17
Люди!!! Вот такой вопрос...


3-52505
Кнопка
2001-12-09 15:07
2002.01.17
Поиск в базе


14-52641
VEG
2001-11-19 18:37
2002.01.17
Как загрузить форму из отдельного *.dfm файла???


1-52544
Kroal
2001-12-28 06:58
2002.01.17
TButton





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский