1
type
  TMyForm= class(TForm)
    sg       : TStringGrid;
    imgSortIt: TImage;
    ...
    procedure imgSortItClick(Sender: TObject);
  private
    { Private declarations }
//    sortIt: TFMXObjectSortCompare;
    function sortIt(item1, item2: TFmxObject): Integer;
  public
    { Public declarations }
  end;

var
  frm: TMyForm;

implementation

{$R *.fmx}

procedure TMyForm.imgSortItClick(Sender: TObject);
begin
  sg.Sort(???);
...

你好,

我知道如何切换行以手动对网格进行排序...

但是作为一个TSTringGrid有一个程序Sort,我尝试将它与我自己的比较函数与这个程序一起使用......

我应该如何构造类型/功能以使其工作?实际上,我得到:

  • E2009 Incompatible types: 'regular procedure and method pointer'
  • 或者它使用这样声明的函数进行编译:sortIt: TFMXObjectSortCompare;但是如何实现代码以按照我的意愿进行排序?

谢谢你的帮助。

4

1 回答 1

1

您正在查看XE3 文档,根据该文档TFmxObjectSortCompare声明为:

reference to function(Right, Left: TFmxObject): Integer;

不幸的是,在XE2TFmxObjectSortCompare中,声明如下:

function(item1, item2: TFmxObject): Integer;

因此,您需要提供常规程序。也就是说,sortIt不允许作为类的方法,而必须只是一个普通的旧函数:

function sortIt(item1, item2: TFmxObject): Integer;
begin
  Result := ...
end;

我怀疑这是 XE2 FMX 代码中的设计错误。排序比较功能要灵活得多reference to,这大概就是它被更改的原因。

于 2012-09-16T13:11:23.750 回答