如何实现FireMonkey TStringGrid Sort函数:TFMXObjectSortCompare?

时间:2012-09-16 12:40:36

标签: delphi sorting delphi-xe2 implementation firemonkey

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,我尝试将它与我自己的比较函数this procedure一起使用...

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

  • E2009 Incompatible types: 'regular procedure and method pointer'
  • 它使用如下所示的函数进行编译:{{1​​}}但是如何实现代码按照我的意愿排序?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您正在查看XE3 documentation,根据TFmxObjectSortCompare声明:

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

XE2中,遗憾的是,TFmxObjectSortCompare的声明如下:

function(item1, item2: TFmxObject): Integer;

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

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

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