Deutsch
Forum

Listbox sortiert nach Zahlen

 
- Seite 1 -



Julian
Schmidt
Hallo,
ich würde gerne ein Listbox erstellen welche Zahlen in der Richtigen Reihenfolge anzeigt. Etwa..
1,2,3...100,...1001,....9999

Oder auch umgekehrt. Eine ganz normale 'SortedListBox' zeigt Zahlen in dieser Reihenfolge....
0,1,100,1000,2,200,2000,5000...

Falls so etwas nicht möglich ist würde ich gerne den höchsten Wert einer Listbox(über eine Prozedur)ermitteln.
KompilierenMarkierenSeparieren
cls
var Liste&=Create("ListBox", %hwnd, 1, 0, 0, 100, height(%hwnd))

whileloop 100

    AddString(Liste&,Str$((Rnd(20)*&loop)))

Endwhile

while 1

    Sleep 30
    case iskey(27) : end

Endwhile


LG

Julian57
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
17.08.2011  
 



« Dieser Beitrag wurde als Lösung gekennzeichnet. »


Julian
Schmidt
hmmmmmm....so kann man auch die Zahlen in einer Listbox sortieren, sieht nur nicht schön aus :p
Voraussetzung ist natürlich eine 'UnsortedListbox'.
KompilierenMarkierenSeparieren
Windowstyle 24
Window 100,200 - 100,200
Windowtitle "Beispiel zum Sortieren von Zahlen in einer Listbox"
var Liste&=Create("ListBox", %hwnd, 0, 0, 0, width(%hwnd), height(%hwnd)-40)

whileloop 100

    AddString(Liste&,Str$((Rnd(20)*&loop)))

Endwhile

var sort_list&=Create("Button",%hwnd,"Sortieren",5,height(%hwnd)-35,width(%hwnd)-10,30)

while 1

    waitinput

    if getfocus(sort_list&)

        Sort_Listbox_by_Number(Liste&)
        EnableWindow sort_list&,0

    Endif

Endwhile

Proc Sort_Listbox_by_Number

    Parameters hdl&
    declare index%
    var num%=99999999999999999
    var numbersortedlist&=Create("List", 0)

    while GetCount(hdl&)<>0

        whileloop GetCount(hdl&)

            if num%>Val(GetString$(hdl&,&loop-1))

                num%=Val(GetString$(hdl&,&loop-1))
                index%=&loop-1

            Endif

        Endwhile

        AddString(numbersortedlist&,Str$(num%))
        DeleteString(hdl&,index%)
        num%=99999999999999999

    Endwhile

    Whileloop GetCount(numbersortedlist&)

        AddString(hdl&,GetString$(numbersortedlist&,&loop-1))

    Endwhile

    destroywindow(numbersortedlist&)
    Return 1

EndProc


Nachtrag:
Fünf Zeilen mehr, aber dafür sieht das sortieren besser aus xD
KompilierenMarkierenSeparieren
Windowstyle 24
Window 100,200 - 100,200
Windowtitle "Beispiel zum Sortieren von Zahlen in einer Listbox"
var Liste&=Create("ListBox", %hwnd, 0, 0, 0, width(%hwnd), height(%hwnd)-40)

whileloop 100

    AddString(Liste&,Str$((Rnd(20)*&loop)))

Endwhile

var sort_list&=Create("Button",%hwnd,"Sortieren",5,height(%hwnd)-35,width(%hwnd)-10,30)

while 1

    waitinput

    if getfocus(sort_list&)

        Sort_Listbox_by_Number(Liste&)
        EnableWindow sort_list&,0

    Endif

Endwhile

Proc Sort_Listbox_by_Number

    Parameters hdl&,num%
    declare index%
    var numbersortedlist&=Create("List", 0)
    var copy_orginal_list&=Create("List", 0)

    Whileloop GetCount(hdl&)

        AddString(copy_orginal_list&,GetString$(hdl&,&loop-1))

    Endwhile

    while GetCount(copy_orginal_list&)<>0

        num%=99999999999999999

        whileloop GetCount(copy_orginal_list&)

            if num%>Val(GetString$(copy_orginal_list&,&loop-1))

                num%=Val(GetString$(copy_orginal_list&,&loop-1))
                index%=&loop-1

            Endif

        Endwhile

        AddString(numbersortedlist&,Str$(num%))
        DeleteString(copy_orginal_list&,index%)

    Endwhile

    ClearList hdl&

    Whileloop GetCount(numbersortedlist&)

        AddString(hdl&,GetString$(numbersortedlist&,&loop-1))

    Endwhile

    destroywindow(numbersortedlist&)
    destroywindow(copy_orginal_list&)
    Return 1

EndProc


Meine Frage habe ich damit zu meiner 100% Zufriedenstellung beantwortet. Der Thread ist damit geschlossen!
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
17.08.2011  
 




Dietmar
Horn
Hallo Julian,

ich würde die zu sortierenden Zahlen mit führenden Nullen auffüllen und sie so einer sortierte Listbox zum Anzeigen werfen.

Um die Sortierung umzukehren würde ich jede der Zahlen von 1000, 10000, 100000, oder so subtrahieren, und mit diesen dann .die sortierte Listbox füllen.

Gruß
Dietmar
 
Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V.  [...] 

Windows 95 bis Windows 7
Profan² 6.6 bis XProfan X2 mit XPSE

Das große XProfan-Lehrbuch:  [...] 
17.08.2011  
 




Julian
Schmidt
Dietmar Horn (17.08.11)

Ich würde die zu sortierenden Zahlen mit führenden Nullen auffüllen und sie so einer sortierte Listbox zum Anzeigen werfen.


Welchen Befehl kann man zu solch einem Zweck verwenden? Etwa Format$(...)?

Nachtrag:
Hab jetzt einfach mal eine Prozedur geschrieben welcher die höchste Zahl einer Listbox ermittelt. Das ist für mein Problem schon die Lösung!
KompilierenMarkierenSeparieren
cls
var Liste&=Create("ListBox", %hwnd, 1, 0, 0, 100, height(%hwnd))

whileloop 100

    AddString(Liste&,Str$((Rnd(20)*&loop)))

Endwhile

Create("Text",%hwnd,"Largest Number of Listbox: "+Str$(Listbox_Largest_Number(Liste&)),110,10,230,18)
Create("Text",%hwnd,"Smallest Number of Listbox: "+Str$(Listbox_Smallest_Number(Liste&)),110,30,230,18)

while 1

    waitinput

Endwhile

Proc Listbox_Largest_Number

    Parameters hdl&
    declare num%

    whileloop GetCount(hdl&)

        case num%<Val(GetString$(hdl&,&loop-1)) : num%=Val(GetString$(hdl&,&loop-1))

    Endwhile

    Return num%

EndProc

Proc Listbox_Smallest_Number

    Parameters hdl&
    var num%=99999999999999999

    whileloop GetCount(hdl&)

        case num%>Val(GetString$(hdl&,&loop-1)) : num%=Val(GetString$(hdl&,&loop-1))

    Endwhile

    Return num%

EndProc

 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
17.08.2011  
 




Julian
Schmidt
hmmmmmm....so kann man auch die Zahlen in einer Listbox sortieren, sieht nur nicht schön aus :p
Voraussetzung ist natürlich eine 'UnsortedListbox'.
KompilierenMarkierenSeparieren
Windowstyle 24
Window 100,200 - 100,200
Windowtitle "Beispiel zum Sortieren von Zahlen in einer Listbox"
var Liste&=Create("ListBox", %hwnd, 0, 0, 0, width(%hwnd), height(%hwnd)-40)

whileloop 100

    AddString(Liste&,Str$((Rnd(20)*&loop)))

Endwhile

var sort_list&=Create("Button",%hwnd,"Sortieren",5,height(%hwnd)-35,width(%hwnd)-10,30)

while 1

    waitinput

    if getfocus(sort_list&)

        Sort_Listbox_by_Number(Liste&)
        EnableWindow sort_list&,0

    Endif

Endwhile

Proc Sort_Listbox_by_Number

    Parameters hdl&
    declare index%
    var num%=99999999999999999
    var numbersortedlist&=Create("List", 0)

    while GetCount(hdl&)<>0

        whileloop GetCount(hdl&)

            if num%>Val(GetString$(hdl&,&loop-1))

                num%=Val(GetString$(hdl&,&loop-1))
                index%=&loop-1

            Endif

        Endwhile

        AddString(numbersortedlist&,Str$(num%))
        DeleteString(hdl&,index%)
        num%=99999999999999999

    Endwhile

    Whileloop GetCount(numbersortedlist&)

        AddString(hdl&,GetString$(numbersortedlist&,&loop-1))

    Endwhile

    destroywindow(numbersortedlist&)
    Return 1

EndProc


Nachtrag:
Fünf Zeilen mehr, aber dafür sieht das sortieren besser aus xD
KompilierenMarkierenSeparieren
Windowstyle 24
Window 100,200 - 100,200
Windowtitle "Beispiel zum Sortieren von Zahlen in einer Listbox"
var Liste&=Create("ListBox", %hwnd, 0, 0, 0, width(%hwnd), height(%hwnd)-40)

whileloop 100

    AddString(Liste&,Str$((Rnd(20)*&loop)))

Endwhile

var sort_list&=Create("Button",%hwnd,"Sortieren",5,height(%hwnd)-35,width(%hwnd)-10,30)

while 1

    waitinput

    if getfocus(sort_list&)

        Sort_Listbox_by_Number(Liste&)
        EnableWindow sort_list&,0

    Endif

Endwhile

Proc Sort_Listbox_by_Number

    Parameters hdl&,num%
    declare index%
    var numbersortedlist&=Create("List", 0)
    var copy_orginal_list&=Create("List", 0)

    Whileloop GetCount(hdl&)

        AddString(copy_orginal_list&,GetString$(hdl&,&loop-1))

    Endwhile

    while GetCount(copy_orginal_list&)<>0

        num%=99999999999999999

        whileloop GetCount(copy_orginal_list&)

            if num%>Val(GetString$(copy_orginal_list&,&loop-1))

                num%=Val(GetString$(copy_orginal_list&,&loop-1))
                index%=&loop-1

            Endif

        Endwhile

        AddString(numbersortedlist&,Str$(num%))
        DeleteString(copy_orginal_list&,index%)

    Endwhile

    ClearList hdl&

    Whileloop GetCount(numbersortedlist&)

        AddString(hdl&,GetString$(numbersortedlist&,&loop-1))

    Endwhile

    destroywindow(numbersortedlist&)
    destroywindow(copy_orginal_list&)
    Return 1

EndProc


Meine Frage habe ich damit zu meiner 100% Zufriedenstellung beantwortet. Der Thread ist damit geschlossen!
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
17.08.2011  
 




Julian
Schmidt
Dietmar Horn (17.08.11)

Um die Sortierung umzukehren würde ich jede der Zahlen von 1000, 10000, 100000, oder so subtrahieren, und mit diesen dann .die sortierte Listbox füllen.


Subtrahieren? Multiplizieren!
 
XProfan X2
Win7 Home Premium, SP1, AMD Athlon(tm) II Neo K125 Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
17.08.2011  
 




Thomas
Freier

ich würde die zu sortierenden Zahlen mit führenden Nullen auffüllen und sie so einer sortierte Listbox zum Anzeigen werfen.


Meist ist ein Font mit gleicher Laufweite vorhanden, dann geht's auch mit Leerzeichen.
KompilierenMarkierenSeparieren
cls
var LB&=Create("ListBox", %hwnd, 1, 10, 10, 224, 400)
var LBfont&=CreateFont("DejaVu Sans Mono",14,0,0,0,0)
SetFont LB&,LBfont&
var a$=space$(20)
AddString(LB&,right$(a$+"100",20))
AddString(LB&,right$(a$+"1",20))
AddString(LB&,right$(a$+"11",20))
AddString(LB&,right$(a$+"4",20))
waitinput
DeleteObject LBfont&
end

Nachtrag:
Oder heute mit der Gridbox und jedem Font:
KompilierenMarkierenSeparieren
 $H commctrl.ph
cls
var LB&=Create("GridBox", %hwnd,";1;220;"; 1, 10, 10, 224, 400)
setstyle LB&,getstyle(LB&) | ~LVS_NOCOLUMNHEADER
var LBfont&=CreateFont("Arial",14,0,0,0,0)
SetFont LB&,LBfont&
var a$=space$(20)
AddString(LB&,right$(a$+"100",20))
AddString(LB&,right$(a$+"1",20))
AddString(LB&,right$(a$+"11",20))
AddString(LB&,right$(a$+"4",20))
waitinput
DeleteObject LBfont&
end
 
Gruß Thomas
Windows XP SP2, XProfan X2
17.08.2011  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

10.396 Betrachtungen

Unbenanntvor 0 min.
H.Brill17.05.2023
RudiB.05.04.2020
Pauli21.08.2013
Georg20.08.2013
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie