Процедура в record

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Процедура в record

Сообщение trexxet » 15.09.2013 22:32:16

Пишу небольшой GUI на ZenGL. Для типов использую record, GUI в отдельном модуле.
Для создания объекта использую функцию, которая возвращает переменную нужного типа.
Допустим создаю кнопку в меню:
Код: Выделить всё
type TRectButton = record
  X, Y, W, H: single;
  Color: longword;
end;

function RectButtonAdd( X, Y, W, H: single; Color: longword ): TRectButton; //в модуле с GUI

Код: Выделить всё
var Button: TRectButton;
...
Button := RectButtonAdd( X, Y, W, H, Color ) //в меню

Далее в таймере меню проверяется нажатие на кнопку и при нажатии выполняется что-нибудь. Можно ли писать это "что-нибудь" в отдельной процедуре, чтобы при создании она передавалась в модуль с GUI и проверка нажатия выполнялась там по таймеру модуля? Т.е. изменить на что-то вроде этого:
Код: Выделить всё
type TRectButton = record
  X, Y, W, H: single;
  Color: longword;
  OnClick: procedure;
end;

function RectButtonAdd( X, Y, W, H: single; Color: longword; OnClick: procedure ): TRectButton;
...
procedure OnTimer;
begin
if col2d( Mouse_X, Mouse_Y, Button ) then Button.OnClick; //в модуле с GUI

Код: Выделить всё
Button := RectButtonAdd( X, Y, W, H, Color, OnClick );
...
procedure OnClick; //в меню

Если да, то как это лучше реализовать?
Заранее спасибо
trexxet
новенький
 
Сообщения: 31
Зарегистрирован: 25.03.2013 22:58:00
Откуда: Смоленск

Re: Процедура в record

Сообщение zub » 15.09.2013 22:44:28

Код: Выделить всё
type
TMyProcType=procedure(параметры_если_нужны);
TRectButton = record
  X, Y, W, H: single;
  Color: longword;
  OnClick: TMyProcType;
end;
....
procedure MyProc(параметры_если_нужны);//сама процедура
begin
...
end;
...
Button.OnClick:=@MyProc;//присвоение адреса процедуры
...
Button.OnClick(параметры_если_нужны);//вызов процедуры

@ в присвоении может ставится, а может нет в зависимости от настроек компилятора
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Процедура в record

Сообщение trexxet » 17.09.2013 17:20:51

Спасибо, при создании так понимаю нужно передавать указатель на процедуру. Вроде работает.
trexxet
новенький
 
Сообщения: 31
Зарегистрирован: 25.03.2013 22:58:00
Откуда: Смоленск

Re: Процедура в record

Сообщение VirtUX » 18.09.2013 11:39:14

еще есть object
Код: Выделить всё
type TRectButton = object
  X, Y, W, H: single;
  Color: longword;
  procedure OnClick;
end;
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 232

Рейтинг@Mail.ru