Форум: "Компоненты";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];
ВнизПроблема с присвоением имени новому компоненту Найти похожие ветки
← →
Volf_555 © (2006-03-24 21:48) [0]Написал компонент - аналог кнопке. Вот он:
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 заполнялось автоматически?
← →
novice_man © (2006-03-25 09:23) [1]А где TIMERу ты присвоил имя?
← →
Юрий Зотов © (2006-03-25 12:47) [2]> Volf_555 © (24.03.06 21:48)
Имя компонента не возникает ниоткуда, само по себе. Когда мы кладем компонент на форму вручную, то его создает среда разработки (IDE) и она же назначает ему имя. А в Вашем случае компонент создается другим компонентом, о чем IDE не знает и поэтому ничего назначить не может. Компонент-создатель тоже никакого имени не назначает, а больше ему взяться неоткуда - поэтому оно, естественно, остается пустым.
Вообще, код принципиально неверен, компоненты так не пишут. Если владельцем таймера должна быть именно форма, как это сделано у Вас (кстати, непонятно, зачем) то Вашему компоненту совершенно незачем создавать этот таймер, он просто должен содержать свойство-ссылку на внешний таймер - и пусть эту ссылку проставляет юзер (пример - PopupMenu).
А если форма не обязана быть владельцем таймера, то код надо исправить и сделать владельцем таймера создающий его компонент. Тогда никакое имя таймеру и не нужно.
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.072 c