お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"[D3]TTreeView ItemTextColor 文字色変更"




{
IE3.X以降の新Comctl32.dllで色々な新しい機構が導入されていますが
Delphi 3のTTreeViewはあまり変わっていません。
新しく装備されたCUSTOMDRAWを使用してテキストの色を変えるサンプルです。
デザイン時色が変わりませんが実行させると変更が反映します。
一応コンポになっていますのでカット&ペーストでユニットを作成して下さい。
みぐ (VER04604)さんのComCtl32.pasを参考にしています。
}
unit SamplTreeView;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, 
  Dialogs, ComCtrls, Commctrl;

const
  // 全部要りませんがとりあえず (^^;
  NM_CUSTOMDRAW         =  (NM_FIRST-12);
  CDRF_DODEFAULT          = $00000000;
  CDRF_NEWFONT            = $00000002;
  CDRF_SKIPDEFAULT        = $00000004;
  CDRF_NOTIFYPOSTPAINT    = $00000010;
  CDRF_NOTIFYITEMDRAW     = $00000020;
  CDRF_NOTIFYPOSTERASE    = $00000040;
  CDRF_NOTIFYITEMERASE    = $00000080;
  CDDS_PREPAINT           = $00000001;
  CDDS_POSTPAINT          = $00000002;
  CDDS_PREERASE           = $00000003;
  CDDS_POSTERASE          = $00000004;
  CDDS_ITEM               = $00010000;
  CDDS_ITEMPREPAINT       = (CDDS_ITEM or CDDS_PREPAINT);
  CDDS_ITEMPOSTPAINT      = (CDDS_ITEM or CDDS_POSTPAINT);
  CDDS_ITEMPREERASE       = (CDDS_ITEM or CDDS_PREERASE);
  CDDS_ITEMPOSTERASE      = (CDDS_ITEM or CDDS_POSTERASE);

type
  PNMCustomDrawInfo = ^TNMCustomDrawInfo;
  TNMCustomDrawInfo = packed record
    hdr: TNMHDR;
    dwDrawStage: DWORD;
    hdc: HDC;
    rc: TRect;
    dwItemSpec: DWORD;
    lItemlParam: LPARAM;
  end;
  TNMCustomDraw = TNMCustomDrawInfo;

  TSamplTreeView = class(TTreeView)
  private
    FTextColor: TColor;
    procedure SetColor(Value: TColor);
    procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY;
  public
    constructor Create(AOwner: TComponent);
  published
    property TextColor: TColor read FTextColor write SetColor 
                                               default clWindowText;
  end;

procedure Register;

implementation

constructor TSamplTreeView.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FTextColor:= clWindowText;
end;

procedure TSamplTreeView.SetColor(Value: TColor);
begin
 if Value <> FTextColor then
   FTextColor:= Value;
end;

procedure TSamplTreeView.CNNotify(var Message: TWMNotify);
begin
  with Message.NMHdr^ do
    case code of
      NM_CUSTOMDRAW:
        with PNMCustomDrawInfo(Pointer(Message.NMHdr))^ do
            case dwDrawStage of
              CDDS_PREPAINT:
                Message.Result:= CDRF_NOTIFYITEMDRAW;
              CDDS_ITEMPREPAINT:
                SetTextColor(hdc, ColorToRGB(FTextColor));
            end;
    end;
  inherited;
end;

procedure Register;
begin
  RegisterComponents('Samples', [TSamplTreeView]);
end;

end.

でわ〜でわ〜
                                   by ヒシアマゾン
                                   BXC05221@niftyserve.or.jp
                                   ken_fu@mx4.meshnet.or.jp

Original document by ヒシアマゾン    氏 ID:(BXC05221)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum