Auflösungen in ListBox sortieren



  • Hallo,

    wie kann ich Auflösungen in einer ListBox sortieren?

    IST:

    - "1024x768 Pixel, 32 Bit, 70 Hz"
    - "1024x768 Pixel, 32 Bit, 60 Hz"
    - "1280x1024 Pixel, 32 Bit, 75 Hz"
    - "800x600 Pixel, 32 Bit, 80 Hz"

    SOLL:

    - "800x600 Pixel, 32 Bit, 80 Hz"
    - "1024x768 Pixel, 32 Bit, 60 Hz"
    - "1024x768 Pixel, 32 Bit, 70 Hz"
    - "1280x1024 Pixel, 32 Bit, 75 Hz"

    Wenn ich mit sorted=true arbeite kommt folgendes raus:

    - "1024x768 Pixel, 32 Bit, 60 Hz"
    - "1024x768 Pixel, 32 Bit, 70 Hz"
    - "1280x1024 Pixel, 32 Bit, 75 Hz"
    - "800x600 Pixel, 32 Bit, 80 Hz"

    Kennt jemand dieses Problem? Ich weiß echt nicht mehr weiter.

    Bye

    Martin



  • Das ist vollkommen korrekt, so wie das sortiert wird. Die '8' kommt nun mal nach der '1'...
    Du wirst Dir die Arbeit machen müssen, den String zu verarbeiten und die Reihenfolge selbst zu bestimmen.



  • Das geht leider nicht, weil die Auflösungen dynamisch eingelesen werden, also bei jeder GraKa anders



  • Irgendwie befüllst Du die Listbox doch. Dabei mußt Du - anhand des Strings - selbst festlegen, was an welcher Position eingefügt wird.



  • Ich bin mir nicht ganz sicher - aber kann man bei der Listbox einen eigenen Vergleichsoperator angeben?



  • Der Custom-Sort geht nur bei der TStringList, nicht bei ListBox::TStrings. Außerdem mußt er trotzdem die Vergleichsfunktion schreiben. Ob er nun erst die Daten in eine TStringList schreibt und dort seine Sortierfunktion aufruft, oder ob er beim Einfügen eines Strings in die ListBox prüft, an welcher Stelle er den String einfügt, macht meiner Meinung keinen großen Unterschied.

    Ich denke das große Problem ist, dass er nicht weiß, wie er die Strings auswerten soll, um seine Vergleichsfunktion zu schreiben, aber was fertiges gibt es nicht.



  • gib mal sysutils.h ein und drücke F1 (Hilfe). Dort habe ich schon viele Funktionen für das Vergleichen von Strings gefunden. Dann spart man sich eine Menge Schreibarbeit.



  • Joe_M. schrieb:

    Ich denke das große Problem ist, dass er nicht weiß, wie er die Strings auswerten soll, um seine Vergleichsfunktion zu schreiben, aber was fertiges gibt es nicht.

    Dem Manne kann geholfen werden - mit substr() und find() (wenn Borlands TString da nichts eigenes bietet, bleibt als Alternative std::string oder strtok()) kannst du die einzelnen Bestandteile (Höhe, Breite, Farbtiefe, Frequenz) auseinanderdröseln und anschließend in Ganzzahlen umwandeln.

    (zu letzterem gibt es eine ausführliche Erklärung in der C++-FAQ)



  • Im BCB6 gibt es, neben dem std::String noch den AnsiString, hier wären die passenden Funktionen AnsiString::AnsiPos() und AnsiString::SubString() zum aufdröseln des Strings in die Teilbereiche.
    Die Hilfe zu AnsiString ist recht gut, einfach mal die Methoden durchsehen, die dort geboten werden.



  • Danke für die schnelle Hilfe, ich denke, dass ich es so machen werde wie CStoll gemeint hat.

    Bye



  • Um noch mal sysutils.h anzupreisen (muss nur #included werden, im BCB enthalten!): Die Stringfunktionen gibt es dort auch alle, jedoch noch viele zusätzliche.



  • Methoden der Klasse AnsiString:

    ~AnsiString
    AnsiCompare
    AnsiCompareIC
    AnsiLastChar
    AnsiPos
    AnsiString
    ByteType
    c_str
    cat_printf
    cat_sprintf
    cat_vprintf
    CurrToStr
    CurrToStrF
    data
    Delete
    FloatToStrF
    FmtLoadStr
    Format
    FormatFloat
    Insert
    IntToHex
    IntToHex
    IsDelimiter
    IsEmpty
    IsLeadByte
    IsPathDelimiter
    IsTrailByte
    LastDelimiter
    Length
    LoadStr
    LoadString
    LowerCase
    operator !=
    operator []
    operator +
    operator +=
    operator <
    operator <=
    operator =
    operator ==
    operator >
    operator >=
    Pos
    printf
    SetLength
    sprintf
    StringOfChar
    SubString
    ToDouble
    ToInt
    ToIntDef
    Trim
    TrimLeft
    TrimRight
    Unique
    UpperCase
    vprintf
    WideChar
    WideCharBufSize
    

    Läßt wohl kaum noch Wünsche offen... Auf jeden Fall ist alles dabei, was er braucht. Inklusive wandeln nach int...


Anmelden zum Antworten