C++BuilderでIFMXScreenServiceを利用する

Delphiのコードサンプルは沢山あって書かれたとおりで動くのかもしれないんですけど、IFMXScreenServiceがサンプル通りにやっても動かなかったので色々調べ回ってやっと見つけた解答をここに記す。

最初に見つけたサンプル

if (TPlatformServices::Current->SupportsPlatformService(IFMXVirtualKeyboardService) {
// 処理を実行
}

これを参考にIFMXVirtualKeyboardServiceの部分をIFMXScreenServiceに変えてコンパイルしてみたがIFMXScreenServiceが値を参照していないというエラーが出たり、プラットフォームを変えると別のエラーが出たりしてうまくいかなかった。

色々と検索ワードを変えてやっと見つけたのがこれ。

http://blogs.embarcadero.com/teamj/2013/05/14/3856/

これを参考にして上のソースを次のように書いたら動いた

_di_IFMXScreenService ss;
if (TPlatformServices::Current->SupportsPlatformService(__uuidof(IFMXScreenService))) {
	// 処理を実行
	ss=TPlatformServices::Current->GetPlatformService(__uuidof(IFMXScreenService));
 	//以降ssを利用して画面の向きなどを取得する
}

本当は2つの引数で実行できる方を使いたかったが、そっちはうまくいかなかったので、2段階で取得するようにした。
ついでに書いておくと、画面の縦横の切り替わり時に、KindleではGetScreenOrientation()でLandscapeは認識しなかったので、TScreenOrientation::Portraitかそれ以外という分岐で縦横の認識させるようにした。
画面の切り替わり時はFormのOnResizeが呼び出されるようなので、そこに上のソース書くことでGUIの切り替えなどが実現するようにできた。

カテゴリー: C++Builder, FireMonkey   パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>