• Delphi编程 How do I create an icon from a bitmap?


    Question and Answer Database

    FAQ2748D.txt   How do I create an icon from a bitmap?
    Category   :Windows API
    Platform    :All
    Product    :All 32 bit 

    Question:
    How do I create an icon from an bitmap?


    Answer:
    You must create two bitmaps, a mask bitmap (called the "AND"
    bitmap) and a image bitmap (called the XOR bitmap). You can pass the
    handles to the "AND" and "XOR"  bitmaps to the Windows API function
    CreateIconIndirect() and use the returned icon handle in your
    application.

    Example:

    procedure TForm1.Button1Click(Sender: TObject);
    var
      IconSizeX : integer;
      IconSizeY : integer;
      AndMask : TBitmap;
      XOrMask : TBitmap;
      IconInfo : TIconInfo;
      Icon : TIcon;
    begin
     {Get the icon size}
      IconSizeX := GetSystemMetrics(SM_CXICON);
      IconSizeY := GetSystemMetrics(SM_CYICON);

     {Create the "And" mask}
      AndMask := TBitmap.Create;
      AndMask.Monochrome := true;
      AndMask.Width := IconSizeX;
      AndMask.Height := IconSizeY;

     {Draw on the "And" mask}
      AndMask.Canvas.Brush.Color := clWhite;
      AndMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY));
      AndMask.Canvas.Brush.Color := clBlack;
      AndMask.Canvas.Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4);

     {Draw as a test}
      Form1.Canvas.Draw(IconSizeX * 2, IconSizeY, AndMask);

     {Create the "XOr" mask}
      XOrMask := TBitmap.Create;
      XOrMask.Width := IconSizeX;
      XOrMask.Height := IconSizeY;

     {Draw on the "XOr" mask}
      XOrMask.Canvas.Brush.Color := ClBlack;
      XOrMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY));
      XOrMask.Canvas.Pen.Color := clRed;
      XOrMask.Canvas.Brush.Color := clRed;
      XOrMask.Canvas.Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4);

     {Draw as a test}
      Form1.Canvas.Draw(IconSizeX * 4, IconSizeY, XOrMask);

     {Create a icon}
      Icon := TIcon.Create;
      IconInfo.fIcon := true;
      IconInfo.xHotspot := 0;
      IconInfo.yHotspot := 0;
      IconInfo.hbmMask := AndMask.Handle;
      IconInfo.hbmColor := XOrMask.Handle;
      Icon.Handle := CreateIconIndirect(IconInfo);

     {Destroy the temporary bitmaps}
      AndMask.Free;
      XOrMask.Free;

     {Draw as a test}
      Form1.Canvas.Draw(IconSizeX * 6, IconSizeY, Icon);

     {Assign the application icon}
      Application.Icon := Icon;

     {Force a repaint}
      InvalidateRect(Application.Handle, nil, true);

     {Free the icon}
      Icon.Free;
    end;

    7/16/98 4:31:28 PM

  • 相关阅读:
    VC.【转】采用_beginthread/_beginthreadex函数创建多线程
    Qt532.【转】Qt在pro中设置运行时库MT、MTd、MD、MDd,只适合VS版本的Qt
    Qt532界面.ZC测试
    Qt532.【转】Qt创建鼠标右键菜单
    VC.【转】窗口置于前台并激活的方法
    VS2010.STL::list的一个bug
    STL_map.VC6简单使用例子
    LeetCode题解-----Maximum Gap
    CEPH块设备创建及快照
    Ubuntu 14.04 部署 CEPH集群
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/562864.html
Copyright © 2020-2023  润新知