cast TObject using his ClassType?

delphi, tobject

Solution

It would be easier to use RTTI instead of explicit casting, ie:

uses
  TypInfo;

setCtrlState([ memo1, edit1, button1], False);

procedure setCtrlState(objs: array of TObject; bState: boolean = True);
var
  obj: TObject;
  PropInfo: PPropInfo;
begin
  for obj in objs do
  begin
    PropInfo := GetPropInfo(obj, 'ReadOnly');
    if PropInfo <> nil then SetOrdProp(obj, PropInfo, not bState);

    PropInfo := GetPropInfo(obj, 'Enabled');
    if PropInfo <> nil then SetOrdProp(obj, PropInfo, bState);
  end;
end;

Problem

how can i make my code to work ? :) i`ve tried to formulate this question but after several failed attempts i think you guys will spot the problem faster looking at the code than reading my 'explanations'. thank you. ``` setCtrlState([ memo1, edit1, button1], False); ``` _ ``` procedure setCtrlState(objs: array of TObject; bState: boolean = True); var obj: TObject; ct: TClass; begin for obj in objs do begin ct := obj.ClassType; if (ct = TMemo) or (ct = TEdit) then ct( obj ).ReadOnly := not bState; // error here :( if ct = TButton then ct( obj ).Enabled:= bState; // and here :( end; end; ```

Original source