A5:SQL Mk-2

開発のこと、日々のこと

2019/09/08
から 松原正和
1件のコメント

A5:SQL Mk-2における高DPIアプリケーション開発

A5:SQL Mk-2は一応高DPI対応ということになっていますが、これまで私の開発環境は高DPIに耐えうるディスプレイではありませんでした。1680×1050という少し変則的な解像度のディスプレイ(フルHDですらない)を2枚使って、高解像度のテストのときだけ無理やり、スケーリングを150%とかにしてみたり…。

ということで、今回4Kディスプレイを2枚導入してみました。なかなかこれ自体大変だったのですが、今回の書くのは高DPI対応アプリケーションのお話。

Windowsにおける高DPI対応は以下の3つのレベルがあります。

  • Not DPI Aware (高DPI対応無し)
  • System DPI Aware (高DPI対応あり、ただしモニターごとのDPI対応無し)
  • Per monitor DPI Aware (高DPI対応あり、モニターごとのDPI対応あり)

Not DPI Aware は内部的には古いWindowsの標準DPIである96DPIで内部的に描画され、スケーリング(拡大)されて実際のモニターに表示されます。このため高解像度のモニターでは文字や画像がモヤっとして表示されます。高DPIに何も対応しないアプリケーションはこれになります。

System DPI Aware は起動時にDPI値が決定(多分メインモニターのDPI値)され文字はきれいに表示されます。画像ももやっとしません(個別に画像を用意する必要があります)。DPIの異なるモニターに切り替わるときはシステムが自動的にスケーリング表示に切り替える仕組みとなります。ただし、Windows 10(の最近のバージョン)ではスケーリング表示時でも文字だけはきれいに描画されます。アプリケーションでは、起動時にレイアウトの調整をしたり、解像度にあわせた複数の画像を用意する必要があります。

Per monitor DPI Awareは Windows 8.1から導入され、一番新しい対応レベルです。モニターを移動するごとにDPIの変更がアプリケーションに伝達され、アプリケーション内でDPI切り替えの処理が実行されます。アプリケーションでは、起動時とDPI切り替えである、WM_DPICHANGEDイベントでレイアウト調整や画像の切り替え処理をする必要があります。

A5:SQL Mk-2 Version 2.14系ではPer monitor DPI Awareに対応していました。開発環境である Delphi 10.2 も Per monitor DPI Aware に対応することになっています。ただ、実際DPI値の異なるモニター間の切り替え動作は正しく動作していなかったようです。A5:SQL Mk-2が今どき珍しいMDIアプリケーションであることも影響しているかもしれません。

色々試してみたのですが、なかなか完全対応は難しいようです。また、DPI切り替えの処理は複数ドキュメントを開いていると結構時間のかかる処理のようで、切替処理にモタついてしまうのもなんだかいけません。

これらのことから A5:SQL Mk-2では一つレベルを落とし、 System DPI Awareに変更することにしました。これなら、DPIの異なるモニター間を移動しても画面崩れなどは起きませんし、切り替え時にアプリケーションがモタつくこともありません。実際やってみて、表示もなかなかきれいに表示されているように思います。

実際のやり方は 以下の通り。

これまでは、Delphiのプロジェクトオプションで「アプリケーション」の「高 DPI の有効化」にチェックを入れていましたが、

System DPI Awareにするには、マニフェストファイルを自分で用意するようにします。

実際のマニフェストファイルの記述は以下の通り…。「<dpiAware>true</dpiAware>」というのが、 System DPI Aware に対応する記述です。

2019/08/28
から 松原正和
0件のコメント

A5:SQL Mk-2 Version 2.14.3 公開…ちょっと不具合

A5:SQL Mk-2 Version 2.14.3 が公開されました。…が早速ちょっと不具合を発見。

Version 2.14.3 で構文入力支援の高速化をしたのですが、ちょっとミスしたようです。

普通に、Ctrl+Spaceで構文入力支援を呼び出したあと…、


何文字か文字を入力して絞り込むと、本来は構文入力支援の候補数がそれに合わせて減っていくはずですが、候補数が減らずに、空白が表示されます。

空白の行を選択しようとすると、選択行を表す、青色の反転も表示されなくなり…、

さらにその行を選択しようと、Enterを押下すると「引数が範囲外です」エラーになってしまいます。

大きな不具合ではないと思いますが、早めに修正版をリリースしたいと思います。

2019/07/28
から 松原正和
0件のコメント

VirtualBox 6 に古いLinux(VineLinux 4.3)を導入する。

古いPostgreSQL (PostgreSQL 7.3 )の動作検証として、古いVirtualBox 6.0.10にLinux 7.3 を入れてみました。今どき何かの役に立つのかは知りませんが、何かの備忘録ということで…。

VineLinux 4.3自体の導入はすんなりと行きました。仮想マシンの作成は、タイプをLinuxに、バージョンは Linux 2.4 (32bit)を選択。メモリは 128MBがデフォルトでしたが、512MBに拡張、仮想ハードディスクは4GBから20GBに拡張しました。(なんとなく)

古いOSなので、VirtualBox Guest Additionsが入るかな?と思ったのですが、最近のUbuntuなどのように、Guest AdditionsのCDをマウントさせたら、自動実行とはいきませんでした。自動マウントまではしてくれるようでしたが、自動実行はしないようです。

とりあえずコンソールから、./autorun.sh を実行しようとすると、何かエラーが…。

詳細は良く分かりませんでしたが、(仮想)CD-ROMから実行ではなく、(仮想)CD-ROM内のVBox_GAs_6.0.10ディレクトリを適当なディレクトリ(ホームディレクトリとか)にコピーしてから実行するとうまくいきました。

しかし再起動してみると、解像度がなぜか640×480しか選べません。

とりあえず、/etc/grub.conf で「vga=0x318」(1024×768 24bitの設定値)などと記述してみるも…。

再起動してみると…、

848×480が精いっぱい。まあ、GUIでゴリゴリ何かをするわけではないのでこれで良しとします。

とりあえずは、昔ダウンロードして持っていた postgresql-7.3.21.tar.gz をドラッグ&ドロップで仮想マシンに転送し(これがしたかったので VirtualBox Guest Additionsを入れた)、以下コマンドでPostgreSQLをインストール

$ tar vfzx postgresql-7.3.21.tar.gz

$ ./configure --without-readline --without-zlib --enable-multibyte=EUC_JP

$ make

# make install

とりあえず、今日はここまで。

2019/05/06
から 松原正和
1件のコメント

A5:SQL Mk-2にテーブル設計機能を追加

これまでずっと要望があったのですが、Version 2.15.0 beta 4でようやくA5:SQL Mk-2でGUIで設計できる機能を追加しました。



これまで実装していなかったのは、テーブルの作成(再作成)はGUIでやるべきではなくDDLを書いてからやるべき派だったのと、各DB製品ごとのDDLの方言を吸収するのが大変ということがあったためです。テーブルをDROP後にCREATE TABLEでエラーになったりしたら最悪ですし。

とりあえずは、直接テーブルを作成または再作成するのではなく、そのためのDDLを作成してSQLエディタに展開するだけの機能です。

なお、再作成時はテーブルデータを消さずに再作成するためのDDLを作成します。(ワークテーブルに退避してから、DROP&CREATE、ワークテーブルからデータを戻してワークテーブルを削除する)

データを引き継ぐには列定義のグリッドで右端の列(引き継ぐ値(式))に記述します。基本的には「old.列名」を指定することになると思いますが、データ型が変わったり、列の長さが短くなったりするときは、変換を行う式を指定することになると思います。

あと、現状ではまだ作りかけの機能で、以下が未実装または不完全です。

  • オプションタブの機能(DB製品ごとのオプション項目…テーブルスペースとか、ストレージエンジンとか、キャラクタセットとか)
  • 参照整合性制約に未対応
  • トリガー機能に未対応(再作成すると消える? or エラーになる?)
  • 翻訳がまだ(英語リソース無し)
  • おそらく Oracle Database, Microsoft SQL Server, IBM Db2, PostgreSQL, MySQLのみの機能になるが、画面呼び出し時に現状ではDB製品の判別をしていない。
  • その他方針等が迷い中…。

新規テーブルを作成するには、DBツリーで対象DBを選択した状態で、メニューから[データベース(D)] – [新規テーブルの作成]を選びます。

既存のテーブルのレイアウトを変更するには、DBツリーで対象テーブルを選択し、右クリックメニューから[テーブル定義の変更(テーブル設計)]を選びます。

何か、テーブル設計の画面で何かアイディアがある方はご意見などいただければと思います。

2019/04/28
から 松原正和
0件のコメント

Windows 10 でタスクバーに消せない透明アイコンが残ったときの消し方。

これまで、Windows 10 で Windows Subsystem for Linux (WSL)の一つで、WLinux というのを使っていたのですが、これがいつの間にか、Pengwinという名称に変わっていました。

それはいいのですが、タスクバーにピン止めしていると、WLinuxの名前で透明なアイコンが残ってしまいます。しかも、右クリックしても、「WLinux」と「タスクバーにピン留めする」しか出てきません。なぜか「タスクバーからピン留めを外す」が出てきません。

困っていたのですが、以下のようなページを発見!!。

https://answers.microsoft.com/ja-jp/windows/forum/all/windows10%E3%82%BF%E3%82%B9%E3%82%AF%E3%83%90/7b7de726-695d-4524-b7c1-f314a02a5395

LINEアプリでも同じようなケースがあったようですね。

単に、Shift+右クリックで「 タスクバーからピン留めを外す 」が出るようになります。

分かってしまえば、なんだって感じのことですね。

2019/04/14
から 松原正和
0件のコメント

A5:SQL Mk-2でスキーマ間データ転送するとき、テーブルを指定できるようにしました。

これまでA5:SQL Mk-2ではスキーマ間のデータ転送をするとき、送信元と送信先の両方のスキーマに存在するテーブルがすべて転送対象となり、選択することができませんでした。

なぜ今まで付けていなかったのか不思議ですが、 ようやく、Version 2.15.1 beta 1で実装してみました。

今までは以下の画面で「転送」ボタンを押下すると、すぐに処理が走っていたのですが…、


Version 2.15.0 beta 1からは、その次に次のような画面が出てテーブルを選択できるようになります。

2019/04/14
から 松原正和
0件のコメント

A5:SQL Mk-2でテーブルを編集するとき、複数行をまとめて編集してサーバーに反映する機能を実装

タイトルが微妙に長いのですが、簡潔な表現が思いつかなくてこのようにしています。

これまで、A5:SQL Mk-2でテーブルエディタやSQLエディタの結果セットを編集したとき、1行ごと編集内容をサーバーに反映していました。

ただ、できれば複数行をローカルで編集して、一括でサーバーに反映したいという要望はそれなりにあったようです。このため、Version 2.15.0 beta 1でそのようなモードを付けてみました。ただし、デフォルトでは従来通りの動作で、オプションダイアログから「結果セットグリッド」タブで、「1行ごと編集をサーバーへ反映せず、複数行の編集をまとめてサーバーへ反映する」のチェックをオンにする必要があります。

この状態で編集を行うと、以下のように「サーバーへ反映」ボタンが出現します。(通常は非表示)



メニューにも「サーバーへ適用」と「ローカルの編集を破棄」が出現します。「サーバーへ適用」はCtrl+Sにショートカットを割り当てています。(SQLエディタではShift+Ctrl+S)

なお、編集した(サーバーに未反映の)項目は左上に赤の三角形を表示するようにしてみました。しかし、編集した項目には赤三角が付けられるのですが、なぜか新規登録した項目には赤三角が表示されませんでした。何とかしたいのですが難しいかもしれません。

なお、複数行の編集をまとめてサーバーへ反映するモードでエラーが起こった際は、「どの行がエラーを起こしたか」がエラーとして報告されません。ちょっと動作が微妙かなあとも思います。

2019/03/30
から 松原正和
4件のコメント

A5:SQL Mk-2 Vector版(ZIPファイル版)とMicrosoft Store版の使い分け

A5:SQL Mk-2 Version 2.14.1から従来のVectorで配布しているZIPファイル版のパッケージに加え、Microsoft Storeから直接インストールできるパッケージを用意しました。ここではその機能差と使い分けを書いてみたいと思います。

ZIPファイル版に対するMicrosoft Store版の機能差

  • ポータブルモードが利用不可
  • インストールフォルダにDMonkeyスクリプトを配置して機能拡張できない
  • 現在のところ、x64版のみの提供
  • Windows 10のみ
  • アップデートが簡単(自動的に更新されるはず…今後)
  • パッケージは署名され、実行ファイルは簡単には書き換えられない。
  • アンインストールが簡単(スタートメニューからA5:SQL Mk-2のアイコンを右クリックして「アンインストール」を選択)

これらの多くはMicrosoft Storeの制約・特性によるものです。Microsoft StoreアプリはインストールフォルダはC:\program files\WindowsApps配下等に制限され、インストールフォルダの書き込みは禁止されます。

ストアアプリは自動的に更新されるというのも注意すべきポイントです。

あとは、機能差ではないですが、リリース時の審査がMicrosoft Storeは遅くとも3営業日以内(早ければ数時間)なのに対し、Vectorは最近の傾向として2週間以上かかるようです。

これらのことからVector のZIPファイル版とMicrosoft Store版は次のような使い分けが必要です。

Vector ZIPファイル版を使うべきケース

  • ポータブルモードを使いたい
  • DMonkeyスクリプトを使い込んでいる
  • x86版が必要な場合 (32bit ODBCドライバを使うときなど)
  • Windows 10ではない
  • 不用意に更新されたくない(プロジェクトの期間中は同じバージョンを使いたい等)
  • 一度ダウンロードしてZIPファイルを会社のファイルサーバーなどで共有したい

Microsoft Store版を使うべきケース

  • 常に最新版を使いたい
  • 早く更新版を入手したい
  • セキュリティの厳しい現場での導入(Microsoft Storeが許可されていれば)
  • とりあえず試してみたい(気に入らなかったら手っ取り早く消したい)

これを参考にしてご自身の要件にあった方からインストールしていただければと思います。

2019/01/14
から 松原正和
0件のコメント

A5:SQL Mk-2のちょっとイイところ…ソースコード中から文字列リテラルを抜き出して貼り付け

アプリケーションを開発していて、SQLをプログラム中から実行する方法はいろいろありますが、プログラム中で文字列としてSQLを扱うことはよくあります。

こんな時、A5:SQL Mk-2ではSQLを含むプログラムのソースコードの中から文字列リテラルを抜き出してSQLエディタに貼り付けることができます。

やり方は以下の通りです。

・最初にプログラムのSQL(の文字列リテラル)を含む部分をざっくりコピーします。

・次にA5:SQL Mk-2のSQLエディタで、右クリックメニューから[コードストリッパー]の目的の言語を選択して貼り付けします。

・貼り付けを行うと、以下のようにコピーしたテキスト中から文字列リテラル部分が抜き出されて貼り付けされます。

これでプログラム中に記述されているSQLを手軽に抜き出し、テストすることができます。

ちなみに、コードストリッパーとはこちらから取った名前です。自分はコードストリッパーと覚えていたのですが、本当はワイヤーストリッパーというらしいです。

2019/01/14
から 松原正和
0件のコメント

A5:SQL Mk-2のダークモードとか

Windows 10 October 2018 Updateではエクスプローラにダークモードが追加されました。

まだアプリケーションは個別にダークモードに対応しなければいけませんが、A5:SQL Mk-2はテーマ機能で一応これに対応します。

オプションダイアログから「テーマ」機能を使うと様々な見た目に変更することができますが、個人的には「Carbon」あたりが、Windows 10のダークモードと見た目の親和性が高いと思います。ただ、「Windows」以外のテーマを有効にすると、ちょっとUIが重めになる気がするのでなんだか微妙だなとも思っています。

ちなみに、このテーマ機能は開発環境であるDelphiの持つ機能で、簡単にテーマ機能をアプリケーションに組み込むことができます。

ただ、個別のアプリケーションごとにダークモードに対応しなければいけない現状はあまりよろしくないですよね。白いUIのアプリケーションと黒いUIのアプリケーションを切り替えると目がチカチカしてしまいます。目に優しいはずのダークモードがこれではいけません。まあ、ブラウザとかは背景が白二しか使用がないですし、印刷前提のアプリケーションも基本白にせざるおえないですよね。

ところでWindows 7あたりまでは「Windows クラシック」に切り替えて色設定をカスタマイズすることで、割と簡単にダークモードっぽいことが全アプリケーションで有効になっていたのですが、このコードはWindows 10では残っていないのですかね。これまでずっとウインドウ背景は白とは限らず、文字の色は黒とは限らない…と気を付けながら開発してきたのですが…。

↓Windows XPで試してみた手製ダークテーマ(A5:SQL Mk-2のテーマ機能ではなく、Windowsの設定変更)