2年前に角島行った時の写真
あの時は勢いだけで体もダルくて高速乗って一番最初のPAですぐに休憩したりだったけどある程度進んだら気分も乗ってきた。
-
最近の投稿
最近のコメント
アーカイブ
カテゴリー
メタ情報
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の切り替えなどが実現するようにできた。
エンバカデロテクノロジーズからモバイルアプリ開発環境のAppmethodが公開されました。
今回はC++版に限っては無償で使えると言う事ですが、少し制限があるみたいです。
C++版では6インチ以下の端末向け、かつ、配布はストア経由のみ許可されるということです。
今回はコンパイルして実機(Kindle)でアプリケーションを実行するところまでを実際にやってみたのでそれを記事にしたいと思います。
AppmethodではFireMonkeyというビジュアルコンポーネントライブラリを利用するようになっており、SDKやNDKなどを使わずにFireMonkeyだけで記述すればアプリケーションはマルチプラットフォーム対応のアプリケーションにすることが出来るという優れたライブラリです。コンポーネントという部品を画面に貼り付けて開発を行うタイプの開発環境で、VB、Delphi、.NET Frameworkで使われている開発手法です。.NETで開発したことがあれば割とすんなりと覚えることが出来るのではないかと思います。
たまに勘違いされている方が居る気がするのですが、マルチプラットフォームで開発が出来るのではなく、Windows上で複数のプラットフォーム向けのアプリケーションが開発出来るのがAppmethodです。
IDEを立ち上げ、ファイルから新規作成、FireMonkeyモバイルアプリケーション-C++を選択し、新しいプロジェクトを作成します。
このとき、どのような形式のアプリケーションを作るか決まっていれば適合するテンプレートを選択することで、あらかじめ部品が設置されたフォームを作成することも出来ます。これはただ部品が設置されているだけの物なので、どのテンプレートを選択しても部品を設置し直せばいくらでも変更出来るので、どれを選択してもかまいません。
今回はタブを選択しました。
すると、プロジェクトファイルを保存する場所を選択することになるので、わかりやすい場所にフォルダを作ります。
作成するとプロジェクトマネージャ(デフォルトでは右上)にプロジェクトのファイル一覧や、ターゲットプラットフォームを選択する物が表示されます。
この、ターゲットプラットフォームを展開すると32 ビット Windows、Android – Android SDK 22.3 32bit、iOS デバイスなど、複数のOSの名前が表示されていますが、無償版ではAndroidのみが対象なので、Androidのまま開発を続けます。
このままF9(実行)すると、プロジェクトのコンパイルが始まり、パッケージファイル(APKファイル)の作成まで行われますが、インストールしたばかりの状態ではエミュレーターなどが設定されていないので、エラーが出るかもしれません。
エミュレーターの設定をするには、スタートボタンからAppmethod 1.14のAndroid ADV Managerを起動し、New…と書かれたボタンを押すことで新しいエミュレーターの設定を作成することが出来ます。
このとき、AndroidSDKの各バージョンごとに作成したいのであれば、同じくスタートからAppmethod 1.14のAndroid Toolsを起動するとSDK Managerが起動するので、インストールされていないSDKにチェックを入れてインストールしておけば、エミュレーターで各バージョンのSDKを選択することが出来るようになります。
エミュレーターを作成し、プロジェクトマネージャの更新ボタンを押せば、あたらに追加したエミュレーターがターゲットプラットフォームのAndroidの中にあるターゲットという所の中に表示されます。
これで、F9(実行)するとコンパイルし、パッケージ化したものがエミュレーターにインストールされエミュレーターで実行されます
が、とてつもなく遅いです(^^;
エミュレーターでテストするのは現実的ではないので、実機にAPKをコピーしてテストすることをオススメします。
KindleではES File Explorerというアプリを導入しておくと、APKをインストールする事も出来るようになるのでオススメです。
APKファイルが作成される場所は、プロジェクトのファイルを保存するために最初に選択したフォルダの中の
Android ¥ Debug ¥ projectName ¥ bin
に保存されています。
今回は何も変更せずにコンパイルしたので、Debugというフォルダの中のものを使用することになりますが、プロジェクトマネージャのビルド構成を展開すると、DebugのほかにReleaseという物があり、そちらを選択すると、上のフォルダ名のDebugのところがReleaseに変更になるので注意して下さい。
今更ですけど、やっとC++BuilderXEにTEditorをインストール出来ました。
インストールしたTEditorはDEKOのあやしいお部屋に置いてある物を利用しました。
インストールした記録を書いておきます。
まず、パッケージを新規作成し、HEditreg.pasを追加します。
ここで、インストールを実行すると、DesignIntf.dcuが開けませんと出てインストール出来ません。
そこで検索すると、
こんなのとか、http://dhive.jp/blog/yama/1298.html
こんなの、http://support.codegear.com/article/37621
が、出てきます。HEditreg.pasを追加した時点でRequiresにはdesignide.bpiというのは追加されていますが、DesignIntf.dcuというのはないです、そこで、次にednに書いてある対策を実施しようとすると、バージョンが違ってプロジェクトオプションにその他のオプションのオプションを記入する場所がよくわからなかったり何を記入すればいいのかで困ります。
ここで、XEの場合はコンパイラに渡す追加オプションに-LUDesignIDEを入力します。
これで、インストールを実行すると、今度は、MecsUtilsが無いと怒られてインストール出来ません。
このMecsUtilsはDEKO氏(DEKOのあやしいお部屋)が作成したライブラリらしいのですが、氏のサイトを見ても見当たりません。
実はここで公開されていました:http://cc.embarcadero.com/item/26061
これでやっとインストール出来るかな!と、思ったら今度はSPIN.objが開けませんとか怒られてしまいます。
そこで、今度はプロジェクトマネージャのパッケージを右クリックして、『参照の追加』を実行します。
追加する物は、vclSmp.bpiです。
これでやっとインストールの準備が完了します。
まとめますと、
・新規パッケージを作成
・HEditreg.pasを追加
・プロジェクトオプション->Delphiコンパイラ→その他のオプション→コンパイラに渡す追加オプションに-LUDesignIDEを記入
・http://cc.embarcadero.com/item/26061で、MecsUtils.pasをダウンロードし、それなりの場所に保存して、パッケージに追加
・参照の追加で、vclSmp.bpiをパッケージに追加(lib\win32\release\にある)
・インストール
これでTEditorがC++BuilderXEにインストールされます。
今までやり方がわからず、BDS2006のDelphiだけにインストールしていましたが、わたしが使えるのがやっぱりC++Builderだけだったので、宝の持ち腐れになってました。これでやっとエディタっぽい物が作れる。
どういうわけか、TADOConnectionとTSQLConnectionを利用したアプリケーションがどっちもテスト環境でまともに動いてくれない。
TADOConnectionでSQLServerに繋げようとする方はパスが見つかりませんとかでて、パスって何のことという感じだし、TSQLConnectionでMYSQLに繋げようとする方はInvalid areg…とかいうエラーメッセージが出て接続先の探索まで言ってない感じ。
とりあえず、色々試してTADOConnectionの方は理解した。
パスが見つかりませんというのは、接続文字列にudlファイルを設定していたため、udlファイルが見るからなくてパスが見つかりませんと言う事だった。
ConnectionStringのダイアログを開いて、接続文字列にチェックを入れてビルドボタンからudlファイルを編集するときと同じダイアログが開くので、設定を入力してOKを押すと文字列が作成された。
とりあえず、これで接続は出来るようになったらしいけど、SQL Serverをリモートから操作するためには、手動でポートを開放する必要があるらしい。
具体的にはTCPで1433を開放すればいいらしい。
あと、リモート接続のための設定が色々あって、Management Studioからサーバーのプロパティを開いて接続のところのリモート接続を許可するにチェックを入れ、さらに、構成マネージャを起動してネットワークの構成を開いて利用するプロトコルを有効にして、それらを設定したら、sqlserverを再起動すればとりあえず繋げることが出来るようになるらしい。
インストールしただけではSQL Server Expressは繋がらない設定らしいのでこれらを忘れないようにしないといけない。
データエクスプローラの接続設定から、拡張オプションを開き
ServerCharSet の部分に、Windows8(7も?)の場合 cp932 をセットする。
これでローカルサーバーの日本語の文字化けが解消される。
TSQLQueryのSQLConnectionにはTSQLConnectionをセット
void __fastcall TForm1::Button2Click(TObject *Sender) { String query="insert into table_name(name,text) values("あああ","てすと"); SQLQuery1->SQL->Text=query; SQLQuery1->ExecSQL(true); }
String str; SQLDataSet1->CommandText="select * from a;"; SQLDataSet1->Active=true; SQLDataSet1->Open(); SQLDataSet1->First(); Caption=SQLDataSet->RecordCount; while(!SQLDataSet1->Eof) { str=SQLDataSet1->FieldByName("text")->AsString; ListBox1->Items->Add(str); SQLDataSet1->Next(); } SQLDataSet1->Close(); SQLDataSet1->Active=false;
この記事はC++BuilderXEに置ける対応法であり、最新版では若干仕様が異なっているかもしれない。
TSQLConnectionでMySQLに接続して、TSQLDataSetにSQLセット、TSQLTableから->AsStringで文字列を取得したとき、日本語が文字化けする時の対応法
データエクスプローラのMYSQLの接続設定の内容で詳細設定を開くとServerCharSetという項目があり、そこに該当する文字コードを入力する。データベースでUTF-8が使用されているならutf8
これで、文字化けしなくなる。
TSQLConnectionにParamsというプロパティがあり、そこに新たにパラメータを追加できるが、追加しても追加した直後は表示されているが、他のコンポーネントのプロパティなどをみるか、テスト実行した後で見てみると、追加したServerCharSet=utf8は消えているので、おそらく無視されている。
TSQLConnectionを使ってMySQLに接続してみようとしたら
みたいなエラーが出て接続できなくて、そう言えばデータエクスプローラでも同じエラー出てたなーと思って、データエクスプローラの方で接続出来るようにしてみようと色々設定変更して試したけどやっぱりダメで、そう言えばRadPHP2では接続できてたなーと思ってRadPHP2を開いてみたら接続できたからRadPHP2の中にあったdbxmys.dllをC++Builderの方にコピーして実行してみたら次はlibmysql.dllが何とかいうエラーが出たのでこれもRadPHP2からコピーしてこれでC++BuilderXEのデータエクスプローラでも接続できるようになった。
dbExpressのエンジンごとに設定を増やせるけど、dbExpressに新しいデータベースエンジンの項目を追加する方法がわからない。