6
3

Delphi UCL の紹介

Last updated at Posted at 2021-12-25

はじめに

Delphi UCL (旧 UniversalCL) は Delphi 用 UWP コントロール VCL です。
image.png
モダンな見た目ですが、描画は高速です。

Delphi UCL

Delphi UCL は GitHub で公開されています。

インストール

  1. リポジトリをローカルに保存します。
  2. DelphiUCL.groupproj を IDE で開きます。
  3. DelphiUCLPackage.bpl を右クリックし、[インストール] を選びます。
  4. DelphiUCL\Source をライブラリパスに追加します。

使い方

既存の VCL と使い方はほぼ同じです。

Windows 11 でデモを実行する場合には、フォームの DoubleBuffered プロパティを False に変更してください。

おわりに

折角なので、Windows 11 における DoubleBuffered プロパティの問題点について。

1. 背景描画がおかしくなるコントロールがある

コンボボックス系の背景にゴミが描画される事があります 1
image.png
インターポーザークラスを使って置き換える事も可能ですが、TCustomComboBox から派生しているコンボボックスがあれば、そちらにも同様のインターポーザークラスを作成しなくてはなりません。

 TComboBox = class(Vcl.StdCtrls.TComboBox)
    procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBKGND;
  end;

...

procedure TComboBox.WMEraseBkgnd(var Message: TWmEraseBkgnd);
begin
  FillRect(Message.DC, ClientRect, Brush.Handle);
  inherited;
end;

See also:

2. ボタン透過の一貫性

Windows 11 のボタンは恐らく半透明です。このため、ボタンの下にコントロールがあるとそれが透けて描画されます。
image.png
それはいいのですが、親コントロールの DoubleBuffered が True の場合のみ、TButton の背景が透けなくなります。親コントロールの DoubleBuffered が False の場合には、TButton の DoubleBuffered を True にしても背景は透けたままです。つまり、DoubleBuffered の状態によってボタン透過の一貫性がない事になります。

解決方法

とりあえずの解決方法は DoubleBuffered プロパティを False にする事です。「ボタンの下にあるコントロールを透過させたくない」というのは、

  • ボタンの下に不要な物を置かない
  • パネルのようなコンテナの上に配置する

という対処方法しかないと思います。いずれにせよ、ソースコードがあればですが。

この問題、別に最新版の Delphi だけで起こる現象ではなく、古い Delphi でも発生するのです。実行形式ファイルしか存在しない Delphi / C++Builder アプリケーションを Windows 11 で動作させるつもりなのであれば、ゴミ描画とボタン透過のチェックを入念に行ってください。

フォームの DoubleBuffered プロパティは False がデフォルトなので、DoubleBuffered プロパティをフォームだけでコントロールしているのであれば、リソースエディタでフォームを書き換えて回避する事ができます 2
image.png

この問題は 11.1 Alexandria で解決されたようです。

See also:

  1. Delphi UCL をいじっていて DoubleBuffered プロパティの問題に気付きました

  2. 個別に DoubleBuffered プロパティをいじってあると修正が大変だと思います。

6
3
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
6
3