Здравствуйте умельцы) В общем, столкнулся с такой проблемой. Нужно вызывать процедуру имея имя этой процедуры в стринге. Перебрал множество вариантов, но самый локаничный оказался 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...(
зачем ты создаешь новый экземпляр формы? нельзя ли передать Self или на худой конец экземпляр уже созданной формы?