喫茶XRAYトップページ

[スレッド全体
]

[10889] Re2:実行時型情報 RTTI返信 削除
2017/2/26 (日) 20:47:19 taki
uses TypInfo;  // 追加

procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
  s:string;
  obj:TComponent;
  V:Variant;    // 追加
begin
  for i := 0 to Form1.ComponentCount - 1 do begin
    obj := Form1.Components[i];
    s := obj.Name;
    listbox1.Items.Append(s);
    //
{
    if obj is TButton then begin
      s := inttostr(TButton(obj).top);
      listbox1.Items.Append(s);
    end;
    //
    if obj is TPanel then begin
      s := inttostr(TPanel(obj).top);
      listbox1.Items.Append(s);
    end;
    //
    if obj is TStringGrid then begin
      s := inttostr(TStringGrid(obj).top);
      listbox1.Items.Append(s);
    end;
}
    try
      V := GetPropValue(obj, 'Top');
      listbox1.Items.Append(V);
    except
      on EPropertyError do listbox1.Items.Append('No property');
    end;
  end;
end;

こんなかんじでいいのかな?


[10891] Re3:実行時型情報 RTTI返信 削除
2017/2/26 (日) 21:39:03 福士
▼ takiさん
> こんなかんじでいいのかな?
Top(やLeft、Width、Height)がほしいだけならRTTIはいりません。
これらのプロパティはTControlで実装されているので、単に
(Components[i] as TControl).Top
で取り出せます。

[10892] Re4:実行時型情報 RTTI返信 削除
2017/2/26 (日) 22:00:25 Mr.XRAY
> これらのプロパティはTControlで実装されているので、単に
> (Components[i] as TControl).Top
> で取り出せます。


コントロールの型で確認すると,全て確認しないなりませんからね ...
私のレスが混乱を招いたのかも知れません.すみません.


[10893] Re4:実行時型情報 RTTI返信 削除
2017/2/26 (日) 22:55:27 taki
▼ 福士さん
> ▼ takiさん
> > こんなかんじでいいのかな?
> Top(やLeft、Width、Height)がほしいだけならRTTIはいりません。
> これらのプロパティはTControlで実装されているので、単に
> (Components[i] as TControl).Top
> で取り出せます。


ありがとうございます。

コロンブスの卵…ですね。


[10896] Re4:実行時型情報 RTTI返信 削除
2017/2/27 (月) 07:51:15 taki
▼ 福士さん

TComponentのHelpに

「TComponent では、ユーザー インターフェイスや表示用の機能をまったく提供していません。
これらの機能は、TComponent の直接の下位クラスである次の 2 つのクラスで提供されています。

FMX.Types ユニットの TControl。FireMonkey(FMX)フレームワークで構築される
クロスプラットフォーム アプリケーションで使用するビジュアル コンポーネントの基底クラスです。
Vcl.Controls ユニットの TControl。Windows のみの(VCL)アプリケーションで使用する
ビジュアル コンポーネントの基底クラスです。」

…とありました。勉強になりました。


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82