|
#1
|
|||
|
|||
ListView
Пишу процедуру сортировки:
Код:
procedure TForm13.ListView1ColumnClick(Sender: TObject; Column: TListColumn); begin Sort := -Sort; if Column = ListView1.Columns[0] then ListView1.CustomSort( @SortCaptionAsString, Sort ) if Column = ListView1.Columns[1] then ListView1.CustomSort( @SortFirstSubItemAsString, Sort ) else end; Вот объявление: Код:
function SortCaptionAsString(Item1, Item2: TListItem; ParamSort: integer): integer; stdcall; и вот описание: function TForm13.SortCaptionAsString(Item1, Item2: TListItem; ParamSort: integer): integer; begin Result := 0; if AnsiUpperCase( Item1.Caption ) > AnsiUpperCase( Item2.Caption ) then Result := ParamSort else if AnsiUpperCase( Item1.Caption ) < AnsiUpperCase( Item2.Caption ) then Result := -ParamSort; end; выдает ошибку (Variable required) на строке: ListView1.CustomSort( @SortCaptionAsString, Sort ); Гугл не помог уж незнаю в чем ошибка, Последний раз редактировалось Admin, 17.10.2011 в 19:02. |
#2
|
|||
|
|||
Цитата:
Я обычно сначала лезу в исходники. Вот правильная сигнатура type TTVCompare = function(lParam1, lParam2, lParamSort: Longint): Integer stdcall; и это не должно быть методом, должна быть свободная процедура. |
#3
|
|||
|
|||
хм, честно говоря не понял ваш пост, вы могли бы объснить по проще...
|
#4
|
|||
|
|||
Цитата:
У Вас написано Код:
function TForm13.SortCaptionAsString(Item1, Item2: TListItem; ParamSort: integer): integer; begin Result := 0; if AnsiUpperCase( Item1.Caption ) > AnsiUpperCase( Item2.Caption ) then Result := ParamSort else if AnsiUpperCase( Item1.Caption ) < AnsiUpperCase( Item2.Caption ) then Result := -ParamSort; end; надо предварительное объявление Код:
function SortCaptionAsString(Param1, Param2: Pointer; ParamSort: integer): integer; stdcall; Код:
function SortCaptionAsString(Param1, Param2: Pointer; ParamSort: integer): integer; stdcall; var Item1, Item2: TListItem; begin Item1:=TListItem(Param1); Item2:=TListItem(Param2); Result := 0; if AnsiUpperCase( Item1.Caption ) > AnsiUpperCase( Item2.Caption ) then Result := ParamSort else if AnsiUpperCase( Item1.Caption ) < AnsiUpperCase( Item2.Caption ) then Result := -ParamSort; end; Код:
ListView1.CustomSort( SortFirstSubItemAsString, Sort ) |