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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2013, 13:04   #1
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию Создание динамического TNotifyEvent.

Что написать? Где написать? (Когда написать?)

Есть тип кнопки с прозрачностью, для рисования таких на канве, как ей устроить подмену процедуры, которую обычно делают при динамическом объявлении кнопок? (типа D_Button.OnClick:=MyProcedureForBut tons; )
Код:
type tmybutton = record
public
  name, texture, caption:string; //имя, текстура, метка
  pngN, pngM, pngP, pngO:tpngimage; //фон (Нормальный, наведенный, нажатый, выкл)
  left, top, width, height, n:integer;
  {click:tnotifyevent; думал как обычный объект объявлять, но И-нете пишут, что то с указателями и прочей лабудой, в которой почти не разбираюсь.}
  procedure create(aname, atexture: string; awidth, aheight:integer); //создание (имя кнопки, текстура, ширина, высота)
  procedure resize(width, height:integer); //изменение размера
  procedure free;
end;
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 17.04.2013, 13:17   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

ну и зачем тут рекорд?
eval вне форума Ответить с цитированием
Старый 17.04.2013, 13:21   #3
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
ну и зачем тут рекорд?
А хз. Есть толк от того чтобы объявлять как класс? Собственно я никак не могу найти разницу между =class() и =record, помимо того, что класс может унаследовать свойства предка.
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 17.04.2013, 13:27   #4
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Даже спрошу иначе... Как будет правильней, а не по быдлокодерски, как у меня?)
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 17.04.2013, 13:45   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
как ей устроить подмену процедуры, которую обычно делают при динамическом объявлении кнопок? (типа D_Button.OnClick:=MyProcedureForBut tons; )
Это не подмена процедуры. А такое же точно задание значения свойству(или переменной) как и в случае D_button.Width:=20; только лишь с той разницей что тип свойства специфический (процедура-метод с ЗАДАННЫМ набором параметров).

Код:
var 
  MyEvent: TNotifyEvent;  // процедура-метод должна иметь заданный набор параметров TNotifyEvent =procedure(sender: TObject) of object;

MyEvent:=D_button.OnClick;
Значит в record (или класс) имеет место быть соответствующая переменная (поле) которую можно задать.
Код:
MyEvent:=.....;
и после этого использовать для вызова соответствующей процедуры
Код:
MyEvent(....);// если процедура не задана получим AV
if assigned(MyEvent) then MyEvent(.....); // с проверкой того что такая процедура задана
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 17.04.2013, 13:59   #6
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

А как допустим не tobject в него передавать, а просто tpoint? Т.е. как поменять набор параметров?
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 17.04.2013, 17:03   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Собственно я никак не могу найти разницу между =class() и =record
а где искали?
eval вне форума Ответить с цитированием
Старый 17.04.2013, 17:07   #8
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
а где искали?
в голове. Имеется ввиду не прямой смысл слова, а косвенный, когда мы размышляем - мы ищем ответ, вот его я не смог найти.
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 17.04.2013, 17:16   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
А как допустим не tobject в него передавать, а просто tpoint? Т.е. как поменять набор параметров?
как обычно задать тип c НУЖНЫМИ параметрами и использовать
Код:
type TNotifyEventRecord =procedure(sender: TPoint);
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 17.04.2013, 17:21   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Код:
type 
  TMyclass =class
  private
  protected
    procedure SetData(r: integer);
  public
    property width: integer;
  end;

  TMyRecord =record
    procedure SetData(r: integer);
  public
    property width: integer;
  end;
c record классами никогда не работал, т.ч. могу и ошибаться.
Но информации к размышлению думаю достаточно.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 17.04.2013 в 17:24.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание динамического массива Павел_95 Помощь студентам 2 09.01.2013 18:29
Создание и заполнение динамического списка m@dman Помощь студентам 6 17.10.2010 09:56
Создание динамического отчета NickiBell Microsoft Office Access 7 17.09.2010 12:14
Создание динамического Comboboxа ! web_lover Microsoft Office Excel 6 24.06.2010 23:02
Создание динамического сайта. hqpz PHP 6 26.04.2010 21:58