Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Расскажите о CustomSort для TStringList, пожалуйста  [new]
чччД
Guest
Только не совсем для Delphi, а для скрипта (FS) в FastReport.
Чтобы функция кастом-сортировки тоже на скрипте была написана.
14 май 18, 01:31    [21406906]     Ответить | Цитировать Сообщить модератору
 Re: Расскажите о CustomSort для TStringList, пожалуйста  [new]
чччД
Guest
Для FastReport 4.*.
14 май 18, 01:41    [21406909]     Ответить | Цитировать Сообщить модератору
 Re: Расскажите о CustomSort для TStringList, пожалуйста  [new]
DimaBr
Member

Откуда:
Сообщений: 10781
Сортировать скриптом ? Давай лучше видео перекодировать скриптом будем.
14 май 18, 01:55    [21406914]     Ответить | Цитировать Сообщить модератору
 Re: Расскажите о CustomSort для TStringList, пожалуйста  [new]
чччД
Guest
DimaBr,

барин, не ругайся.
14 май 18, 03:10    [21406946]     Ответить | Цитировать Сообщить модератору
 Re: Расскажите о CustomSort для TStringList, пожалуйста  [new]
DimaBr
Member

Откуда:
Сообщений: 10781
+ Delphi
procedure TForm1.FormClick(Sender: TObject);
begin
  frxReport1.ShowReport();
end;


type
  TFunctions = class(TfsRTTIModule)
    function CallMethod(Instance: TObject; ClassType: TClass;  const MethodName: String; Caller: TfsMethodHelper): Variant;
    constructor Create(AScript: TfsScript); override;
  end;

constructor TFunctions.Create(AScript: TfsScript);
begin
  inherited;
  with AScript do begin
    with FindClass('TStringList') do begin
      AddMethod('procedure CustomSort(Compare: string);',CallMethod);
    end;
  end;
end;

var C: TfsMethodHelper;
    SL: TStringList;

function DoCompare(List: TStringList; Index1, Index2: Integer): Integer;
var V: TfsCustomVariable;
begin
  V := C.Prog.Find(C[0]);
  if not (V is TfsProcVariable) then begin
    Result := 0;
    Exit;
  end;
  V.Params[0].Value := integer(SL);
  V.Params[1].Value := Index1;
  V.Params[2].Value := Index2;
  Result := TfsProcVariable(V).Value;
end;

function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; const MethodName: String; Caller: TfsMethodHelper): Variant;
begin
  if Instance is TStringList then begin
    if MethodName = 'CUSTOMSORT' then begin
      C := Caller;
      SL := TStringList(Instance);
      SL.CustomSort(DoCompare);
    end else
  end;
end;


initialization
  fsRTTIModules.Add(TFunctions);

finalization
  fsRTTIModules.Remove(TFunctions);

end.


+ FR
var SL: TStringList;

function MySort(S: TStringList; Index1,Index2: integer): integer;
begin
  if S[Index1] < S[Index2] then Result := -1 else
  if S[Index1] > S[Index2] then Result := 1 else Result := 0;                                        
end;            



  
begin
  SL := TStringList.Create;
  
  SL.Add('ccc');
  SL.Add('bbb');
  SL.Add('aaa');
    
  SL.CustomSort(@MySort);
  ShowMessage(SL.Text);                                              
end.
14 май 18, 08:59    [21407117]     Ответить | Цитировать Сообщить модератору
 Re: Расскажите о CustomSort для TStringList, пожалуйста  [new]
чччД
Guest
DimaBr,

спасибо. :)
14 май 18, 17:57    [21409023]     Ответить | Цитировать Сообщить модератору
 Re: Расскажите о CustomSort для TStringList, пожалуйста  [new]
asviridenkov
Member

Откуда:
Сообщений: 3831
DimaBr,

 V.Params[0].Value := integer(SL);


На x64 забиваем?
14 май 18, 18:13    [21409061]     Ответить | Цитировать Сообщить модератору
 Re: Расскажите о CustomSort для TStringList, пожалуйста  [new]
DimaBr
Member

Откуда:
Сообщений: 10781
На всё кладём
14 май 18, 22:30    [21409430]     Ответить | Цитировать Сообщить модератору
 Re: Расскажите о CustomSort для TStringList, пожалуйста  [new]
чччД
Guest
Так точно, забиваем.
15 май 18, 03:32    [21409617]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить