AsuYuHomepage
トップページ サイトの説明 子供の成長記録 JM BAR Delphi リンク集
Home>>プログラミング>>Tips&Tricks>>テキストやアイコンを淡色(灰色)描画する
Delphi Tips
Delphi Win32API
ダウンロード

Delphi Tips & Tricks

テキストやアイコンを淡色(灰色)描画する

 使用不可を表す灰色状態の描画をする例です。
テキストの場合は このほかにもGrayString関数等ありますが、テキストとイメージの両方とも灰色描画が簡単にできる便利な関数なので紹介します。
 コントロールのオーナードローなどで使う機会があるかも知れません。
//DrawStateから呼び出されるコールバック関数
function DrawStateProc(DC: HDC; lparam: LPARAM; wparam: WPARAM;
                       cx, cy: integer):LongBool; stdcall;
begin
  DrawIconEx(DC, 20, 60, HICON(lparam), 96, 96, 0, 0, DI_NORMAL);
  Result :=True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  S: string;
begin
  //灰色テキストを描画
  S :='Delphi Tips & Tricks';
  DrawState(Canvas.Handle, 0, nil, Integer(PChar(S)), Length(S), 60, 30,
            Canvas.TextWidth(S), Canvas.TextHeight(S), DST_TEXT or DSS_DISABLED);
  //灰色アイコンを描画
  DrawState(Canvas.Handle, 0, nil, Application.Icon.Handle, 0, 20, 20,
            0, 0, DST_ICON or DSS_DISABLED);
  //コールバック関数を使ってアイコンを任意のサイズで描画
  //ここでのCx, Cyの指定はデバイスコンテキストの描画領域のサイズらしい
  DrawState(Canvas.Handle, 0, @DrawStateProc, Application.Icon.Handle, 0, 0, 0,
            Width, Height, DST_COMPLEX or DSS_DISABLED);
end;

 Flagに DSS_DISABLEDを指定すると使用不可状態の描画になります。
 コールバック関数に渡したい場合は、Flagに DST_COMPLEX を指定し、第3引数にコールバック関数のアドレスを指定します。この関数では上記以外にも、

 DSS_MONO 第2引数で指定されたブラシを使って描画
 DSS_UNION イメージをディザリングして描画

などの描画方法が選択できます。