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

  • 相关阅读:
    [转]三维曲线投影到坐标轴
    [转]python matplotlib contour画等高线图
    [转]python (matplotlib)画三维图像
    excel挑选出每一行的最大值或最小值
    Origin 三种方法在图片中添加水平辅助线
    Origin画放大部分区域图片
    Origin画3DScatter图-第一节
    JFreechart绘制2D散点图
    Ctex入门指南笔记 -列表、表格、公式与图片
    Ctex安装与运行
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/562864.html
Copyright © 2011-2022 走看看