Search code examples
delphibitmapdelphi-7mouse-cursor

Delphi. Inverted cursor color


I want to use large inverted cross cursor for my app. But my code make inverted background of cursor. Cursor still white.

var
  IconInfo: TIconInfo;
  AndMask, Bmp: TBitmap;
  w, h: Integer;
begin
  w := Screen.Width * 2;
  h := Screen.Height * 2;

  // Creation And Mask
  AndMask := TBitmap.Create;
  AndMask.Monochrome := True;
  AndMask.Height := h;
  AndMask.Width := w;

  // Draw on And Mask
  AndMask.Canvas.Brush.Color := clWhite;
  AndMask.Canvas.FillRect(AndMask.Canvas.ClipRect);

//  AndMask.Canvas.Pen.Color := clWhite;
  AndMask.Canvas.Pen.Width := 3;
  AndMask.Canvas.MoveTo(w div 2, 0);
  AndMask.Canvas.LineTo(w div 2, h);
  AndMask.Canvas.MoveTo(0, h div 2);
  AndMask.Canvas.LineTo(w, h div 2);

  {Create the "XOr" mask}
  Bmp := TBitmap.Create;
  Bmp.Width := w;
  Bmp.Height := h;
  {Draw on the "XOr" mask}
  Bmp.Canvas.Brush.Color := clWhite;
  Bmp.Canvas.FillRect(Rect(0, 0, w, h));

  IconInfo.fIcon := true;
  IconInfo.xHotspot := w div 2;
  IconInfo.yHotspot := h div 2;
  IconInfo.hbmMask := AndMask.Handle;
  IconInfo.hbmColor := Bmp.Handle;

  Screen.Cursors[1]:= CreateIconIndirect(IconInfo);
  Screen.Cursor:=1;
end;

How make background transparent and cursor inverted?


Solution

  • procedure TForm1.Button1Click(Sender: TObject);
    
    var
      IconInfo: TIconInfo;
      AndMask, Bmp: TBitmap;
      w, h: Integer;
    begin
      w := Screen.Width * 2;
      h := Screen.Height * 2;
    
      // Creation And Mask
      AndMask := TBitmap.Create;
     // AndMask.Monochrome := True;
      AndMask.Height := h;
      AndMask.Width := w;
    
      // Draw on And Mask
      AndMask.Canvas.Brush.Color := clWhite;
      AndMask.Canvas.FillRect(AndMask.Canvas.ClipRect);
    
      AndMask.Canvas.Pen.Color := clwhite;
      AndMask.Canvas.Pen.Width := 3;
      AndMask.Canvas.MoveTo(w div 2, 0);
      AndMask.Canvas.LineTo(w div 2, h);
      AndMask.Canvas.MoveTo(0, h div 2);
      AndMask.Canvas.LineTo(w, h div 2);
    
      {Create the "XOr" mask}
      Bmp := TBitmap.Create;
      Bmp.Width := w;
      Bmp.Height := h;
    
      {Draw on the "XOr" mask}
      Bmp.Canvas.Brush.Color := clblack;
      Bmp.Canvas.FillRect(Rect(0, 0, w, h));
      Bmp.Canvas.Pen.Color := clwhite;
      Bmp.Canvas.Pen.Width := 3;
      Bmp.Canvas.MoveTo(w div 2, 0);
      Bmp.Canvas.LineTo(w div 2, h);
      Bmp.Canvas.MoveTo(0, h div 2);
      Bmp.Canvas.LineTo(w, h div 2);
    
    
      IconInfo.fIcon := true;
      IconInfo.xHotspot := w div 2;
      IconInfo.yHotspot := h div 2;
      IconInfo.hbmMask := AndMask.Handle;
      IconInfo.hbmColor :=  Bmp.Handle;
    
      Screen.Cursors[1]:= CreateIconIndirect(IconInfo);
      Screen.Cursor:=1;
    
    end;