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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2009, 14:18   #1
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию Процедура, как переменная

Можно ли в качестве переменной использовать процедуру? Сейчас покажу в коде чего хочу:
Код:
unit items;

interface
uses GLVectorFileObjects,main,glmaterial;

type
titem=class
   pathtomodel:string;
   pathtotextures:string;
   posx,posy,posz:single;
   constructor create;
   destructor destroy;
   procedure update;
   private
   model:TGLActor;
   matlib:TGLMaterialLibrary;
end;

procedure ItemsSetup;
var
itemslist:array[1..10] of titem;
itemsslotsclosed:integer;

implementation

procedure ItemsSetup;
begin
  itemsslotsclosed:=0;
end;

constructor TItem.create;
begin
inherited;
if itemsslotsclosed<>10 then
begin
  inc(itemsslotsclosed);
  model:=TGLActor.CreateAsChild(mainform.Scene.Objects);
  matlib:=TGLMaterialLibrary.Create(mainform);
  itemslist[itemsslotsclosed]:=self;
end;
end;

destructor TItem.destroy;
begin
  dec(itemsslotsclosed);
  model.Free;
  matlib.Free;
  inherited;
end;

procedure TItem.update;
begin
  matlib.TexturePaths:=pathtotextures;
  model.MaterialLibrary:=matlib;
  model.LoadFromFile(pathtomodel);
  model.Position.SetPoint(posx,posy,posz);
end;

end.
Использую так:
Код:
     item:=Titem.create;
     item.posx:=1;
     item.posy:=1;
     item.posz:=0;
     item.pathtomodel:=extractfilepath(paramstr(0))+'\gamedata\meshes\actor\model.smd';
     item.pathtotextures:=extractfilepath(paramstr(0))+'\gamedata\textures\actor';
     item.update;
Хотелось бы создать событие классу(OnUse, создать смогу сам) и чтобы при его срабатывании срабатывала динамически указанная процедура.
Как сделать в классе, чтобы там было что-то типа:
useproc:Tprocedure; или
useproc:TMethod
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 03.10.2009, 17:56   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Можно. Вот простейший примерчик, если я конечно правильно понял, что Вам нужно
Код:
program pr1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type TFun = function(x: real): real;

function f1(x: real): real; begin f1 := sin(x); end;
function f2(x: real): real; begin f2 := cos(x); end;

procedure calc(f: TFun; x: real);
begin
writeln(f(x):1:3);
end;

begin
calc(f1, 1);
calc(f2, 1);
readln;
end.
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 03.10.2009, 18:01   #3
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Спасибо, +1, то что надо
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать чтобы переменная увеличивалась Stiff Master Общие вопросы C/C++ 4 30.09.2009 22:23
Как проверить, задана ли переменная? TwiX Общие вопросы Delphi 5 01.08.2009 13:32
Общая переменная и процедура для двух форм? Polotenchik Общие вопросы Delphi 2 19.07.2009 12:20
Массив как структурная переменная mazak Общие вопросы C/C++ 8 15.07.2009 21:55
Имя переменной как переменная. Как получить доступ к такой переменной? Denni Microsoft Office Access 8 02.04.2009 10:06