Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.02.2012, 02:41
Petros9n Petros9n вне форума
Прохожий
 
Регистрация: 13.10.2011
Сообщения: 34
Репутация: 10
По умолчанию Вызов процедуры из переменной

Подскажите возможно ли вызвать процедуру имя которой хранится в переменной. То-есть у меня такая ситуация: есть много закладок(tabsheet), на них огромное количество компонентов используют один и тот же обработчик, хочу в обработчике реализовать такую вещь:
s:='ShowText'+IntToStr(PageControl1.ActivePageInde x+1);
то-есть есть набор процедур ShowText1, ShowText2 итд и надо если первая вкладка открыта то чтоб выполнялась первая процедура и т.д.
Господа программисты возможно ли такое реализовать ?
Ответить с цитированием
  #2  
Старый 18.02.2012, 06:00
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Можно. Читать в сторону RTTI.
А можно обойтись и без этого, но будет больше работы - надо создать базовый фрейм. В нем пишешь свою процедуру ShowText. Далее от него наследуешь нужное тебе кол-во фреймой (для каждой вкладки свой фрейм). В наследниках перекрываешь эту процедуру ShowText. Далее протос получаешь с вкладки ее фрейм и просто вызываешь ShowText.
Ответить с цитированием
  #3  
Старый 18.02.2012, 14:16
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

Цитата:
один и тот же обработчик
в обработчике смотреть активную вкладку
Ответить с цитированием
  #4  
Старый 18.02.2012, 19:57
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию ObjectInvoke

Как вариант:
Код:
uses
  ObjAuto,

type
   TMyClass = class
   public
      {$METHODINFO ON}
      function test4(N:integer; S:String):String;
      procedure test5;
      {$METHODINFO OFF}
   published
   end;

implementation

function TMyClass.test4(N:integer; S:String):String;
begin
   result := 'test string: '+S+' ('+IntToStr(N)+')';
end;
procedure TMyClass.test5;
begin
  ShowMessage(Self.ClassName);
end;


procedure TForm1.SpeedButton1Click(Sender: TObject);
Var
  C:TMyClass;
  M:PMethodInfoHeader;
  V :Variant;
begin
  C := TMyClass.Create;
  try
   M := GetMethodInfo(C, 'test4');
   if M <> nil then begin
      V := ObjectInvoke(C, M, [1, 2], [55, 'string']);
      ShowMessage(trim(V));
   end
   else begin
      ShowMessage('GetMethodInfo (test4):  Error');
   end;
   M := GetMethodInfo(C, 'test5');
   if M <> nil then begin
      ObjectInvoke(C, M, [], []);
   end
   else begin
      ShowMessage('GetMethodInfo (test5):  Error');
   end;
  finally
   C.Free;
  end;
end;

Последний раз редактировалось roamer, 18.02.2012 в 20:01.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:06.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025