Delphi: RTTI, запуск процедуры по имени

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Mixon, 29 Oct 2012.

  1. Mixon

    Mixon Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    394
    Likes Received:
    119
    Reputations:
    12
    Здравствуйте умельцы)

    В общем, столкнулся с такой проблемой. Нужно вызывать процедуру имея имя этой процедуры в стринге.
    Перебрал множество вариантов, но самый локаничный оказался RTTI, собственно вот код:

    Code:
    procedure TForm1.ExecMethod(MethodName:string; const Args: array of TValue);
    var
     R : TRttiContext;
     T : TRttiType;
     M : TRttiMethod;
    begin
      T := R.GetType(TForm1);
      for M in t.GetMethods do
        if (m.Parent = t) and (m.Name = MethodName)then
          M.Invoke(TForm1.Create(nil),Args)
    end;
    Но в нём есть ОГРОМНЫЙ побочный эфект, который я до конца так и не понял.
    При вызове процедуры, как я понял, создаётся новый стек, и все визуальные формы "дублируются".

    То-есть, если сделать вот так

    Code:
    procedure TForm1.test(Params:TStrings);
    begin
      edit1.Text:='123';
      ShowMessage(edit1.Text);
    end;
    и вызвать её через ExecMethod то получим окно с "123", вроде пока всё верно, НО в самой форме эти "123" не появляются, и если после этой процедуры выполнить просто ShowMessage(edit1.Text); то результат будет пуст!
    Такое ощущение будто данная функция дублирует всю программу, и уже в ней производит все изменения, которые основную часть не затрагивают, и в итоге получается что нельзя изменять интерфейс через процедуры вызванные с ExecMethod

    Кто что может сказать?? Как можно доступ этих процедур сделать "полноценным"???
    2е суток продолбался - результата 0...(
     
  2. Белый Ворон

    Joined:
    7 Oct 2012
    Messages:
    46
    Likes Received:
    3
    Reputations:
    0
    зачем ты создаешь новый экземпляр формы?
    нельзя ли передать Self или на худой конец экземпляр уже созданной формы?
     
    1 person likes this.
  3. Mixon

    Mixon Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    394
    Likes Received:
    119
    Reputations:
    12
    Понял, спасибо просто-таки ОГРОМНЕЙШЕЕ!!!
    Двое суток не мог решить эту проблему!!!
     
    #3 Mixon, 29 Oct 2012
    Last edited: 29 Oct 2012