TComponentList-Einträge sortieren



  • Hallo,

    ich habe ein TComponentList in der ich 35 RichEdits eingefügt habe.
    Nun möchte ich diese RichEdits anhand ihres Namens sortieren.

    Ich hab das Beispiel aus der Hilfe angeschaut, aber das funktioniert bei mir nicht.

    Ich habe dies 1:1 übernommen, doch wenn ich den Code dann kompilieren will, dann kommen nette Fehlermeldungen, nach dem Motto:
    "can't convert int __fastcall(AnsiString, AnsiString) to int __fastcall(void*, void*).

    Wie gesagt, ich habe genau das Beispiel aus der Hilfe übernommen.

    int __fastcall CompareNames(void *Item1, void *Item2)
    {
      return CompareText(((TComponent*)Item1->Name, (TComponent*)Item1->Name);
    }
    
    // Aufruf der Sortierung:
    MonatFelderListe->Sort(CompareText);
    

    Wie/wo muss ich denn die CompareNamens einbinden?
    Irgendwie weiss ich nicht, wie ich das genau verwenden soll.
    Und irgendwie komm ich mit der Hilfe diesmal nicht klar...



  • Hier nochmals der Code und die Fehlermeldungen:
    Hatte vorher keinen Zugang dazu...

    int __fastcall CompareNames(void *Item1, void *Item2)
    
    {
      return CompareText(((TComponent *)Item1)->Name, ((TComponent *)Item2)->Name);
    
    }
    
    void __fastcall THauptFormular::FuelleMonatFelderListe()
    {
      // ermittle Steuerelemente von Monatsansicht-Seite
      for(int i=0; i<MonatsansichtSeite->ControlCount; i++)
      {
        //ermittle aktuelles Steuerelement nach TRichEdit gecastet
        TRichEdit *MonatEdit = dynamic_cast<TRichEdit *>(MonatsansichtSeite->Controls[i]);
        // wenn wirklich TRichEdit
        if(MonatEdit)
        {
          // füge RichEdit zu Liste hinzu
          MonatFelderListe->Add(MonatEdit);
        }
      }
      MonatFelderListe->Sort(CompareText);
    }
    

    [C++ Fehler] POMain.cpp(1561): E2034 Konvertierung von 'int (_fastcall *)(const AnsiString,const AnsiString)' nach 'int (_fastcall *)(void *,void *)' nicht möglich
    [C++ Fehler] POMain.cpp(1561): E2342 Keine Übereinstimmung des Typs beim Parameter 'Compare' ('int (_fastcall *)(void *,void *)' erwartet, 'int (_fastcall *)(const AnsiString,const AnsiString)' erhalten)



  • [cpp]MonatFelderListe->Sort(CompareNames);[/cpp]Da hättest du beim Analysieren des Beispieles aber eigentlich selbst drauf kommen sollen. 😉



  • @Jansen: Das habe ich gerade auch herausgefunden.

    Aber deshalb hat mich ja auch die Hilfe so irritiert, da es dort schlicht und einfach falsch drin steht (zumindestens ist das bei mir beim BCB6 Enterprise so).
    Wenn das in den äleren Versionen auch so ist, dann wäre das doch etwas für die FAQ, oder?

    Auf jeden Fall danke ich dir für die Hilfe! :p


Log in to reply