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 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です。これがおそらく変更された理由です。

于 2012-09-16T13:11:23.750 に答える