0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Delphi の色選択がそろそろ限界だったので、実用的なカラーピッカーを作った

Posted at

Delphi の色選択がそろそろ限界だったので、実用的なカラーピッカーを作った

Delphi(VCL)には標準で TColorDialog が用意されていますが、

  • UI がかなり古い
  • RGB / HSV を直感的に操作できない
  • スポイト機能が弱い(実用上つらい)
  • フレームとして埋め込めない

といった点に、以前から不満を感じていました。

そこで今回、
「今どき普通に使える色選択 UI」 を目的として
VCL 向けのカラーピッカー一式を自作しました。


配布場所

ソースコードはこちらです。

👉 https://github.com/vramwiz/ColorPicker

VCL 標準コンポーネントのみで構成しており、
外部ライブラリ等は不要です。


何ができるのか

このカラーピッカーは、以下の特徴を持っています。
image.png

  • RGB 数値入力
  • Hue(色相)バー
  • Saturation / Value(彩度・明度)エリア
  • 画面スポイト機能
  • すべての操作が相互に同期

さらに、

  • モーダルダイアログとして使える
  • フレームとしてフォームに埋め込める
  • 各パーツを単体コンポーネントとして使える

という点を重視して設計しています。


なぜ Delphi 標準の色選択では足りないのか

Delphi の TColorDialog は、

  • 基本的に「色一覧から選ぶ」前提
  • HSV の概念が表に出てこない
  • 数値入力と視覚操作の行き来がしづらい

という特徴があります。

実際のアプリ開発では、

  • 数値で微調整したい
  • Hue だけを素早く変えたい
  • 既存画面の色をスポイトで拾いたい

といったケースが多く、
標準ダイアログではどうしても物足りません。


スポイト機能について

本実装のスポイトは、少し変わった方式を採用しています。

  • 画面全体を一度キャプチャ
  • その画像を 最前面の疑似フルスクリーンフォームに表示
  • その上で色を取得

という方法です。

この方式の利点は、

  • 他アプリに入力を送らない
  • OS フックを使わない
  • モーダルダイアログ中でも安全に動作する

という点です。

操作は以下の通りです。

操作 動作
左クリック 色確定
右クリック キャンセル
ESC キャンセル
フォーム非アクティブ 即キャンセル

スポイト中は画面は静止画像になりますが、
「色を拾う」用途では十分実用的です。


ダイアログとして使う場合

もっとも簡単な使い方は、
モーダルダイアログとして利用する方法です。

uses ColorPickerDialog;

procedure TFormMain.Button1Click(Sender: TObject);
var
  Form : TFormColorPickerDialog;
begin
  Form := TFormColorPickerDialog.Create(nil);
  try
    Form.Color := Panel1.Color;
    if not Form.Execute then Exit;
    Panel1.Color := Form.Color;
  finally
    Form.Free;
  end;
end;

フレームとして埋め込む場合

内部では
TFrameColorPickerDialog
というフレームに UI をまとめています。

そのため、

  • 設定画面に常時表示したい
  • 独自レイアウトに組み込みたい

といった用途でも、そのまま流用できます。


各パーツを単体で使うことも可能

このカラーピッカーは、以下のコンポーネントに分かれています。

  • TColorPickerHueBar
  • TColorPickerSVArea
  • RGB 編集用フレーム
  • スポイト(TColorPickerPick

必要なものだけを取り出して使うこともできます。


設計方針

  • VCL の素直な使い方を優先
  • OS フック等の危険な仕組みは使わない
  • 拡張性よりも 分かりやすさと安定性 を重視

おわりに

Delphi は今でも十分強力な開発環境ですが、
標準 UI が時代に追いついていない部分も多くあります。

このカラーピッカーが、
UI 改善の一助になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?