![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с присвоением имени новому компоненту [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у ты присвоил имя?