DX: TMethod

From
Leonid Troyanovsky (2:5020/175.2)
To
Vlad Kiselev ()
Date
2002-04-05T08:43:20Z
Area
RU.DELPHI
From: "Leonid Troyanovsky" <lv.t@eco-pro.ru>

Приветствую, Vlad.

Fri Apr 05 2002 01:22, Vlad Kiselev wrote to All:

 > Каким образом нужно заполнять эту структуру для передачи в процедуру
 > SetMethodProp ?

uses
  TypInfo;

function ObjPropInfo(AObject: TObject; const PropName: String): PPropInfo;
begin
  Result := GetPropInfo(AObject.ClassInfo, PropName);
  if Result = nil then
    raise Exception.Create('Property not exist');
end;

procedure SetOrdProperty( AObject: TObject; const PropName:String;
                          const Value: Longint);
begin
  SetOrdProp(AObject, ObjPropInfo(AObject, PropName), Value);
end;

procedure SetStrProperty( AObject: TObject; const PropName:String;
                          const Value: String);
begin
  SetStrProp(AObject, ObjPropInfo(AObject, PropName), Value);
end;

procedure SetFloatProperty( AObject: TObject; const PropName:String;
                            const Value: Extended);
begin
  SetFloatProp(AObject, ObjPropInfo(AObject, PropName), Value);
end;

procedure SetVariantProperty( AObject: TObject; const PropName:String;
                              const Value: Variant);
begin
  SetVariantProp(AObject, ObjPropInfo(AObject, PropName), Value);
end;

procedure SetMethodProperty( AObject: TObject; const PropName:String;
                             const Value: Pointer);
var
  AMethod: TMethod;
begin
  AMethod.Code := Value;
  AMethod.Data := AObject;
  SetMethodProp(AObject, ObjPropInfo(AObject, PropName), AMethod);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  AFont: TFont;
begin
  SetOrdProperty(Button1, 'Width', 100);

  AFont := TFont.Create;
  AFont.Style := [fsBold];
  SetOrdProperty(Button1, 'Font', Longint(AFont));
  AFont.Free;

  SetMethodProperty(Button1, 'OnClick', @TForm1.Button2Click);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ShowMessage((Sender as TButton).Caption);
end;

С уважением,   LVT

--- ifmail v.2.15
 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)