2021年4月27日火曜日

[Unity]環境作成

[共通] 当 Blog の投稿に関する基本事項について
→ http://fuunyan.blogspot.jp/2012/09/blog.html


いくつかの事情で、個人的にUnityを勉強してみるか、ってことになったとので開始してみた。
例によって続くかどうかは・・・。

とりあえず入手
まずは開発環境を入手しないことには始まらない。
いくつかエディションがあって、無料のPersonal、有料の Plus, Pro, Exterprise となっていくらしい。詳しい使用要件についてはダウンロード時に表示されるので、満たしていないと思ったら上位のエディションにしたほうがいいでしょう。
とりあえず私は無料版でいけるので、こちらからダウンロードしました。

「始めよう」ボタンを押すと、使用条件が表示されるので問題なければ先に進んでダウンロードします。インストールウィザードが開始されるので、そのままインストール。
終了させると「Unity Hub」というのが表示されるので「インストール」をクリックします。
このタイミングで画面上部にエラーが出たのですが、一度 Unity Hub を終了して再起動したところ改善しました。
ダウンロードは少々かかるので、その間にユーザー登録も済ませました。

・・・はい、普通ならこれで終わるのでしょうが、まぁ苦労しました。
とにかくインストールが成功しないんですよ、えぇ。
冗談抜きで十回以上やり直した結果、こうだったんじゃない?って正解ルートだけ書いておきます。
1)Unity Hubをインストールする。
2)インストールボタンを押さず終了&OS再起動。
3)再起動後、ユーザー登録。
4)Unity Hub起動、インストール開始
5)インストールウィザードでログイン
6)処理終了待機・・・

自分はグダグダになったので、Unity Hub からモジュール選択して個別にインストールを行いました。
この場合も焦ったら負けで、 Dev tools とか Platforms の各モジュール配下のもの(例えば Android SDK)は後回しにして、先に Platforms 直下のモジュールだけインストールしてから、必要なものを追加でインストールしたら失敗しなかったです。
以下、個別に追加したモジュールの一覧。
Platforms
・Android Build Support
 -Android SDK & NDK Tools
 -OpenJDK
・Windows Build Support(IL2CPP)
Documentation
・Documentation
Language packs(Preview)
・日本語

とにかくインストールだけでゴールしたくなってきたw
これ必要なもの足りているのかな?進めていけばわかるか。

2017年5月16日火曜日

[Qt]Qt初心者あれこれ

[共通] 当 Blog の投稿に関する基本事項について
→ http://fuunyan.blogspot.jp/2012/09/blog.html


次の案件で利用することになりそうな Qt に関する各種メモ

探し方が下手なのかもしれないが、よくある環境構築から実際に実装するまでを説明しているサイトが見当たらなかったので、自分メモを兼ねて公開予定。


Qt公式
https://www.qt.io/jp/
公式の日本語サイト
なお見に行けばわかることなのですがトップ以外は全部英語です。

日本 Qt ユーザー会
qt-users.jp
よくあるユーザー主導の情報源
ただしこのサイトIE11だと表示できない(アドレスバーの検索機能が影響?)
Qt Account のプロフィール画面の挙動もおかしいのでChrome利用推奨?
レイアウトがおかしい場合は画面サイズを変更後、リロードすると直る可能性あり。


ダウンロード
https://www.qt.io/download-open-source/ からインストーラーをダウンロードする。
ありがたいことに自動的にプラットフォームの解析をして適切なインストーラーを選定してくれる。
Windowsの場合は Recommended download が Qt Online Installer for Windows になっているはず。
もし違っている場合は、同ページ下部にある Not the download package you need? View All Downloads を選択して、表示されたリンク群の中から Qt Online Installer for Windows を選択する。

この投稿を書いているときにダウンロードした版は以下の通り。
qt-unified-windows-x86-2.0.5-2-online.exe


インストール
ウェルカム曰く


Welcome to the Qt online installer.
This installer provides youwith the option to download either an open source or commercial version of Qt.
Commercial users: Please log in with your Qt Account credentials.
Open source users: You have the option to log in using your Qt Account credentials(e.g. your Qt Forum login).
I you do not have a login yet, you have the option to create one in the next step.

Qtオンラインインストーラへようこそ。
このインストーラには、Qtのオープンソース版または商用版のいずれかをダウンロードするオプションがあります。
コマーシャルユーザー: Qtアカウントの資格情報でログインしてください。
オープンソースユーザー: Qtアカウントの資格情報(例:Qtフォーラムのログイン情報)を使用してログインするオプションがあります。
まだログインしていないので、次のステップで作成するオプションがあります。

ということなので作業を進める前にQtアカウントを作成
https://www.qt.io/qt-account/
パスワード条件は
・最低7文字
・メールアドレスまたは名前を入れることはできません。
・小文字、大文字、数字、記号の4つのタイプのうち少なくとも3つを含む必要があります。
・利用可能文字:a-z, A-Z, 0-9, 半角空白, 記号 !"#/()=?@${[]}\,.-_<>|;:'*^~+
登録後、程なくして確認メールが届くので本文内にあるリンクにアクセスして本登録を完了する。

インストーラーに戻ってユーザー名とパスワードを入力するとライセンス状況を確認してくれてオープンソース版のインストールが自動的に始まる。

準備のダウンロード?などが完了するとインストール先を聞かれるので、指定して先に進める。
同画面にあるチェックボックスはファイルの関連付けをするか否かの確認。

次にインストールするコンポーネントの選択。
初期状態でいくつか選択されている。
それらを尊重しつつ最新版だけを残すようにした(Beta版とかいらないし、版毎の微妙な変更点を気にするレベルでもないですし)
結果、以下のものを選択(選択解除不可能なものは記載除外)
+Qt 5.8
 +MinGW 5.3.0 32bit
 +WinRT x64 MSVC2015)
 +WinRT x86 MSVC2015)
 +msvc2015 32-bit
 +msvc2015 64-bit
 +Qt Charts
 +Qt Data Visualization
 +Qt Purchasing
 +Qt Virtual Keyboard
 +Qt WebEngine
 +Qt Gamepad (TP)
 +Qt Network Auth (TP)
 +Qt Speech (TP)
 +Qt Script (Deprecated)

あとはライセンスへの同意とかスタートメニューへの登録とか。

開始するとインストールするコンポーネントのダウンロードが開始される。

~ 待機・・・完了。


Hello world(準備編)
とりあえずVisualStudioな気分でプロジェクトを作って Hello world 的なものを完成させてみる。

メニューから「ファイル/プロジェクトの新規作成...」を選択。
左側の「プロジェクト」から「アプリケーション」を選択。
すると中央に関連プロジェクトが表示される(はず)
中央の「Qt ウィジェットアプリケーション」を選択して「選択」ボタンを押下。

「Qt ウィジェットアプリケーション」ダイアログでプロジェクトの設定を行う。
パス
「名前」にはプロジェクト名を入力。
「パス」にはプロジェクトの格納先を入力。
VisualStudio的な表現をするとソリューションフォルダーは作られないので、そのような管理をしたい場合は考慮したフォルダー名を指定する。
⇒プロジェクト名でフォルダーが作成される様子
キット詳細概要についてはデフォルト値のまま(よくわからないまま変更したら大変なことになる)


Hello world(実装編)
左側のプロジェクトツリーから「フォーム」配下にあるmainwindow.ui をダブルクリックしてウィンドウデザインを表示する。
「ウィジェットボックス」(ツールのある枠)の中から
・Buttons グループ内にある Push Button
・Display Widgetes グループ内にある Label
をウィンドウ上に DnD する。

ウィンドウ上に配置した Push Button を選択し、右クリックメニューより「スロットへ異動...」を選択する。
すると「スロットへ移動」ダイアログが表示される(いわゆるイベント一覧)
リストの一番上にある clicked() を選択して OK 押下。
自動的に mainwindow.cpp が開かれ on_pushbutton_clicked() イベントが追加される。

イベントのコードとして以下を追加。
余談:予測リストの確定は enter でできる
void MainWindow::on_pushButton_clicked()
{
    ui->label->setText("hello world");
}
あとはビルド(ctrl + B)して実行(ctrl + R)すればウィンドウが表示されます。
ボタンを押下するとラベルに hellow world が表示されるはずです。

しかしメモのつもりだったのにしっかり投稿記事にしてしまったw

2014年5月13日火曜日

[Android] 勉強備忘録 2日目

[共通] 当 Blog の投稿に関する基本事項について
→ http://fuunyan.blogspot.jp/2012/09/blog.html


Eclipseのインストール



インストールというか、展開と配置・・・ですね。
余談:
ファイル名「~4.3.1-win32-x86_64.zip」
途中の win32 の意味がわからない。


インストール先はそのままだと長いので「D:\EclipseSDK-4.3.1_64」とした。
まぁ32bitをインストールする気はないんだけど念のため。
もう少し構成とかを理解したら配置も再度考え直したいかなぁ。
たぶんこれ配下に eclipse フォルダーあるけど、それ以外にインストールされるファイルないんだよね。
直接置いちゃっていい気がしている。
・・・置いちゃいました。
動きおかしかったら、ここからやり直し・・・。


Eclipse の日本語化

ファイルを置き換えるだけ


Eclipse を起動してワークスペースの指定
これも自分でわかりやすいところに指定。
D:\Projects\Android


デフォルトJavaの設定とか

デフォルトJavaは手順通りにしていたためか、しっかりと設定されていたのでスルー
行番号って標準で表示されていないのかとびっくりしつつ設定をチェック


コンパイラーの設定

バージョンが1.7であることを確認


ADT のインストール

Android のエミュレータ画面とかのパッケージかな?
アーカイブファイルを利用してインストール。
途中のセキュリティ警告もokしてお終い・・・あれ?
Eclipse が再起動してきたら、エラー発生


Location of the Android SDK has not been setup in the preferences.


Open preference ってボタンあったので押してみる。





英語長すぎて打ち込めなかったのでSS貼り付け。


We know you just want to get started but please read this first.
私たちはあなただけ始めたい知っているが、最初にこれを読んでください


Google先生、意味わかりません。
全文は長いので訳してないけど、要するに使ってくれてありがとう
・・・で


Send usage statistics to Google.
統計情報を Google に送信していい?


って事は利用情報の収集してるよ!って事なんでしょうね。
チェックを外して Proceed を選択。


・・・何かいろいろ提示されていることと事象が違う。
どっかでおかしくなったなぁ。
時間遅いし Eclipse 削除して、明日以降にやり直そう・・・。

2014年5月11日日曜日

[Android] 勉強備忘録 1日目

[共通] 当 Blog の投稿に関する基本事項について
→ http://fuunyan.blogspot.jp/2012/09/blog.html


JDKのインストール

以前に入れたものがあったので、ちょっといろいろまっさらにして準備。
講習サイトに合わせて JDK7U40 をインストール

環境変数の設定

JAVA_PATH と PATH の設定
ちなみにインストール先は program files の下はいろいろ嫌なので D:\Java64 とか作って、その下にJDK07U40 を作成してバージョン管理。
何か偏見かもしれないけど Java の開発やっているといろんなバージョンを入れるようないめー時があるためバージョン管理も考えたフォルダ構成にした。
(まぁ詳細をあんまり理解していないので、もしかしたら意味無しの分類なのかもしれないが)

SDKのインストール

Rev22.2.1 をインストール
インストール完了後に SDK Manager が起動するので、そこで利用するパッケージの選択。
SDK Build-tools は 18.1 を選択(講習サイトの指示通り)
まぁ最新っぽい 19.0.3 もあるけど 19.0 でバグが出るっていうので、安定版を選択する意味で 18.1 にしました。
この辺がどうやって影響してくるのかわかったら、後で変更してみればいいですしね。
たぶんイメージとしては VisualStudio2010 を使うのか 2013 を使うのか・・・みたいなもんなのでしょうね。


あとは手持ちの端末に合わせた Android のバージョン(今回の場合は Android 4.1.2 (API16) を選択して終了。


何だか必要ないバージョンの API が入っていたりしたのでアンインストールしたりして問題なくなるまで調整。


これで初日の作業終了。

2012年12月25日火曜日

[Windows] システム周りな話

[共通] 当 Blog の投稿に関する基本事項について
→ http://fuunyan.blogspot.jp/2012/09/blog.html


開発言語にとらわれないシステム共通な部分の覚書です。

画面サイズの事
GetSystemMetrics で諸々取得可能
SM_CYSMCAPTION タイトルバー 21pixel
SM_CXSIZEFRAME 枠 8pixel


2012年12月12日水曜日

[C#] WinAPI を呼んでみる

[共通] 当 Blog の投稿に関する基本事項について
→ http://fuunyan.blogspot.jp/2012/09/blog.html


以前の投稿内では普通に使っているのですが、特に記載していないようだったので別途投稿してみようと思います。
C# は便利ですが、細かいことをやろうとするとどうしても API に頼ることになります。
では API ってどうやって呼びだすのな部分を今回はネタにしてみました。

using System.Runtime.InteropServices;   // DllImportなど、API呼び出し
namespace CSWinFormTest2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // API を利用するのに必要な宣言(インポートライブラリの宣言)
        [DllImport("user32.dll")]
        // API を利用するのに必要な宣言(インポートライブラリの宣言、オプション指定はこんな感じ)
//        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        // API を利用するのに必要な宣言(関数定義の宣言)
        // static extern は必須。アクセス演算子は任意
        private static extern UInt32 MessageBox(IntPtr hWnd, String lpText, String lpCaption, UInt32 uType);

        // MessageBox() Flags  winuser.h より(一部抜粋)
        private const UInt32 MB_OK                   = 0x00000000;
        private const UInt32 MB_ICONASTERISK         = 0x00000040;
        private const UInt32 MB_ICONINFORMATION      = MB_ICONASTERISK;

        private void button1_Click(object sender, EventArgs e)
        {
            // API の利用方法を確認
            MessageBox(this.Handle, "メッセージ本文", "タイトル部", MB_OK | MB_ICONINFORMATION);

            // 余談:C# では MessageBox.Show があるので、本来上記のような手間は必要はない
            System.Windows.Forms.MessageBox.Show("メッセージ本文", "タイトル部",
                MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}
短いので全部まとめて書いています。
まぁコメント見ていただければわかるかと思います。
DllImport で使用するライブラリを指定して関数定義を宣言。
あとは普通に利用するだけです。

ちなみに複数種類の API を利用したい場合は、その関数毎に定義を各必要があります。
オーバーロードするような場合でも DllImport から書く必要があります。
これがめんどくさいので結局 C++/CLI で作るかぁ~?ってなっちゃいます。
まぁ DllImport から関数定義までが一つの宣言だと思ってあきらめるしかありません。

全体的に見れば C# の方が生産性いいはずなので、できるだけ C# でやっていこうかな、っと。

--- 2012/12/27追記 ----------
よく見に行くサイトをいちいち検索するのがめんどくさいので、こちらに転記させていただいた。
毎度お世話になっております(@IT .NET TIPS Win32 APIやDLL関数を呼び出すには?
APIでの型名
(括弧内は対応するC言語の型)
対応するC#の型
(括弧内は.NET Frameworkでの型名)
HANDLE (void *)System.IntPtr
BYTE (unsigned char)byte (System.Byte)
SHORT (short)short (System.Int16)
WORD (unsigned short)ushort (System.UInt16)
INT (int)
LONG (long)
int (System.Int32)
UINT (unsigned int)
DWORD, ULONG (unsigned long)
uint (System.UInt32)
BOOL (long)bool (System.Boolean)
CHAR (char)char (System.Char)
LPSTR (char *)
LPWSTR (wchar_t *)
System.Text.StringBuilder
LPCSTR (const char *)
LPCWSTR (const wchar_t *)
string (System.String)
FLOAT (float)float (System.Single)
DOUBLE (double)double (System.Double)
Win32 APIでの型名と対応するC#の型 WindowsのDLL(Win32 API)と.NET Frameworkとでは型の管理方法が違うため、実際には型の相互変換(マーシャリング)が行われる。なお、BOOL型の実体はLONG型と同じなので、boolの代わりにintを指定することも可能である。

2012年11月29日木曜日

[C#] 画像描画と背景透過

[共通] 当 Blog の投稿に関する基本事項について
→ http://fuunyan.blogspot.jp/2012/09/blog.html


画像描画と銘打っていますが、実のところ先行して投稿した下記2記事の続きと言ってもいいかもしれません。

[C#] ListView のカラム部分に画像表示

[C#] ListView のカラム部分に画像表示(其の2:HDITEM版)

其の2の中で、実は背景が透過していないため色の指定次第で画像背景が目立ってしまうと問題定義しておいたことに対する対策方法となります。
タイトルを引き続き利用しようかとも考えたのですが、基本的に内容が異なるために別タイトルとしました。

前置きはこのくらいにして本題に入りましょう。
今回は前提無しです。
でいきなりコードとなります(説明はのちほど)
// OdrIdx:表示する数字
// Odr   :三角形の向き
private Bitmap CreateSortOrderBmp(int OdrIdx, int Odr)
{
    // やっていること
    // 背景塗りつぶし → ソート順により三角形作成 → フォント描画(上下中央右寄せ)
    Bitmap img = new Bitmap(16, 16);
    Graphics g = Graphics.FromImage(img);

    // 背景を塗りつぶし(透過色)
    g.FillRectangle(new SolidBrush(this.TransparencyKey), g.VisibleClipBounds); // ①

    // 三角描画
    Point[] pnt = new Point[4];
    switch (Odr)
    {
        case 1: // 上三角
            pnt = new Point[4] { new Point(4, 2), new Point(0, 10), new Point(8, 10), new Point(4, 2) };
            break;
        case 2: // 下三角
            pnt = new Point[4] { new Point(4, 13), new Point(0, 5), new Point(8, 5), new Point(4, 13) };
            break;
        case 0: // 非表示化
        default:
            // 無印化するので描画処理をやらずに終了
            g.Dispose();
            return img;
    }
    g.FillPolygon(Brushes.Gray, pnt);   // 先に塗りつぶし
    g.DrawPolygon(Pens.Black, pnt);     // 次に、線描画

    // 文字を描画
    Font fnt = new Font("MS ゴシック", 8, FontStyle.Bold);
    StringFormat sfmt = new StringFormat();

    sfmt.Alignment = StringAlignment.Far;           // 横の表示位置
    sfmt.LineAlignment = StringAlignment.Center;    // 縦の表示位置

    g.DrawString(OdrIdx.ToString(), fnt, Brushes.Red, new RectangleF(new PointF(0, 0), new SizeF(16, 16)), sfmt);

    // 描画作業が完了したのでグラフィッククラスを解放
    g.Dispose();

    // 作成した画像を戻り値に
    return img;
}
御覧の通り、今回はメソッドとなります。
画像描画を書いたことある人には、なんてことない内容となっています。
やりたかったことは、リストのカラムをクリックすることでソートするので、それの昇順と降順、選択順番を明記するために画像を表示しようと考えていました。
そんなこんなの描画部分についてはソースを見ていただくとして、今回メインとなる背景透過の部分について。
ズバリ①の部分です。
コメントにも書いてあるのでわかるかと思いますが対象画像の背景をフォームで透過色と指定されている色で塗りつぶしています。
こうすることでカラム部分に表示しても昇降を示す三角と数字以外は表示されないことになります。
あとはそうして作成した Bitmap を ImageList の該当する部分に登録してあげれば対策完了です。
当然ですが ImageList の項目数 = カラム数と言うことになるので、他にもアイコンやらを使う予定がある場合はあらかじめ ImageList の配置仕様を検討しておく必要があると思います。

あと当たり前の話ですが、事前に ImageList に画像を登録して、それを利用する場合は登録する画像の背景を this.TransparencyKey で指定する色と同じにしておく必要があるので注意です。