佐藤充男氏の作られたTSaNumEditをDelphi5で使用しています。とても素晴らしいものなのでBDS2006でも使用しようと思い、ソースにDelphiバージョン定義を追加してパッケージにインストールしました。
動作については問題がないようなのですが、TXPManifestを貼り付けてもXpスタイルになりません。
どのようにしたらXpスタイルになるか、アドバイスをいただけないでしょうか。
ソースはまだ公開されているようです。
http://www.threeweb.ad.jp/~satou/download.htm
TSaNumEdit = class(TCustomControl)
private
procedure WMNCPaint(var Msg: TWMNCPaint); message WM_NCPAINT;
// 以下略
end;
uses
Themes, UxTheme; // ←追加
procedure TSaNumEdit.WMNCPaint(var Msg: TWMNCPaint);
var
R: TRect;
ExStyle: Integer;
TempRgn: HRGN;
BorderWidth,
BorderHeight: Integer;
begin
if UxTheme.UseThemes then
begin
ExStyle := GetWindowLong(Handle, GWL_EXSTYLE);
if (ExStyle and WS_EX_CLIENTEDGE) <> 0 then
begin
GetWindowRect(Handle, R);
BorderWidth := GetSystemMetrics(SM_CXEDGE);
BorderHeight := GetSystemMetrics(SM_CYEDGE);
InflateRect(R, -BorderWidth, -BorderHeight);
TempRgn := CreateRectRgnIndirect(R);
if Msg.Rgn <> 1 then
CombineRgn(TempRgn, Msg.Rgn, TempRgn, RGN_AND);
DefWindowProc(Handle, Msg.Msg, Integer(TempRgn), 0);
DeleteObject(TempRgn);
end
else
DefaultHandler(Msg);
ThemeServices.PaintBorder(Self, False);
end
else
DefaultHandler(Msg);
end;
これでテーマ対応になるはず。
XPManifest がなくてもテーマ対応になっちゃいますが…
細かいところは適当に修正してやってください。
(これで正しいのかは知らないけど)
テーマ対応すべきかどうかは、こちらで・・・
ビジュアルスタイルが有効かどうか
https://www.petitmonte.com/bbs/answers?question_id=2789
風来坊さん
ありがとうございました。おっしゃる通りになりました。
コードまで記述いただき感謝します。
ん?さん
なるほど。これを参照して自分なりに工夫してみます。
本屋に行ってもDephiに関する書籍は少なく、この掲示板がとても心強く思われます。ありがとうございました。
ツイート | ![]() |