喫茶XRAYトップページ

[スレッド全体
]

[5233] plExplorerFolderTreeにて(何回目だ? 苦笑)返信 削除
2011/9/12 (月) 00:39:02 Sara
Mr.XRAYさん こんばんわ。

Delphi Xe2で標準でスキンの変更ができるようになったので、
機能を取り入れてみたところ・・・plExplorerFolderTreeの
背景の色だけが変わらなくて浮いて見えます・・・(^^;

背景色を変更する方法はございますでしょうか?
(あと、Fontの色も・・・)


概ねXE2にも慣れてきたのですが、作成中のプロジェクトで挙動不審な
ものがいくつかあって、困っています・・・(^^;

例えば、PageControlに2ページ追加して、それぞれにActionToolBarを
置き、ActionManagerで作ったActionを、それぞれのページに配置して
PageControlのOnChangeイベントに何か命令文を書くと・・・
ActionToolBar上のボタンがページ切り替え時に正常に描画されない・・・

OnChangingイベントに同じ命令を書いても正常に描画されるのですが・・・

バグか?と思い、新規プロジェクトで同じように配置して実行すると、
正常に描画される・・・不思議だ・・・

作成中のプロジェクトに追加でPageControlを配置して同じように
しても、やはり、OnChangeイベントを書くと正常に描画されない・・・

ちなみにOnChangeに書いた命令文は Caption := 'Change'; だけ・・・

該当フォームだけ、新規に作り直したほうが良いかな・・・orz

[5245] Re:plExplorerFolderTreeの背景とFontの色返信 削除
2011/9/14 (水) 10:56:20 Mr.XRAY
▼ Saraさん。ゴメンなさい。今コードをみたら、

> 背景色を変更する方法はございますでしょうか?
> (あと、Fontの色も・・・)


未確認ですが、背景は、

function TplExplorerFolderTree.PrePaint(hdc: HDC; var prc: TRect;
  var plres: LRESULT): HRESULT;

のHDCに描画すれば出来るかも知れません。多分TRectが背景のRectじゃ
ないかと思います。Fontの色の方は、

function TplExplorerFolderTree.ItemPrePaint(hdc: HDC; var prc: TRect;
  var pnstccdItem: TNSTCCustomDraw; var pclrText, pclrTextBk: COLORREF;
  var plres: LRESULT): HRESULT;
var
  pShellItem      : IShellItem;
  pShellItemArray : IShellItemArray;
  pidl            : PItemIDList;
  pFullPath       : array [0..MAX_PATH - 1] of Char;
begin
  if (pnstccdItem.uItemState and CDIS_FOCUS) > 0 then begin
    pclrText := RGB(200, 0, 0);
    plres    := CDRF_NEWFONT;
  end;

ここでは、CDIS_FOCUSの時に色をRGBで設定していますから、それ以外のを
設定すれば可能かも知れません。
ダメだったらゴメンなさい。
うまくいくようでしたら、プロパティに追加しますか…

[5250] Re2:plExplorerFolderTreeの背景とFontの色返信 削除
2011/9/15 (木) 00:11:04 Mr.XRAY
確認してみました

> ここでは、CDIS_FOCUSの時に色をRGBで設定していますから、それ以外のを
> 設定すれば可能かも知れません。
> ダメだったらゴメンなさい。


とりあえず可能なようです。以下のコードでテストしました。
Windows 7 U64 + Delphi 2010

--------------- ItemPrePaintイベント -----------------------------
//  pclrTextBkが文字列の背景色の設定
//  選択中の文字列の背景色は常にシステム規定値らしい

function TplExplorerFolderTree.ItemPrePaint(hdc: HDC; var prc: TRect;
  var pnstccdItem: TNSTCCustomDraw; var pclrText, pclrTextBk: COLORREF;
  var plres: LRESULT): HRESULT;
var
  pShellItem      : IShellItem;
  pShellItemArray : IShellItemArray;
  pidl            : PItemIDList;
  pFullPath       : array [0..MAX_PATH - 1] of Char;
begin
  pclrTextBk := clYellow;  //この色を背景色と同じにする
  if (pnstccdItem.uItemState and CDIS_FOCUS) > 0 then begin
    pclrText   := clBlue;
    plres      := CDRF_NEWFONT;
  end else begin
    pclrText   := clRed;
  end;
 
  以下略

--------------- PrePaintイベント -----------------------------

function TplExplorerFolderTree.PrePaint(hdc: HDC; var prc: TRect;
  var plres: LRESULT): HRESULT;
var
  LogBrush :TLogBrush;
  hbr : HBRUSH;
begin
  LogBrush.lbStyle := BS_SOLID;
  LogBrush.lbColor := clYellow;  //これを文字例の背景色と同じにする
  LogBrush.lbHatch := 0;

  hbr := CreateBrushIndirect(LogBrush);
  FillRect(hdc, prc, hbr);
  SetBkColor(hdc, TRANSPARENT);  //これはいらなないかも知れない
  plres  := CDRF_NOTIFYITEMDRAW;
  Result := S_OK;
end;

図は上記コードの場合の結果です。



[▼次のスレッド]
INCM/CMT
Cyclamen v3.82