|
Вопрос # 3 265/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Из функции возвращается string-овое значение команды для перехода на назначенный frame. Если эту команду прописать прямо в процедуре, то переход проиходит бех проблем. Но так как возвращается строка, как можно перейти по ней?
Пример.
Если написать, к примеру, DiskClass.HistoryFrameShow; то происходит переход на фрейм HistoryFrame, т.е он показывается (visible)
Но нужно получить фрейм динамически и можно получить через navigationClass.getLastPageFromFile, но возвращается 'DiskClass.HistoryFrameShow;' - строка... С которой неизвестно, что можно сделать, чтобы по ней перейти.
 |
Вопрос задал: mikolabel (статус: Посетитель)
Вопрос отправлен: 9 октября 2009, 04:44
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: min@y™
Допустми, что твой объект DiskClass - это экземпляр класса TDiskClass. Так как все классы - это наследники TObject, то для поиска точки входа в метод с именем 'HistoryFrameShow' воспользуйся методом
class function MethodAddress(const Name: ShortString): Pointer;
Description
MethodAddress is used internally by the streaming system. When an event property is read from a stream, MethodAddress converts a method name, specified by Name, to a pointer containing the method address. There should be no need to call MethodAddress directly.
If Name does not specify a published method for the object, MethodAddress returns nil (Delphi) or NULL (C++).
Я никогда такими вещами не пользовался, поэтому пришлось написать пример, чтобы проверить, как это работает:
program p3265;
{$APPTYPE CONSOLE}
uses
SysUtils, Classes;
type
TMyObject = class
published // <--- обязательно !
procedure MyMethod(const Value: Integer);
end;
TMyMethod = procedure (const Value: Integer);
var
MO: TMyObject;
Method: TMyMethod;
{ TMyObject }
procedure TMyObject.MyMethod(const Value: Integer);
begin
WriteLn(' Method found! Value = ', Value);
end;
begin
Randomize();
MO:= TMyObject.Create();
try
Method:= MO.MethodAddress('MyMethod');
if Assigned(Method)
then Method(Random(100))
else WriteLn(' Method not found :(((');
finally
MO.Free();
end;
ReadLn;
end.
Надеюсь, я правильно понял вопрос.
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 9 октября 2009, 08:48
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|