zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    接收一次性广播,开启服务永久监听
    iOS开发之主题皮肤
    Android软件版本更新
    android服务Service(上)- IntentService
    Android之条码扫描二维码扫描
    Android之Service与IntentService的比较
    强烈推荐visual c++ 2012入门经典适合初学者入门
    转载文章:Windows Azure 七月份更新:SQL 数据库、流量管理器、自动伸缩、虚拟机
    CSV 客座文章系列:KGroup 通过 Windows Azure 将 Qoob 内容管理发布到云中
    Windows Azure 网站:应用程序字符串和连接字符串的工作原理
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/562864.html
Copyright © 2011-2022 走看看