喫茶XRAYトップページ

[スレッド全体
]

[10305] Re:TObjectと型キャスト返信 削除
2016/8/17 (水) 07:10:30 Mr.XRAY
>   //TObjectには何でも入っちゃう
>   Sender := Memo1;


Sender は TObject です.
TMemo のご先祖様は TObject です.
したがって,そのまま代入できます.

そうではない Integer, String 型のような単純型の場合は,次のようにできます.

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Lines.Clear;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  LIntValue : Integer;
begin
  //TObjectには何でも入っちゃうけど...
  //SenderはTObjectなのでTObjectでキャストする
  //TMemo等は大元がTObjectなのでキャストの必要はない
  Sender := TObject(150);

  //取り出す時は何として取り出すのかを指定する
  LIntValue := Integer(Sender);
  Memo1.Lines.Add(IntToStr(LIntValue));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  LpStrText : PString;
  LText     : string;
begin
  //文字列は,動的なメモリ領域を確保してから
  New(LpStrText);

  try
    //逆参照でポインタ型の変数代入して
    //SenderはTObjectなのでTObjectでキャストする
    //TMemo等は大元がTObjectなのでキャストの必要はない
    LpStrText^ := 'Delphi-ABC';
    Sender     := TObject(LpStrText);

    //取り出す時は何として取り出すのかを指定する
    //これも逆参照で実の値を取り出す
    LText := PString(Sender)^;
    Memo1.Lines.Add(LText);
  finally
    //動的に確保したメモリ領域は解放しなければならない
    Dispose(PString(TObject(Sender)));
  end;
end;



[10306] Re2:TObjectと型キャスト返信 削除
2016/8/17 (水) 07:20:57 Mr.XRAY
>   Sender := TObject(150);
>
>   //取り出す時は何として取り出すのかを指定する
>   LIntValue := Integer(Sender);


で,問題のコミュニティの TStringGrid の場合ですが,
  TStringGrid.Objects[XX,XX] は TObject 型なんです.
論理型のご先祖様は TObject ではありません(ご先祖様いたっけ ?).
したがって,Integer, String 型と同じように,単純型と同じようにします.

毎日開発で忙しいとは思いますが,こういう機会に勉強しておくと,

『ありがとうございました.おかげでメモ帳を起動することができました.
そこで,少し欲張って今度はエクセルを起動したいと思っています.
エクセルはどのように起動したらよいのでしょうか ?』

という質問をしなくても済むようになるかも知れません.
(欲張らなくてもいいから... (^^; )


えっ? 奥歯に何か挟まっているような感じがする ?
そうですか,でもあまり気にしない方がいいですよ.
あまり気にするとハゲますから.
えっ ? もうハゲている ? そうですか.ホホホ.

続きは,またいい題材を見つけたらということで.


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