Форум: "Компоненты";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
ВнизКак заставить свой компонент реагировать на соьытия мыши Найти похожие ветки
← →
_Zilog (2004-12-22 07:45) [0]Ребята молю о помощи!
Я создал свой компонент, таким образом
TMyComponent = class (TGraphicControl)
Image:Timage;
...
published
property onClick;
...
Как заставить компонент, созданный в процессе работы программы реагировать на события, например связанные с машью? Может я
выбрал не того родителя?
← →
Юрий Зотов © (2004-12-22 11:36) [1]Он и так должен реагировать. Естественно, на клик по самому компоненту, а не по Image - ведь для Image обработчик OnClick не назначен.
← →
Daft (2005-01-06 03:31) [2]Родителя ты того выбрал... Но у меня тоже присутствуют своеобразные проблемы с написанием компонентов...
← →
Жека © (2005-03-24 15:39) [3]Подскажите, пожалуйста. У меня есть компонента:
TLine = class(TGraphicControl)
private
…
{ Private declarations }
protected
…
public
…
{ Public declarations }
published
…
end;
но у нее нет событий. Как можно добавить к ней события (Onclick и т.д.)?
← →
MBo © (2005-03-24 15:46) [4]>но у нее нет событий. Как можно добавить к ней события
Они есть, просто нужно перенести их в секцию published
← →
Жека © (2005-03-25 02:54) [5]Тогда возникает вопрос Как это сделать?(Я сам не описываю в своей компоненте события, а хочу чтоб они наследовались от класса TGraphicControl, у него они скорее всего все события private и процедур доступа кним нет)
← →
Юрий Зотов © (2005-03-25 04:06) [6]> Жека © (25.03.05 02:54) [5]
> а хочу чтоб они наследовались от класса TGraphicControl
Очень логично. Их просто надо опубликовать.
> у него они скорее всего все события private и процедур
> доступа кним нет
Скорее всего, они protected. И доступ к ним у наследников есть.
← →
Жека © (2005-03-26 21:00) [7]Оказывается у меня проблема со всеми устанавливаемыми компонентами. Пробовал создавать компонету на основе класса Tlabel. И в object inspector на вкладке Events все равно пусто. Дельфи у меня 7-й. Может это глюк, а может у меня руки не оттуда растут?
← →
Юрий Зотов © (2005-03-26 22:25) [8]> Жека © (26.03.05 21:00) [7]
Если покажете объявление класса (только полное и точное) - тогда и увидим, откуда что растет.
:о)
← →
Жека © (2005-03-26 22:38) [9]вот пример одного из установленных мной компонентов:
unit Pie;
interface
uses
Windows, Messages, SysUtils, Classes, Controls,Graphics;
type
TPie = class(TGraphicControl)
private
{ Private declarations }
FStartAngle:double;
FendAngle:double;
FPen:TPen;
FBrush:TBrush;
procedure SetStartAngle(value:double);
procedure SetendAngle(value:double);
procedure SetPen(value:TPen);
procedure SetBrush(value:TBrush);
Procedure Change(Sender:TObject);
protected
{ Protected declarations }
procedure Paint; override;
public
{ Public declarations }
constructor Create(AOwner:TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
property StartAngle:double
read FStartAngle
write SetStartAngle;
property endAngle:double
read FendAngle
write SetendAngle;
property Pen:TPen
read FPen
write SetPen;
property Brush:TBrush
read FBrush
write SetBrush;
end;
procedure Register;
implementation
constructor TPie.Create(AOwner:TComponent);
begin
//FPen.OnChange:=Change; {Установка обработчика}
inherited Create(AOwner); {Вызов конструктора предка}
Width:=65; {Эти свойства унаследованы от предка}
Height:=65;
StartAngle:=0;
EndAngle:=0;
FPen:=TPen.Create;
FPen.OnChange:=Change; {Установка обработчика}
FBrush:=TBrush.Create;
FBrush.OnChange:=Change;
end;
destructor TPie.Destroy;
begin
FPen.Free;
FBrush.Free;
inherited Destroy;{Вызов деструктора предка}
end;
procedure TPie.SetStartAngle(value:double);
begin
FStartAngle:=value; {Присваиваем значение}
Invalidate;{Перерисовываем компонент}
end;
procedure TPie.SetendAngle(value:double);
begin
FendAngle:=value; {Присваиваем значение}
Invalidate;{Перерисовываем компонент}
end;
procedure TPie.Paint;
var
midX, midY, stX, stY, endX, endY:integer;
sX, sY, eX, eY:double;
begin
midX := Width div 2;
midY := Height div 2;
sX := cos((StartAngle / 180.0) * PI);
sY := sin((StartAngle / 180.0) * PI);
eX := cos((EndAngle / 180.0) * PI);
eY := sin((EndAngle / 180.0) * PI);
stX := round(sX * 100);
stY := round(sY * 100);
endX := round(eX * 100);
endY := round(eY * 100);
Canvas.Pen := FPen;
Canvas.Brush:= FBrush;
Canvas.Pie(0,0,
Width,Height,
midX + stX, midY - stY,
midX + endX, midY - endY);
end;
procedure TPie.SetPen(value:TPen);
begin
FPen.Assign(value);
end;
procedure TPie.SetBrush(value:TBrush);
begin
FBrush.Assign(value);
end;
Procedure TPie.Change;
Begin
Invalidate;
end;
procedure Register;
begin
RegisterComponents("Samples", [TPie]);
end;
end.
← →
Юрий Зотов © (2005-03-26 23:11) [10]> Жека © (26.03.05 22:38) [9]
Ни одного события не опубликовано, вот вкладка Events и пустая. Все правильно.
Для примера посмотрите класс TLabel. Он сам не делает НИЧЕГО - только публикует нужные свойства и события предка. И Вам нужно сделать то же самое и точно так же.
← →
Жека © (2005-03-26 23:41) [11]Спасибо! Простите за мое незнание.
← →
1_1_1 (2005-03-28 15:38) [12]>>Для примера посмотрите класс TLabel
А КАК?» Юрий Зотов:» Вам объяснить? Настаиваете?
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.013 c