![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Подскажите возможно ли вызвать процедуру имя которой хранится в переменной. То-есть у меня такая ситуация: есть много закладок(tabsheet), на них огромное количество компонентов используют один и тот же обработчик, хочу в обработчике реализовать такую вещь:
s:='ShowText'+IntToStr(PageControl1.ActivePageInde x+1); то-есть есть набор процедур ShowText1, ShowText2 итд и надо если первая вкладка открыта то чтоб выполнялась первая процедура и т.д. Господа программисты возможно ли такое реализовать ? |
#2
|
|||
|
|||
![]() Можно. Читать в сторону RTTI.
А можно обойтись и без этого, но будет больше работы - надо создать базовый фрейм. В нем пишешь свою процедуру ShowText. Далее от него наследуешь нужное тебе кол-во фреймой (для каждой вкладки свой фрейм). В наследниках перекрываешь эту процедуру ShowText. Далее протос получаешь с вкладки ее фрейм и просто вызываешь ShowText. |
#3
|
|||
|
|||
![]() Цитата:
![]() |
#4
|
|||
|
|||
![]() Как вариант:
Код:
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. |