TSaNumEditをBDS2006で使用したい

解決


久慈  2007-03-25 04:47:30  No: 25500

佐藤充男氏の作られたTSaNumEditをDelphi5で使用しています。とても素晴らしいものなのでBDS2006でも使用しようと思い、ソースにDelphiバージョン定義を追加してパッケージにインストールしました。
動作については問題がないようなのですが、TXPManifestを貼り付けてもXpスタイルになりません。
どのようにしたらXpスタイルになるか、アドバイスをいただけないでしょうか。
ソースはまだ公開されているようです。
http://www.threeweb.ad.jp/~satou/download.htm


風来坊  2007-03-25 09:10:54  No: 25501

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 がなくてもテーマ対応になっちゃいますが…
細かいところは適当に修正してやってください。
(これで正しいのかは知らないけど)


ん?  2007-03-26 09:50:36  No: 25502

テーマ対応すべきかどうかは、こちらで・・・

ビジュアルスタイルが有効かどうか
https://www.petitmonte.com/bbs/answers?question_id=2789


久慈  2007-03-26 20:47:50  No: 25503

風来坊さん
ありがとうございました。おっしゃる通りになりました。
コードまで記述いただき感謝します。
ん?さん
なるほど。これを参照して自分なりに工夫してみます。
本屋に行ってもDephiに関する書籍は少なく、この掲示板がとても心強く思われます。ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加