Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 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.012 c
2-1131360031
Андрей Молчанов
2005-11-07 13:40
2005.11.27
Странная ошибка


6-1123491138
stelius
2005-08-08 12:52
2005.11.27
Отправить почту при помощи Delphi


3-1128744741
DJON
2005-10-08 08:12
2005.11.27
Как создать SystemDSN для MySql


14-1131354766
DiamondShark
2005-11-07 12:12
2005.11.27
За природу -- борись!


14-1130878249
Verg
2005-11-01 23:50
2005.11.27
Крит. секции и взаимная блокировка (dead lock)





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