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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2008, 12:10   #1
MaxiMILLION
 
Регистрация: 12.10.2008
Сообщений: 7
По умолчанию Классы

Есть класс TTool = class(TObject), классы TPenTool = class(TTool) и TLineTool = class(TTool).
TToolClass = class of TTool;

const tools_by_tag: array[1..2] of TToolClass = (TPenTool, TLineTool);
var currenttool: TToolClass;

в классе TTool в разделе public объявлены процедуры Draw и Finish. Как из текста программы через переменную currenttool обратиться к процедурам, объявленным в TTool?
MaxiMILLION вне форума Ответить с цитированием
Старый 12.10.2008, 13:40   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Вот так:

Код:
var t : TTool;
begin
   currenttool := tools_by_tag[1];
   t := currenttool.Create;
   t.Draw;
alexBlack вне форума Ответить с цитированием
Старый 12.10.2008, 13:46   #3
MaxiMILLION
 
Регистрация: 12.10.2008
Сообщений: 7
По умолчанию

на этапе t := currenttool.Create; выдаёт Access Violation at adress 0000FFF4
MaxiMILLION вне форума Ответить с цитированием
Старый 12.10.2008, 13:52   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Может чего-то недоговариваете ?
Вот тест:

Код:
type
   TToolClass = class of TTool;
   TTool = class(TObject)
      procedure Draw;
   end;
   TPenTool = class(TTool)
   end;
   TLineTool = class(TTool)
   end;

const tools_by_tag: array[1..2] of TToolClass = (TPenTool, TLineTool);
var currenttool: TToolClass;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var t : TTool;
begin
   currenttool := tools_by_tag[1];
   t := currenttool.Create;
   t.Draw;

end;

procedure TTool.Draw;
begin
   ShowMessage('test');
end;
alexBlack вне форума Ответить с цитированием
Старый 12.10.2008, 14:05   #5
MaxiMILLION
 
Регистрация: 12.10.2008
Сообщений: 7
По умолчанию

всё заработало.большое спасибо.
MaxiMILLION вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классы Старовъръ Общие вопросы Delphi 4 26.06.2008 17:00
классы ShenDy Общие вопросы C/C++ 1 12.04.2008 14:01
Классы Voucik Общие вопросы C/C++ 2 22.01.2008 17:03
Классы Mickle Общие вопросы Delphi 1 07.05.2007 12:16