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

Вниз

Проблема с присвоением имени новому компоненту   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.137 c
1-1160114258
DVM
2006-10-06 09:57
2006.11.19
Фреймы самопроизвольно превращаются в формы!


15-1162368065
Slider007
2006-11-01 11:01
2006.11.19
Чисто человеческий вопрос. Автошкола.


2-1162308816
doooooo
2006-10-31 18:33
2006.11.19
DWord => 2Word


15-1162236876
Витян
2006-10-30 22:34
2006.11.19
EyeSaver...


3-1158825779
Stanislav
2006-09-21 12:02
2006.11.19
Проблема с сортировкой текстовых полей