IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Компонент
сообщение
Сообщение #1


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


С помощью инета сделал свой компонент. Подскажите, как
unit component1;

interface

{uses
SysUtils, Classes, ExtCtrls;}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;

var Timer: TTimer;

type
tcomponent1 = class(TComponent)

private
{ Private declarations }
FShowType:boolean;
protected
{ Protected declarations }
procedure OnTimer(Sender: TObject);
public
{ Public declarations }
constructor Create(AOwner:TComponent);override;
published
{ Published declarations }
property ShowType: boolean read FshowType write FShowType;
end;



procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Samples', [tcomponent1]);
end;

constructor tcomponent1.Create(aowner:Tcomponent);
begin
Timer:=TTimer.Create(self);
Timer.Enabled:=true;
Timer.OnTimer:=OnTimer;
Timer.Interval:=1000;
end;

procedure tcomponent1.OnTimer(Sender: TObject);
begin
FShowType:=not FShowType; <<----------------------------------------вот здесь
end;

end.

изменять, например, свойство Visible формы, на которую этот компонент установлен.

Сообщение отредактировано: sheka -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Нет, по-моему мы друг друга не понимаем... Какая проблема перенести то же самое в обработчик события OnChange? Смотри:
type
TMyComponent = class(TEdit)
// ...
protected
{ Protected declarations }
procedure MyOnTimer(Sender: TObject);
procedure MyOnChange(Sender: TObject); // <--- Добавляешь это ...

constructor TMyComponent.Create(AOwner: TComponent);
begin
inherited;
FTimer := TTimer.Create(Self);
FTimer.OnTimer := MyOnTimer;
FTimer.Enabled := False;

Self.OnChange := MyOnChange; // <--- Добавляешь это, чтобы компонент знал, как реагировать
end;

// Ну, и сам метод:
procedure TMyComponent.MyOnChange(Sender: TObject);
begin
if Owner is TCustomForm then
begin
TCustomForm(Owner).Caption := Caption;
end;
end;


И опять же все работает: забросил я свой компонент на форму, запустил программу, но таймер не активизировал. И изменяю содержимое Эдита. Тут же обновляется заголовок формы. Что-то не так?

Цитата
а у Edita вроде Text,а не Caption
У TControl есть свойство Caption, и если ты внутри потомка TControl, то у тебя есть к нему доступ (TEdit - потомок TControl, так что все в порядке). Если то же самое попытаться сделать из основной программы - то будет ошибка при попытке обращения к защищенному члену класса TControl. Можешь использовать Text, если тебе удобнее...

Добавлено через 3 мин.
Бррр... Так ты хочешь, чтобы твой метод Change был доступен извне, или все-таки:
Цитата(sheka)
как мне сделать чтобы при изменении текста моего компонента происходило то же самое, без предварительной прописки в новоп проекте:
? Ты ж для себя реши, что тебе надо?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Цитата(volvo @ 19.11.2009 1:27) *
Бррр... Так ты хочешь, чтобы твой метод Change был доступен извне?

Нет, извне мне он не нужен. Я хочу просто чтобы всегда при изменении компонента исполнялись определенные действия, но и из проекта(т.е. как обычно) можно было добавить еще что-то в Onchange.
Оба варианта(мой и Ваш) работают именно так. А какая между ними разница?

Сообщение отредактировано: sheka -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
sheka   Компонент   17.11.2009 22:43
volvo   Свойство Owner тебе поможет.   17.11.2009 22:50
sheka   Свойство Owner тебе поможет. owner.visible?   17.11.2009 22:58
volvo   На самом деле лучше бы так сделать: type TCompon…   17.11.2009 23:23
sheka   это я с сайта списывал. Насколько я понял, то чт…   18.11.2009 0:55
volvo   Нет, мне не удалось добиться того, что ты хочешь (…   18.11.2009 3:35
sheka   Выложите пожалуйста свой компонент. не могу понять…   18.11.2009 5:36
volvo   Вот сам компонент: В основном приложении на форм…   18.11.2009 6:47
sheka   Спасибо, уже кое-что стало понятно,но еще вопросы …   18.11.2009 23:10
volvo   :wacko: Чего кто там не видит? Ты скриншоты показ…   18.11.2009 23:43
sheka   Вот смотрите: если на форме стоит только один Edit…   19.11.2009 1:58
volvo   Ну, так в чем проблема? Проверяй, что компонент ле…   19.11.2009 2:31
sheka   Ну, так в чем проблема? Вы меня не правильно пон…   19.11.2009 4:26
sheka   Я сделал то что хотел!!! procedure TMy…   19.11.2009 6:19
volvo   Нет, по-моему мы друг друга не понимаем... Какая п…   19.11.2009 6:27
sheka   Бррр... Так ты хочешь, чтобы твой метод Change был…   19.11.2009 22:34
volvo   Хелп читал? (Вот отсюда) А ты вызываешь напрямую…   19.11.2009 23:57
sheka   Я ничего не описывал. Не предупредила.   20.11.2009 0:36
sheka   Создается компонент, картинка. при нажатии на нее …   11.12.2009 4:26
volvo   Ты забыл добавить Parent-а создаваемой картинке. А…   11.12.2009 7:25
sheka   Покажите пожалуйста фрагмент кода, где добавляется…   16.12.2009 1:32
volvo   Вот так, например: unit Component2; interface us…   16.12.2009 2:29


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 4.05.2024 1:41
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name