2015年10月23日金曜日

エンバカデロ買収【また・・・?】

またか・・・

Delphiユーザーならこう思ったんじゃないでしょうか。

エンバカデロが買収されるというニュースが
飛び込んできました。

相手は独立系ツールベンダーのIDERA(アイデラ)という
会社らしいですが、ネット上の噂を見るとDelphiの行く末が
ちょっと心配な感じです。

それはともかく、これで何回目なんでしょうか。。

パッと思いつくだけでも
Borland、CodeCear、Embarcadero、、
少なくとも4回目です。

別に会社が変わっても何も困りませんが、
バージョンアップのごとく、何度も変わるのも
なんだかなぁって感じですね。


2015年10月19日月曜日

SQL ServerのNULLと空白

SQL ServerではOracleとは違って文字列型の空白とNULLを厳密に区別するので
注意が必要です。

って、何を今更って感じですよね。

しかしながらDBとアプリケーションの設計段階で
文字列型のNULLと空白の扱いについてきっちり決め事を作っておかないと、
あとになって苦労するのも事実…。

値が無い場合、NULLにするのか空白の文字列にするのか
(空白の文字列は厳密に言うと値が無いわけではありませんが)

個人的には(クライアントアプリの開発者としては)、
文字列型項目は必ずnvarcharでNOT NULL制約をかけておいて、
なにかしら値をいれておくほうが扱いやすいと感じています。
また、最初からNULLを許容しなければ開発でぶれることがないですよね。

デメリットとしては以下のようなことがあります。
・SQLで文字列型項目に対してISNULL関数が使えなくなる。
・いくら全項目にNOT NULL制約をかけていても外部結合や
 集計関数でNULLがSELECTされることがある。

前者はCASE式で我慢できますが、
後者はNOT NULL制約かかってるから大丈夫~という頭で開発してると
はまりやすい罠なんではないでしょうか。
リレーショナルDBを扱うということはまさにNULLとの戦いといっても過言ではありません。
(ここまでくると文字列型だけに限定した話ではなくなってしまいました。)

どちらにせよ、最初に方針を決めて、決まりは厳密に守って開発する。
これに尽きます。


2015年10月7日水曜日

Delphi 10 Seattle

先日、社内でそういえば新しいの出てるな、
と言われ、気づきました、Delphi10 Seattleの存在に。

ていうか、”XE”って文字はどこ行ったの?
と思ったら、Windows10に合わせたようですね。

しかも、一つ前のバージョンはDelphiXE8なので、
Windowsと同じで”9”はすっ飛ばして10です。


さらに”Seattle”(シアトル)ってなんぞ?と思ったら・・・

なんと、マイクロソフト本社のある場所!!

なんで製品名に他社の本社がある地名が入るんですかねぇ、、



ちなみに今、Delphi7で開発してます。。

最新がDelphi10ということは3つ前?と思いそうですが、

なんと、15代前!

途中いろんな名称のバージョンが出て、
戻ってきた感じですが、いや~紛らわしいですね。

2015年5月18日月曜日

Delphi IDEの便利なショートカットキー

大阪 M・Tです。
ご無沙汰しております。

今回はIDEの便利なショートカットキーについて

私がDelphiでよく使うやつをあげていきます。
VisualStudioでも同じことができるか調べながら書いていきたいと思います。
作業効率アップすること間違いなし!?


・ブロック選択
 皆さん意外と知らないのではないかと思うのですが…どうでしょうか。
 知っていると結構捗ります。

 Delphi
  Alt + Shift + 方向キー

 VisualStudio
  Alt + マウスで選択


・コメントアウト
 Delphi
  Ctrl + /
  カーソル行の先頭に '//' を追加し1行下にカーソルを移動します。

 VisualStudio
  Ctrl + K を入力し、
  ステータスバーに「2番目のキーを待っています」と表示されたら、C

  選択範囲を一括コメントアウトしてくれるみたいです。
  ちょっと覚えにくいですね。


・飛んできた元の場所に戻る
 メソッドの定義に飛んできたときに元の場所に戻ります。

 Delphi
  Alt + 左キー

 VisualStudio
  Shift+F12


・キー操作を記録し実行

 Delphi
  Ctrl + Shirt + R で記録開始、記録終了
  Ctrl + Shirt + P で実行

 VisualStudio
  マクロでできるみたいです。もうちょっとお手軽な方法があればいいですね。




よく使うのはこんなもんでしょうか。
すでにご存知だったらすいません。

では、また。

2015年5月8日金曜日

エクセルの印刷プレビュー(全画面表示)

今のバージョンのエクセル(Excel2010)の印刷プレビューだと、
表示領域が狭いため、使いづらいな~と常々思っていたのだけど、、

Execl2010でも旧バージョンの大きく表示される印刷プレビューが
使える事を最近知った。

クイックアクセスツールバーのユーザー設定から「その他のコマンド」で
Excelのオプション画面を開き、
「リボンにないコマンド」から「印刷プレビュー(全画面表示)」を追加するだけ。

これで、クイックアクセスツールバーから
「印刷プレビュー(全画面表示)」が可能に。


(オプション画面から追加)


(クイックアクセスツールバーにアイコンが追加される)


(全画面の印刷プレビューが表示される)


















これは便利!!!
これを見つけてからほぼこっちしか使ってないです。


Excel2013でも同じっぽいですが、
なんで、これが標準にならないか不思議です。

みんなあまり気にしてないんでしょうか?

2015年5月1日金曜日

ウィンドウをディスプレイ左半分に表示するショートカット

ウィンドウの最大化のショートカットキーってなんだったっけ?
と思い調べてたら、
ウィンドウをディスプレイの左半分表示、つまり縦最大化した上で左寄せ(もしくは右寄せ)するショートカットキーが載ってた。

昔、誰かがそういうことが出来たはず~と言っていて、
そのときは調べなかったが、「Windowsキー」+「←キー(もしくは→キー)」だけで出来たとは。

これを使えば、簡単にウィンドウを左右に並べて表示できるし、
しょっちゅう使うわけじゃないだろうけど、知ってたちょっと便利かも?



ちなみに最大化するショートカットキーな「Windowsキー」+「↑キー」でした。

2015年4月17日金曜日

DataGridViewのチェックボックス列を編集不可のグレー表示

.NetのDataGridViewの行をReadOnlyにするとチェックボックス列も編集不可になるけど、
見た目では判らない。

見た目で判るように灰色表示できないか探したところ
以下の方法に行き着いた。

はじめ、ControlPaint.DrawCheckBoxを使ってて
チェック無しはInactiveで出来るけど、チェックありが出来ない!

と困ってたのだが、
ControlPaint.DrawMixedCheckBoxに変えたらあっさり出来た。


ControlPaint.DrawCheckBoxで両方出来るように
しといてくれればいいのに。。


Private Sub dgv_CellPainting(sender As System.Object, 
                             e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) 
                             Handles dgv.CellPainting
    Dim selected As Boolean

    If e.RowIndex >= 0 and e.ColumnIndex >= 0 Then

        'チェックボックス列であれば
        If TypeOf dgv.Columns(e.ColumnIndex) Is DataGridViewCheckBoxColumn Then

            '変更不可行であれば
            If dgv.Rows(e.RowIndex).ReadOnly Then

                selected = CBool(e.State And DataGridViewElementStates.Selected)

                '描画する領域
                e.PaintBackground(e.CellBounds, selected)
                Dim rect As Rectangle = e.CellBounds
                rect.Width = 16
                rect.Height = 16
                rect.Offset((e.CellBounds.Width - 16) \ 2, rect.Height \ 2 - 8)

                '状態によって、チェックボックスを描画する
                If dgv.Rows(e.RowIndex).Cells("FLG").Value.ToString = "1" Then
                    ControlPaint.DrawMixedCheckBox(e.Graphics, rect, ButtonState.Checked)
                Else
                    ControlPaint.DrawMixedCheckBox(e.Graphics, rect, ButtonState.Inactive)
                End If

                e.Handled = True
            End If
        End If
    End If

End Sub