ウィンドウの「閉じる」ボタンの×マークの出し方

解決


まこと  2012-05-02 18:05:30  No: 42076

いつもお世話になります。1点質問させてください。
  今、いくつかのペインに分かれているウィンドウを作成しています。
各ペインは、表示、非表示の切り替えを可能にしたいため、フォームの
右上にあるのとまったく同じ形の「×」マークを表示させたいと考えました。
そのため、次のようにしました。

・SpeedButtonを1つ貼り付ける。
・Font.Nameを「Marlett」に設定。
・Font.Charsetを「SYMBOL_CHARSET」に設定。
・後はIMEパッドを使い、「×」マークを選択してCaptionを入力。

しかし、ほかのウィンドウのマークと比べると、なんだか太く見えて
違和感があります。調べた限りではこの設定方法で問題ないと思えたのですが…

ウィンドウの「閉じる」ボタンの×マークは別の出し方をしているのでしょうか。
ご存知の方がおられましたら、お教えくだされば幸いです。


Mr.XRAY  URL  2012-05-02 20:50:21  No: 42077

こんにちは,Mr.XRAYです.

ペインの実装をどうしているかは別にして,
あくまでも,閉じるボタンのことだけで言うと,

閉じるボタンの×,これは,「別の出し方」というより,文字ではなく画像ですね.
以下のような画像なので,切り取って使用するという手もありますが.
http://mrxray.on.coocan.jp/Others/FromCloseButtonImage.htm

テーマが変わると,

>しかし、ほかのウィンドウのマークと比べると、

ということになってしまいそうですね.


まこと  2012-05-02 22:05:57  No: 42078

ご回答、どうもありがとうございます。
もしかして、わざわざ画像をアップしてくださったのでしょうか?
そうだとしたら、お手間をかけてしまって恐縮です。いずれにせよ、どうもありがとうございます。

それで、以前調べていたとき、このようなページを見つけていました。
https://www-06.ibm.com/jp/domino04/pc/support/Sylphd06.nsf/jtechinfo/SYJ0-0299824

たまにフォントのファイルが壊れて文字化けが起きる=ボタンの記号の正体は
フォントだというのをここで確信していたため、上のようなことをやろうと
思っていました。これ、もしかしてDelphiに限らず、最近のWindowsではすべて画像を使用しているのでしょうか。


au  2012-05-02 22:35:06  No: 42079

かなり適当ですが、formにTImageとTButtonを貼り付けて試して下さい。
コードはXE2で書いてますのでそれ以前だとコンパイルが通らないかと思います。

とりあえずNormal状態で書いてますが他にもHot状態やPush状態、無効状態があるようです。(twCloseButtonNormal, twCloseButtonHot, twCloseButtonPushed, twCloseButtonDisabled)

procedure TForm1.Button2Click(Sender: TObject);
var
  Bmp: TBitmap;
  Detail: TThemedElementDetails;
  OuterRect: TRect;
  ButtonRect :Trect;
begin
  if StyleServices.Available then
  begin
    Bmp := TBitmap.Create;
    Bmp.Width := Image1.Width;
    Bmp.Height := Image1.Height;

    OuterRect := Rect(0, 0, 32, 32);
    Detail := StyleServices.GetElementDetails(twCloseButtonNormal);
    if Not StyleServices.GetElementContentRect(Bmp.Canvas.Handle, Detail, OuterRect, ButtonRect) then
      ButtonRect := Rect(0 , 0, 0, 0);
    StyleServices.DrawElement(Bmp.Canvas.Handle, Detail, ButtonRect);

    Image1.Picture.Assign(Bmp);
    FreeAndNil(Bmp);
  end;
end;


Mr.XRAY  2012-05-02 23:28:13  No: 42080

>それで、以前調べていたとき、このようなページを見つけていました。
>https://www-06.ibm.com/jp/domino04/pc/support/Sylphd06.nsf/jtechinfo/SYJ0-0299824

なるほど.
これは,おそらく,このボタン類はのイメージは画像ですが,何らかの原因で,文字が表示されて
しまったのではないかと思われます.
このボタン類は,Delphiで言えば,TBitBtnとかTSpeedButtonではないかと思いますね.

auさんのレスがありますね.これなら,テーマが変更になっても大丈夫ですね.
Delphi XE2でないと動作しませんが,
先程の記事に追加しておきました.auさんには,事後承諾ということで.ご容赦を.


まこと  2012-05-14 04:56:59  No: 42081

ご回答、どうもありがとうございます。
あれから少し試していたのですが、申し訳ありませんが、当方の環境は
Delphi6でして、せっかくコードまでご提供いただいたのですが、
今回は使えませんでした。
それほど遠くない未来、乗り換えは検討していますが、とりあえず
それまでは、SpeedButtonに「×」を太字で表示させてそれらしく見せる
ことにしました。

せっかくよいアイデアをご提示いただいたのに、活用できなくて申し訳
ありません。開発環境を乗り換えた後、確認の上使わせていただこうと
思います。今回は、いったん解決とさせていただきたいと思います。

お二人とも、つまらない質問であったにも関わらず、丁寧なご回答まで
作成していただき、本当にありがとうございました。深く感謝いたします。


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

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






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