お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"95/NT4のシステムメニューに小ざかしいBitmapを"



はい。 かとちんです。\(^0^)/

Win98 や Win2000 ではシステムメニューに小ざかしいBitmap(元に戻す、最小化、最大
化、閉じるの4つ)が付いてますね。にゃろーと思って、95/NT4 のシステムメニューで
も実現してみました。こんなこと凝る人はいないと思いますが、一応そういえ
ばできたなーってサンプルです。




// これも汎用関数かな。
function Is95orNT4: Boolean;
var
  VI: TOSVersionInfo;
begin
  Result := False;

  VI.dwOSVersionInfoSize := SizeOf(VI);
  if GetVersionEx(VI) then
  begin
    with VI do
    begin
      case dwPlatformId of
      VER_PLATFORM_WIN32_NT:
        Result := (dwMajorVersion = 4);
      VER_PLATFORM_WIN32_WINDOWS:
        Result := (dwMajorVersion = 4) and
                  (dwMinorVersion < 10);
      end;
    end;
  end
end;

procedure TForm1.FormCreate(Sender: TObject);
const
  ButtonStyle: array[0..3] of Integer = (
    DFCS_CAPTIONRESTORE, DFCS_CAPTIONMIN,
    DFCS_CAPTIONMAX, DFCS_CAPTIONCLOSE
  );
var
  Bmp: TBitmap;
  I: Integer;
  R: TRect;
  H: THandle;
  procedure SetMenuBmp(Index, GIndex: Integer);
  begin
    SetMenuItemBitmaps(H, Index, MF_BYPOSITION,
      FBmps[GIndex].Handle, FBmps[GIndex].Handle);
  end;
begin
  if (biSystemMenu in BorderIcons) and Is95orNT4 then
  begin
    for I := 0 to 3 do
    begin
      Bmp := TBitmap.Create;
      R := Rect(0, 0, 10, 10);
      Bmp.Width := R.Right;
      Bmp.Height := R.Bottom;
      with Bmp.Canvas do
      begin
        Brush.Color := clMenu;
        FillRect(R);
        InflateRect(R, 2, 2); // ボタン枠枠を除外する(ずらす)
        DrawFrameControl(Handle, R, DFC_CAPTION,
          ButtonStyle[I] or DFCS_MONO);
        // ちょっと右にずらす
        Bmp.Width := 12;
        CopyRect(Rect(2, 0, 12, 10),
          Bmp.Canvas, Rect(0, 0, 10, 10));
        FillRect(Rect(0, 0, 2, 10));
      end;
      Bmp.PixelFormat := pf1bit;
      FBmps[I] := Bmp;
    end;
    H := GetSystemMenu(Handle, False);
    SetMenuBmp(0, 0);
    SetMenuBmp(3, 1);
    SetMenuBmp(4, 2);
    SetMenuBmp(6, 3);
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to 3 do FBmps[I].Free;
end;

▲●    2000/10/15 21:33 JDX06162(とんちんかんちんかとちん)
 ■     Inprise Delphi ... The Great Development Kit
uses D2Desktop, D3CSS, D4CSS, D5ENT;
 


- FDELPHI  MES(16):玉石混淆みんなで作るSample蔵【見本蓄積】 00/10/20 -

Original document by かとちん        氏 ID:(JDX06162)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum