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

Вниз

Как заставить свой компонент реагировать на соьытия мыши   Найти похожие ветки 

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

Наверх




Память: 0.5 MB
Время: 0.042 c
14-1131542528
RDA
2005-11-09 16:22
2005.11.27
Компьютерная барахолка в Киеве


1-1131018577
dj0n
2005-11-03 14:49
2005.11.27
ограничение ввода на Edit


14-1131119336
ArtemESC
2005-11-04 18:48
2005.11.27
Как отключить загрузку обновлений WindowsXP


2-1131218918
Trap
2005-11-05 22:28
2005.11.27
Стения сигнала с com-порта


2-1131611315
Рафик
2005-11-10 11:28
2005.11.27
Вопрос по Rave Report