Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с присвоением имени новому компоненту [D6, WinXP]


Volf_555 ©   (2006-03-24 21:48:00) 

Написал компонент - аналог кнопке. Вот он:

unit CountButton;

interface

uses
 Windows, Messages, SysUtils, Classes, Controls, StdCtrls, Dialogs, ExtCtrls;

var
Timer:TTimer;

type
 TShowType = (Normal, CountToCaption);
 TCountButton = class(TButton)
 private
   { Private declarations }
   FCount:Integer;
   FShowType:TShowType;
 protected
   { Protected declarations }
   procedure Click; override;
   procedure OnTimer(Sender:TObject);
 public
   { Public declarations }
   procedure ShowCount;
 published
   { Published declarations }
   constructor Create(AOwner:TComponent);override; //Конструктор
   property Count:Integer read FCount write FCount; //Свойство Count
   property ShowType:TShowType read FShowType write FShowType;
 end;

procedure Register;

implementation

constructor TCountButton.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
Timer:=TTimer.Create(AOwner);
Timer.Enabled:=True;
Timer.OnTimer:=OnTimer;
Timer.Interval:=10000;
end;

procedure TCountButton.Click;
begin
inherited Click;
FCount:=FCount+1;
if ShowType=Normal then
 Caption:=Caption;
if ShowType=CountToCaption then
 Caption:='Count = '+IntToStr(count);
end;

procedure TCountButton.ShowCount;
begin
ShowMessage('По кнопке '+caption+' вы сделали: '+IntToStr(FCount)+' клик(а/ов)');
end;

procedure TCountButton.OnTimer(Sender:TObject);
begin
FCount:=FCount*2;
end;

procedure Register;
begin
 RegisterComponents('MyComponents', [TCountButton]);
end;

end.


После добавления компонента на форму, кроме него появляется Timer, НО БЕЗ ИМЕНИ!!!! То есть поле Name - пустое!

Что добавить в код компонента чтобы поле Name заполнялось автоматически?


Юрий Зотов   (2006-03-25 12:47:00) [1]

> Volf_555 ©   (24.03.06 21:48)

Имя компонента не возникает ниоткуда, само по себе. Когда мы кладем компонент на форму вручную, то его создает среда разработки (IDE) и она же назначает ему имя. А в Вашем случае компонент создается другим компонентом, о чем IDE не знает и поэтому ничего назначить не может. Компонент-создатель тоже никакого имени не назначает, а больше ему взяться неоткуда - поэтому оно, естественно, остается пустым.

Вообще, код принципиально неверен, компоненты так не пишут. Если владельцем таймера должна быть именно форма, как это сделано у Вас (кстати, непонятно, зачем) то Вашему компоненту совершенно незачем создавать этот таймер, он просто должен содержать свойство-ссылку на внешний таймер - и пусть эту ссылку проставляет юзер (пример - PopupMenu).

А если форма не обязана быть владельцем таймера, то код надо исправить и сделать владельцем таймера создающий его компонент. Тогда никакое имя таймеру и не нужно.


novice_man   (2006-03-25 09:23:00) [2]

А где TIMERу ты присвоил имя?


Наверх

Титульная страница Поиск, карта сайта Написать письмо