喫茶XRAYトップページ

[スレッド全体
]

[10293] Re4: ポインタ型を定義する方法もある返信 削除
2016/8/11 (木) 16:29:31 Mr.XRAY
> このようなポインタ型の使用は,実はかなり強力です.

でも,ほら,敷居が高いとか難解とか言う人には無理かも知れません.
そのような方は,あきらめるしかないでしょう.
ホホホッ.ワーハッハハ ...


[10296] Re5: ポインタ型を定義する方法もある返信 削除
2016/8/12 (金) 20:57:47 Mr.XRAY
> でも,ほら,敷居が高いとか難解とか言う人には無理かも知れません.

ですが,折角なので記事にしました.

[メッセージの引数に配列を渡す例 - ポインタ型の定義]
http://mrxray.on.coocan.jp/Delphi/Others/TypeArray.htm#07


[10297] Re6: ポインタ型を定義する方法もある返信 削除
2016/8/14 (日) 14:38:39 Mr.XRAY
> [メッセージの引数に配列を渡す例 - ポインタ型の定義]
> http://mrxray.on.coocan.jp/Delphi/Others/TypeArray.htm#07


タイトルを内容に合わせて変更しました.
TBitmap の例も書いておきました.
PostMessage ではなく SendMessage を使用しています.

足が短くて,あるいはメタボのために「敷居が高い」と思う方は無理かもしれません.


[10303] TObjectと型キャスト返信 削除
2016/8/16 (火) 21:36:11 Mr.XRAY
いい題材があったので,ついでに
質問のタイトルはちょっと ? ですが.

[Bool(StringGrid1.Objects[4,i])をtrueにセットしたいのですが]
https://forums.embarcadero.com/thread.jspa?threadID=228954&tstart=0

配列をメッセージに渡す時は配列ですが,
取り出す時は,どんな型として取り出すかを決めない正しく取り出せません.
よく使用されている Sender: TObject と同じです.

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Lines.Text := 'テスト文字列';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  LText : string;
begin
  //TObjectには何でも入っちゃう
  Sender := Memo1;

  //取り出す時は何として取り出すのかを指定する
  LText := TMemo(Sender).Text;
  MessageBox(Handle, PChar(LText), '結果', MB_ICONINFORMATION);
end;



[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