如何将光标类型更改为Excel网格光标?

时间:2013-06-12 19:33:20

标签: delphi

如何将TStringGrid中的光标类型更改为 Excel 网格光标

Excel游标不是delphi或system32中的游标类型。

我使用swat example中的代码,其中光标位于extrares.res

Screen.Cursors[crMaletUp] := LoadCursor(HInstance, 'Malet');
Screen.Cursors[crMaletDown] := LoadCursor(HInstance, 'MaletDown');
Screen.Cursor := TCursor(crMaletUp);

在其他方面,我使用其他代码但提供了帮助,但它不起作用

procedure TForm1.Button1Click(Sender: TObject);
begin
  bmpMask := TBitmap.Create;
  bmpColor := TBitmap.Create;

  bmpMask.LoadFromFile('SquareMask.bmp');
  bmpColor.LoadFromFile('Square.bmp');

  with iconInfo do
  begin
    fIcon := false;
    xHotspot := 15;
    yHotspot := 15;
    hbmMask := bmpMask.Handle;
    hbmColor := bmpColor.Handle;
  end;

  Screen.Cursors[crMyCursor] := CreateIconIndirect(iconInfo);

  Screen.Cursor := crMyCursor;

  bmpMask.Free;
  bmpColor.Free;
end;

1 个答案:

答案 0 :(得分:6)

我想我会回答这个问题,因为没有其他人会这样做。

我有一个功能可以修复一些Delphi的内置游标(使用标准 Windows游标)。但我也用它来添加一些新的自定义游标。我将我的功能减少到仅添加两个新游标:

  • crColorPickerenter image description here (颜色选择器光标)
  • crExcelCrossenter image description here (Excel十字光标)

首先,我需要在Visual Studio中创建ExcelCross.cur

enter image description here

现在创建一个新的资源脚本文件 wumpa.rc ,其中我将指定我的两个光标文件:

<强> wumpa.rc

ColorPicker    CURSOR   "ColorPicker.cur"
ExcelCross     CURSOR   "ExcelCross.cur"

使用项目 - &gt;将wumpa.rc文件添加到我的项目中添加到项目

现在我声明两个全局常量来表示我的新游标。与crHourGlasscrNo一样,我们现在有crColorPickercrExcelCross

const   
   {Cursor Constants}
   crColorPicker =  1003;
   crExcelCross = 1004;

现在我们必须在运行时加载这两个CURSOR资源:

procedure LoadNewCursors;
var
    i: Integer;
    cursorHandle: HCURSOR;
begin
    //Load ColorPicker cursor
    cursorHandle := LoadCursor(hInstance, 'ColorPicker');
    if CursorHandle <> 0 then
        Screen.Cursors[crColorPicker] := cursorHandle
    else
        Screen.Cursors[crColorPicker] := Screen.Cursors[crNone];

    //Load Excel Cross cursor
    cursorHandle := LoadCursor(hInstance, 'ExcelCross');
    if CursorHandle <> 0 then
        Screen.Cursors[crExcelCross] := cursorHandle
    else
        Screen.Cursors[crExcelCross] := Screen.Cursors[crNone];
end;

initialization
    LoadNewCursors;

通过这项工作,我可以将 StringGrid 设置为使用crExcelCross

procedure TForm1.FormCreate(Sender: TObject);
begin
    StringGrid1.Cursor := crExcelCross;
end;

ba-zinga ,你有一个Excel十字光标:

enter image description here

  

注意:任何代码都会发布到公共域中。无需归属。