2

我如何将光标类型更改为TStringGridExcel网格光标

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

我在光标所在的swat 示例中使用了代码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;
4

1 回答 1

6

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

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

  • crColorPicker:(在此处输入图像描述 颜色选择器光标)
  • crExcelCross: 在此处输入图像描述 (Excel 十字光标)

首先我需要ExcelCross.cur在 Visual Studio 中创建一个:

在此处输入图像描述

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

wumpa.rc

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

并使用Project -> Add to projectwumpa.rc将该文件添加到我的项目中。

现在我声明了两个全局常量来代表我的新游标。像crHourGlass, 或crNo, 我们现在将拥有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 十字光标:

在此处输入图像描述

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

于 2013-06-13T21:46:24.380 回答