Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как заставить свой компонент реагировать на соьытия мыши [D7, WinXP]


_Zilog ©   (2004-12-22 07:45:00) 

Ребята молю о помощи!
Я создал свой компонент, таким образом
TMyComponent = class (TGraphicControl)
Image:Timage;
...
published
property onClick;
...
Как заставить компонент, созданный в процессе работы программы реагировать на события, например связанные с машью? Может я
выбрал не того родителя?


1_1_1   (2005-03-28 15:38:00) [1]

>>Для примера посмотрите класс TLabel

А КАК? » Юрий Зотов: » Вам объяснить? Настаиваете?


Жека   (2005-03-26 23:41:00) [2]

Спасибо! Простите за мое незнание.


Юрий Зотов   (2005-03-26 23:11:00) [3]

> Жека ©   (26.03.05 22:38) [9]

Ни одного события не опубликовано, вот вкладка Events и пустая. Все правильно.

Для примера посмотрите класс TLabel. Он сам не делает НИЧЕГО - только публикует нужные свойства и события предка. И Вам нужно сделать то же самое и точно так же.


Жека   (2005-03-26 22:38:00) [4]

вот пример одного из установленных мной компонентов:

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 22:25:00) [5]

> Жека ©   (26.03.05 21:00) [7]

Если покажете объявление класса (только полное и точное) - тогда и увидим, откуда что растет.
:о)


Жека   (2005-03-26 21:00:00) [6]

Оказывается у меня проблема со всеми устанавливаемыми компонентами. Пробовал создавать компонету на основе класса Tlabel. И в object inspector на вкладке Events все равно пусто. Дельфи у меня 7-й. Может это глюк, а может у меня руки не оттуда растут?


Юрий Зотов   (2005-03-25 04:06:00) [7]

> Жека ©   (25.03.05 02:54) [5]

> а хочу чтоб они наследовались от класса TGraphicControl
Очень логично. Их просто надо опубликовать.

> у него они скорее всего все события private и процедур
> доступа кним нет
Скорее всего, они protected. И доступ к ним у наследников есть.


Жека   (2005-03-25 02:54:00) [8]

Тогда возникает вопрос Как это сделать?(Я сам не описываю в своей компоненте события, а хочу чтоб они наследовались от класса TGraphicControl, у него они скорее всего все события private и процедур доступа кним нет)


MBo   (2005-03-24 15:46:00) [9]

>но у нее нет событий. Как можно добавить к ней события
Они есть, просто нужно перенести их в секцию published


Жека   (2005-03-24 15:39:00) [10]

Подскажите, пожалуйста. У меня есть компонента:
TLine = class(TGraphicControl)
private
…
{ Private declarations }
protected
…
public
…
{ Public declarations }
published
…
end;

но у нее нет событий. Как можно добавить к ней события (Onclick и т.д.)?


Daft   (2005-01-06 03:31:00) [11]

Родителя ты того выбрал... Но у меня тоже присутствуют своеобразные проблемы с написанием компонентов...


Юрий Зотов   (2004-12-22 11:36:00) [12]

Он и так должен реагировать. Естественно, на клик по самому компоненту, а не по Image - ведь для Image обработчик OnClick не назначен.


Наверх

Титульная страница Поиск, карта сайта Написать письмо