Главная страница
    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.45 MB
Время: 0.04 c
11-1121340015
Barloggg
2005-07-14 15:20
2006.11.19
Хочу избавиться от MCK


15-1162189017
TUser
2006-10-30 09:16
2006.11.19
Простые числа


2-1160826905
T54
2006-10-14 15:55
2006.11.19
ООП


3-1158426208
Fostr
2006-09-16 21:03
2006.11.19
SQL - Update


15-1161802883
Real
2006-10-25 23:01
2006.11.19
MySQL - ПО для управления или дайте скачать MySQLCC





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский