delphi
Function GetClassInfo1(AClass: TPersistentClass; AMethods : TStringList) : Boolean; var LMethod: TRttiMethod; LParam: TRttiParameter; LParams: TArray<TRttiParameter>; SParamFlag: String; S : String; SFunctRes : String; sReturnType, sProcType, sMethodName: String; t: TRttiInstanceType; c: TRttiContext; begin c := TRttiContext.Create; t := (c.GetType(AClass) as TRttiInstanceType); If not Assigned(T) then Begin Result := False; Exit; End; Result := True; for LMethod in t.GetMethods do Begin sMethodName := LMethod.Name; LParams := LMethod.GetParameters; S := ''; For LParam in LParams do Begin SParamFlag := ''; if pfvar in LParam.Flags then SParamFlag := SParamFlag + 'var '; if pfConst in LParam.Flags then SParamFlag := SParamFlag + 'Const '; if pfArray in LParam.Flags then SParamFlag := SParamFlag + 'Array '; if pfAddress in LParam.Flags then SParamFlag := SParamFlag + 'Address '; if pfReference in LParam.Flags then SParamFlag := SParamFlag + 'References '; if pfOut in LParam.Flags then SParamFlag := SParamFlag + 'Out '; if pfResult in LParam.Flags then SParamFlag := SParamFlag + 'Result '; S := S + SParamFlag + LParam.Name; If Assigned(LParam.ParamType) then S := S + ' : ' + LParam.ParamType.ToString+'; '; End; If (S <> '') and (Copy(S, Length(S)-1) = '; ') then S := Copy(S, 1, Length(S)-2); If Assigned(LMethod.ReturnType) then Begin sReturnType := ' : ' + LMethod.ReturnType.ToString; sProcType := 'Function '; End Else Begin sReturnType := ''; sProcType := 'Procedure '; End; SFunctRes := aclass.ClassName+'.'+sProcType + sMethodName + '(' + S + ')' + sReturnType; SFunctRes := StringReplace(SFunctRes, '()','',[rfReplaceAll]); AMethods.Add(sFunctRes); End; End; procedure TForm28.Button1Click(Sender: TObject); var AClass: TPersistentClass; AMethods : TStringList; Begin AMethods := TStringList.Create; AClass := GetClass('TForm'); GetClassInfo(AClass, AMethods); Memo1.Lines.AddStrings(AMethods); End;
Si mejoran este procedimiento me envían copia.
Saludos