<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      軟件界面中菜單的美化

      [摘要]在網上有很多文章都提到怎樣在菜單中加入背景圖片,可是都沒有一個完整的回答,也沒有一個比較完整的例子。當然csdn曾經有一個高人說過這個問題,而且在程序員大本營2000版中也有收藏。我參考了一些方法和...
      在網上有很多文章都提到怎樣在菜單中加入背景圖片,可是都沒有一個完整的回答,也沒有一個比較完整的例子。當然csdn曾經有一個高人說過這個問題,而且在程序員大本營2000版中也有收藏。我參考了一些方法和技巧,當然包括國外的了,寫下了如下的代碼,希望能夠滿足大家的要求,不過不是很完善,如果有哪位大俠修改過,不妨也將修改過的代碼貼出來,大家共享!為了在menu控件中加入背景圖片,沒有直接的方法,都的靠自己動手畫,因為menu控件沒有canvas屬性,所以只能自己動手了!這個東西我也是菜鳥一只,說不出什么高深的東西,如果有什么問題可以發信給我,我們共同探討:cqwty@sina.com,源代碼如下:

      unit FMain;

      interface

      uses
        Windows,  Graphics,  Forms,  Menus,  Classes;

      type
        TfrmMain = class(TForm)
          mnuPopup: TPopupMenu;
          MainMenu1: TMainMenu;
          sdfsdf1: TMenuItem;
          sdfsdf2: TMenuItem;
          dfgdfg1: TMenuItem;
          dfgdfg2: TMenuItem;
          N1: TMenuItem;
          werwer1: TMenuItem;

          procedure DrawMenu(Sender: TObject; ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState);
          procedure MeasureMenu(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer);
          procedure FormCreate(Sender: TObject);
          procedure FormClose(Sender: TObject; var Action: TCloseAction);
        end;

      var
        frmMain: TfrmMain;
        bmp1:tbitmap;
      implementation

      {$R *.DFM}

      procedure TfrmMain.DrawMenu(Sender: TObject; ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState);
      var
        cTemp:  TCanvas;
        sText:  String;
        mWnd:   HWND;
        rMenu:  TRect;

      begin

        ACanvas.BrushCopy(ARect, bmp1, ARect, clBlack);
        ACanvas.Brush.Style := bsclear;
        sText := TMenuItem(Sender).Caption;
        acanvas.Font.Color:=clred;
        with ACanvas do begin
            if odSelected in State then begin
            pen.Style:=psInsideFrame;
            Brush.Color := RGB(110, 131, 184);
            Pen.Color   := RGB(47, 60, 93);
            Rectangle(ARect);
            end;



          if sText = '-' then begin
            // Draw line
            ACanvas.Pen.Color := RGB(0, 0, 0);
            MoveTo(ARect.Left, ARect.Top + ((ARect.Bottom - ARect.Top) div 2));
            LineTo(ARect.Right, ARect.Top + ((ARect.Bottom - ARect.Top) div 2));
          end else begin
            // Draw text
            Inc(ARect.Left, 12);
            DrawText(Handle, PChar(sText), Length(sText), ARect, DT_LEFT or DT_VCENTER or DT_SINGLELINE);
          end;
        end;


        // 畫邊框的,效果是平面的
        mWnd := WindowFromDC(ACanvas.Handle);

        if mWnd <> Self.Handle then begin
          cTemp := TCanvas.Create();
          cTemp.Handle := GetDC(0);

          Windows.GetWindowRect(mWnd, rMenu);

          cTemp.Brush.Color := RGB(120, 120, 120);
          cTemp.FrameRect(rMenu);

          InflateRect(rMenu, -1, -1);
          cTemp.Brush.Color := RGB(240, 240, 240);
          cTemp.FrameRect(rMenu);

          InflateRect(rMenu, -1, -1);
          cTemp.FrameRect(rMenu);

          ReleaseDC(0, cTemp.Handle);
          cTemp.Free();

        end;

      end;

      procedure TfrmMain.MeasureMenu(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer);
      begin
        Inc(Width,50);//調整菜單的寬度

        inc(height,15);//調整每一個item的高度,這一句可以不要,使用默認值
      end;

      procedure TfrmMain.FormCreate(Sender: TObject);
      begin
      bmp1:=tbitmap.Create;
      bmp1.loadfromfile('e:\aaa.bmp');
      end;

      procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
      begin
      bmp1.Free;
      end;

      end.


      日韩精品一区二区三区高清