IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Problème pour utiliser TObjectList.sort() : pas assez de paramètres


Sujet :

Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    pas grand chose
    Inscrit en
    Septembre 2018
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : pas grand chose
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2018
    Messages : 131
    Points : 73
    Points
    73
    Par défaut Problème pour utiliser TObjectList.sort() : pas assez de paramètres
    Bonjour

    Je cherche à trier une liste d objets. J ai cherché et suis tombé sur un post de 2012 ici https://www.developpez.net/forums/d1...e/#post6686405

    J ai donc mis dans une unité la fonction de Paul TOTH
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      Delta: double;
    begin
      Delta := TTrade(p2).Date_Close - TTrade(p1).Date_Close;
      if Delta <> 0 then
        Delta := Delta / Abs(Delta);
      Result := Round(Delta);
    J ai mon objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     TTrade = class
      strict private
        FId_Open: Integer;
        FDate_Open: Integer;
        FDate_Close: Integer;
        FId_Close: Integer; ...
    il est créé et parfaitement utilisable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Trades := TObjectList<TTrade>.Create;
    Le pb est que quand je tente simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Trades.Sort(SortByValue);
    j ai le message d erreur : Pas assez de parametres originaux...

    Je ne comprends pas et aurait bien besoin de vos lumières, l objectif final etant de trier la liste Trades par la valeur Trade.Date_close de chaque trade.

    Merci de votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Pour aller à l'essentiel, essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Trades.Sort(@unite.SortByValue);
    cf aide delphi
    enfin, cela dépend de comment vous avez écrit la fonction dans l'unité à part

    Plus en profondeur :
    L'objet, quand je vois des propriétés FDate_Open,FDate_Close qui semble donc se référer à des dates et que ceux-ci sont déclaré integer, je tique même si c'est la facilité qui l'emporte


    Mais je tiens à indiquer que Delphi a évolué d'autres techniques pour le tri d'objet existent. Par exemple dans ce tutoriel chapitre V-A, je vend ma prose mais comme c'est un tri sur des dates ...
    Pour ce qui est des méthodes anonymes je sais qu'il y a deux ou trois petites vidéos très bien faites mais je ne remets pas le doigt dessus (elles ont longtemps été dans la rubrique publication)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre régulier
    Homme Profil pro
    pas grand chose
    Inscrit en
    Septembre 2018
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : pas grand chose
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2018
    Messages : 131
    Points : 73
    Points
    73
    Par défaut
    Merci d avoir pris le temps de me répondre.
    Quand j ai posté il était tard et j ai un peu rogné le code de la fonction déclarée dans l unité Mes_Fonctions.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function SortByValue(p1, p2: Pointer): Integer;
    var
      Delta: double;
    begin
      Delta := TTrade(p2).Date_Close - TTrade(p1).Date_Close;
      if Delta <> 0 then
        Delta := Delta / Abs(Delta);
      Result := Round(Delta);
    end;
    Quand je l apelle ainsi Trades.sort(@Mes_Fonctions.SortByValue) j ai le message d erreur suivant : Aucune version surchargée de 'Sort' ne peut être appelée avec ces arguments.

    Quand je declare la fonction dans mon unité principale et que je l apelle depuis cette unité avec Trades.sort(@SortByValue) j ai l erreur suivante : Variable requise.

    Je ne suis absolument pas focalisé sur ce type/mode ou principe de tri, c est en cherchant 'trier un objet' que je suis arrivé là. Mon objectif final etant de pouvoir trier mon objet Trade suivant differents Date_open, Date_Close, Id_Open... selon les besoins ponctuels.
    J imaginais commencer par cette fonction et l'adapter à chacun de mes besoins. Mais si tu as un autre proposition... je ne demande qu'à apprendre.

    Sinon concernant les dates c est des Integer parce qu’il s agit de dates Unix, c est pas par coqueterie mais parce que les logiciels de bourse ont parfois des dates dans des formats différents, cela me permet d uniformiser le traitement.

    merci

  4. #4
    Membre régulier
    Homme Profil pro
    pas grand chose
    Inscrit en
    Septembre 2018
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : pas grand chose
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2018
    Messages : 131
    Points : 73
    Points
    73
    Par défaut
    J ai crée un nouveau projet avec seulement cette fonction reprise depuis l exemple du post original et là ça fonctionne parfaitement.... je n y comprends rien !

Discussions similaires

  1. Probleme pour utiliser ma dll en release
    Par irnbru dans le forum MFC
    Réponses: 4
    Dernier message: 30/09/2007, 15h01
  2. Réponses: 1
    Dernier message: 03/08/2006, 20h40
  3. Réponses: 1
    Dernier message: 18/07/2006, 16h44
  4. [VS2005/Oracle] Probleme pour utiliser Oracle
    Par cnguyen dans le forum Oracle
    Réponses: 1
    Dernier message: 03/07/2006, 17h13
  5. [Debutant] probleme pour utiliser les classes d'un .jar
    Par pissek dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 12/05/2004, 18h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo