Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2011, 15:49   #1
Yacudzer
 
Регистрация: 28.05.2011
Сообщений: 4
По умолчанию Новое событие в наследнике от TShape

Здравствуйте. Подскажите, как лучше реализовать следующее:
Есть наследник от TShape:
Код:
  TKletka=class(TShape)
  protected
    color:TKletkaColor;
    x,y:Byte;
    procedure SetBrushColor;
  public
   constructor Create(AOwner:TComponent;new_x,new_y:Byte;new_color:tKletkaColor;new_top,new_left,size:integer);
  private
    procedure WMLButDown(var Msg : TWMMouse); message WM_LBUTTONDOWN;
  end;
Далее, пусть есть форма (или другой компонент), которая имеет массив элементов класса TKletka. Хочется следующее. При нажатии мыши (в процедуре WMLButDown) передать форме(или другому владельцу) некоторые свойства (x,y) этого элемента в виде события. Вобщем сделать так, что бы форма знала по какой клетке кликнул пользователь. Как это сделать наиболее корректно с точни зрения ООП?
Спасибо.
Yacudzer вне форума Ответить с цитированием
Старый 28.05.2011, 17:24   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
TKletka=class(TShape)
  protected
    color:TKletkaColor;
    x,y:Byte;
    procedure SetBrushColor;
  public
   constructor Create(AOwner:TComponent;new_x,new_y:Byte;new_color:tKletkaColor;new_top,new_left,size:integer);
  private
    procedure WMLButDown(var Msg : TWMMouse); message WM_LBUTTONDOWN;
  Published
    OnMyClick:TNotifyEvent;
  end;
А в обработчике WMLButDown напиши
Код:
x:=...
y:=... // Нет хелпа под рукой не помню как там WMMouse работает
if Assigned(OnMyClick) then OnMyClick(Self);
Это вызовет событие прописанное для этого компонента в модуле формы, на которой он кинут.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.05.2011, 18:51   #3
Yacudzer
 
Регистрация: 28.05.2011
Сообщений: 4
По умолчанию

Stilet, спасибо. Так и сделаю за исключением того, что определю процедурный тип события немного по-другому:
Код:
  TKletkaClickEvent=procedure (Sender:TObject;x,y:byte) of object;
А создавать объект, насколько я понял, надо так (прошу подтвердить или опровергнуть и подсказать как правильно):
Код:
var
kletki:array of array of TKletka;
procedure KletkaClicked(Sender:TObject;x,y:byte);
...
kletki[i,j].ClickEvent:=KletkaClicked;
Yacudzer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TShape Sanakan Помощь студентам 5 08.02.2010 01:05
Молекулы из TShape? Тёма(C@$pEr) Помощь студентам 0 19.04.2009 19:59
Перемещение TShape Furious_Angel Помощь студентам 2 07.12.2008 16:34
Удаление объекта в наследнике TForm NieL Общие вопросы Delphi 2 04.12.2008 15:38
Вопрос о TShape Rusl92 Общие вопросы Delphi 3 21.08.2008 12:53