OfficeXP風メニュー

解決


超初心者  2004-05-07 00:20:00  No: 8820  IP: [192.*.*.*]

Delphi6 Personal  でメニューバーをOfficeXPのような、マウスが乗った部分に枠をつけて背景を変えるような方法ってありますでしょうか?
  もしあったらご教授下さい。宜しくお願いします

編集    削除
るるとん@K  2004-05-07 01:30:47  No: 8821  IP: [192.*.*.*]

HotImagesで枠付の画像を設定してはどうでしょう?

編集    削除
るるとん@K  2004-05-07 01:47:13  No: 8822  IP: [192.*.*.*]

ボタンのMouseDown時にツールバーのキャンバスにBoundsRectで取得した範囲内に描画することもできます

編集    削除
超初心者  2004-05-08 08:34:28  No: 8823  IP: [192.*.*.*]

るるとん@Kさん。返信ありがとうございます。
  
前者のHotImagesで枠付きの〜〜はとりあえずやり方が分かったのでやってみたのですが、どうしてもボタンの周りに枠が表示されるのではなく、内側に表示されてしまいます・・・。
  後者のは私には全く意味が分かりません。。。。

  それから、ツールバーでやったのですが、メニューバーはどうにかなりませんかね?

編集    削除
るるとん@K  2004-05-08 21:20:52  No: 8824  IP: [192.*.*.*]

これじゃ無理かなぁ
procedure TForm1.ToolBar1CustomDrawButton(Sender: TToolBar;
  Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
var
R:TRect;
begin
if (cdsHot in State) and not(cdsSelected in state) then
begin
R:=Button.BoundsRect;
Sender.Canvas.Pen.Color:=clBlue;
Sender.Canvas.Rectangle(R.Left,R.Top,R.Right,R.Bottom);
Sender.Canvas.Rectangle(R.Left+1,R.Top+1,R.Right-1,R.Bottom-1);
Sender.Images.Draw(Sender.Canvas,R.Left+3,R.Top+3,Button.ImageIndex);
DefaultDraw:=False;
end;
end;
メニューバーなら文字を描画しなければいけないので変更が必要

編集    削除
るるとん@K  2004-05-08 21:23:09  No: 8825  IP: [192.*.*.*]

↑OfficeXPみたことないので、適当な枠ですよ
ボタンの外側に表示するには、
>Sender.Canvas.Rectangle(R.Left+1,R.Top+1,R.Right-1,R.Bottom-1);
>Sender.Images.Draw(Sender.Canvas,R.Left+3,R.Top+3,Button.ImageIndex);
をずらして、BorderWidthを広げれば出来ると思います

編集    削除
超初心者  2004-05-09 11:41:58  No: 8826  IP: [192.*.*.*]

凄いです。感動です。
  ツールバーはソレっぽくなりました。
メニューバーもいろいろ考えてみようと思います。

どうもありがとうございました!!

編集    削除