|
You last visited: Today at 13:56
Advertisement
[AutoIt] ListView nach mehreren Kriterien sortieren
Discussion on [AutoIt] ListView nach mehreren Kriterien sortieren within the AutoIt forum part of the Coders Den category.
02/25/2011, 19:47
|
#1
|
elite*gold: 1
Join Date: Feb 2010
Posts: 1,242
Received Thanks: 2,391
|
[AutoIt] ListView nach mehreren Kriterien sortieren
Hi zusammen,
für mein aktuelles Projekt ist es nötig, dass ich ein ListView nach mehreren Kriterien sortiere, also mit verschiedenen Prioritäten. Das ganze sieht in etwa wie eine Bundesligatabelle aus.
Prioritäten: Punkte > Tordifferenz > geschossene Tore
Ich hab das jetzt mal mit den folgenden Codeschnippseln probiert:
PHP Code:
Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($db_zs4)] _GUICtrlListView_SimpleSort($db_zs4 ,$B_DESCENDING , 10)
Wie ihr jetzt wahrscheinlich merkt bedeuten die Variablen folgendes:
PHP Code:
$db_zs4 //- Datenbank/Listview mit den Werten $B_DESCENDING //- Das habe ich selbst nicht ganz verstanden, soll aber angeblich vom höchtsen zum tiefsten Wert sortieren, machts aber genau anderesherum 10 //- Spalte mit den Punkten 9 //- Spalte mit der TDifferenz 7 //- Spalte mit den geschossenen Toren
Ich habe nun mehrere Probleme, mit denen ich etwas überfragt bin:
1. Wie bringe ich den dazu, dass der größte Wert oben steht
2. Wie erkläre ich dem das mit den Prioritäten?
Ich hoffe ihr könnt mir da etwas weiterhelfen
Vielen Dank im Vorraus
|
|
|
02/25/2011, 19:50
|
#2
|
elite*gold: 2
Join Date: Mar 2008
Posts: 1,778
Received Thanks: 1,222
|
Wenn du deinen Befehl _GUICtrlListView_SimpleSort in den Editor eingibst, den Befehl markierst und F1 drückst, kommst du zur Hilfe mit einem Beispiel.
Lies bitte zuerst das, und falls noch Fragen offen sind, kannst du dich gerne wieder melden
PS:
Falls du Englisch nicht gut verstehst, kannst du dir auf die deutsche Hilfedatei auf der linken Seite downloaden.
|
|
|
02/25/2011, 19:55
|
#3
|
elite*gold: 1
Join Date: Feb 2010
Posts: 1,242
Received Thanks: 2,391
|
Das habe ich bereits getan, sonst wär ich auch garnicht auf diese Funktion gekommen, nur verstehe ich noch nicht ganz wie ich das mit dem Aufsteigend/Absteigend zu verstehen habe. Dort steht in der Hilfe, dass man da entweder True , False oder einen Array angeben kann. bei True und Fals meckert er, das ihm das nicht reicht, daher habe ich gegoogelt und das mit dem "$B_DESCENDING[_GUICtrlListView_GetColumnCount($db_zs4)]" hab ich dort gefunden. Was man jetzt genau mit dem Array erreichen kann habe ich wiederum nicht verstanden...
|
|
|
02/25/2011, 21:23
|
#4
|
elite*gold: 2
Join Date: Mar 2008
Posts: 1,778
Received Thanks: 1,222
|
Hab mal eben ne eigene Funktion für dich geschrieben, die nach Column Klick sortiert:
Code:
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <StructureConstants.au3>
#include <WindowsConstants.au3>
$hGUI = GUICreate("Beispiel", 226, 155, 192, 124)
$hList = GUICtrlCreateListView("Column 1|Column 2", 8, 8, 209, 89)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 100)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 100)
GUISetState()
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
For $i = 1 To 3
GUICtrlCreateListViewItem("Item " & $i & "|" & $i, $hList)
Next
Do
Sleep(50)
Until GUIGetMsg() = -3
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam
$hLV = $hList
If Not IsHWnd($hList) Then $hLV = GUICtrlGetHandle($hList)
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hLV
If $iCode = $LVN_COLUMNCLICK Then
$tInfo = DllStructCreate($tagNMLISTVIEW, $lParam)
_SortColumn($hLV, 1, DllStructGetData($tInfo, "SubItem"))
EndIf
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
Func _SortColumn($hWnd, $iSort, $iColumn)
; PenGuin :O
;iSort:
;0 Ascend 1 Descend
If Not IsHwnd($hWnd) Then Return SetError(-1)
If Not IsInt($iSort) Then Return SetError(-2)
If Not IsInt($iColumn) Then Return SetError(-3)
Local $iItems = _GUICtrlListView_GetItemCount($hWnd)
Local $aItems[$iItems]
For $i = 0 To $iItems - 1
$aItems[$i] = _GUICtrlListView_GetItemText($hWnd, $i, $iColumn)
Next
_ArraySort($aItems, $iSort)
For $i = 0 To UBound($aItems) - 1
_GUICtrlListView_SetItemText($hWnd, $i, $aItems[$i], $iColumn)
Next
Return 1
EndFunc
Falls noch Fragen bestehen, einfach fragen
|
|
|
02/26/2011, 12:01
|
#5
|
elite*gold: 1
Join Date: Feb 2010
Posts: 1,242
Received Thanks: 2,391
|
[Lösung] Meine Lösung nach dem Bubblesort-Prinzip
Hi,
@Penguin: Deine Lösung sortiert leider nur eine Spalte Damit kommeich nicht ganz weit^^
Naja, ich hab mich gestern nochmal ne stunde hingesetzt und das ganze mit BubbleSort gelöst. Ist zwar wahrscheinlich etwas zu kompliziert geschrieben und ich hätte es irgendwo abkürzen können, aber es läuft ohne Probleme
Hier der Code:
PHP Code:
Func _db_sort_zs4()
;// Folgende Funktion nach dem Bubblesort Prinzip. Priorität: Punkte > Differenz > Tore geschossen
Local $b = 0 Local $a1 Local $a2 Local $iCount = _GUICtrlListView_GetItemCount($db_zs4) Local $tauschen = True Local $handle = GUICtrlGetHandle($db_zs4) While $tauschen = True $tauschen = False While $b <= $iCount-1 $a1 = _GUICtrlListView_GetItemTextArray($handle , $b) $a2 = _GUICtrlListView_GetItemTextArray($handle , $b+1) _ArrayDelete($a1 , 0) _ArrayDelete($a2 , 0) If $a1[10] < $a2[10] Then $tauschen = True Local $i = 1 While $i <= 11 _GUICtrlListView_SetItemText($handle , $b , $a2[$i-1] , $i-1) _GUICtrlListView_SetItemText($handle , $b+1 , $a1[$i-1] , $i-1) $i = $i + 1 WEnd EndIf $b = $b + 1 WEnd $b = 0 WEnd
$tauschen = True While $tauschen = True $tauschen = False While $b <= $iCount-1 $a1 = _GUICtrlListView_GetItemTextArray($handle , $b) $a2 = _GUICtrlListView_GetItemTextArray($handle , $b+1) _ArrayDelete($a1 , 0) _ArrayDelete($a2 , 0) If $a1[10] = $a2[10] And $a1[9] < $a2[9] Then $tauschen = True Local $i = 1 While $i <= 11 _GUICtrlListView_SetItemText($handle , $b , $a2[$i-1] , $i-1) _GUICtrlListView_SetItemText($handle , $b+1 , $a1[$i-1] , $i-1) $i = $i + 1 WEnd EndIf $b = $b + 1 WEnd $b = 0 WEnd
$tauschen = True While $tauschen = True $tauschen = False While $b <= $iCount-1 $a1 = _GUICtrlListView_GetItemTextArray($handle , $b) $a2 = _GUICtrlListView_GetItemTextArray($handle , $b+1) _ArrayDelete($a1 , 0) _ArrayDelete($a2 , 0) If $a1[10] = $a2[10] And $a1[9] = $a2[9] And $a1[7] < $a2[7] Then $tauschen = True Local $i = 1 While $i <= 11 _GUICtrlListView_SetItemText($handle , $b , $a2[$i-1] , $i-1) _GUICtrlListView_SetItemText($handle , $b+1 , $a1[$i-1] , $i-1) $i = $i + 1 WEnd EndIf $b = $b + 1 WEnd $b = 0 WEnd EndFunc
Vlt kann das ja mal jemand irgendwo gebrauchen
Danke für eure/deine Hilfe!
MfG,
Morris
|
|
|
02/26/2011, 14:44
|
#6
|
elite*gold: 2
Join Date: Mar 2008
Posts: 1,778
Received Thanks: 1,222
|
Ach du wolltest bei einem Klick alle Spalten sortieren?
Ja dann geht das ganz leicht
Moment.
Code:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <StructureConstants.au3>
#include <WindowsConstants.au3>
$bDescend = True
$hGUI = GUICreate("Beispiel", 226, 155, 192, 124)
$hList = GUICtrlCreateListView("Column 1|Column 2", 8, 8, 209, 89)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 100)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 100)
GUISetState()
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
For $i = 1 To 3
GUICtrlCreateListViewItem("Item " & $i & "|" & $i, $hList)
Next
Do
Sleep(50)
Until GUIGetMsg() = -3
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam
$hLV = $hList
If Not IsHWnd($hList) Then $hLV = GUICtrlGetHandle($hList)
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hLV
If $iCode = $LVN_COLUMNCLICK Then
$tInfo = DllStructCreate($tagNMLISTVIEW, $lParam)
_GUICtrlListView_SimpleSort($hLV, $bDescend, DllStructGetData($tInfo, "SubItem"))
EndIf
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
|
|
|
02/26/2011, 16:56
|
#7
|
elite*gold: 1
Join Date: Feb 2010
Posts: 1,242
Received Thanks: 2,391
|
Ich bleib aber doch bei meiner Variante, da verstehe ich was passiert
|
|
|
02/26/2011, 17:44
|
#8
|
elite*gold: 2
Join Date: Mar 2008
Posts: 1,778
Received Thanks: 1,222
|
Das einzige Problem war, dass du an SimpleSort zwar False oder True übergeben kannst, aber nicht als einfacher Wert, da der 2. Parameter eine Variable erwartet (ByRef) deshalb einfach True/False in Variable ablegen und damit callen.
Und WM_Notify erkennt einfach nur, ob nun auf eine Column geklickt wurde.
|
|
|
|
Similar Threads
|
[Suche]MineCraft Server (kriterien s. text)
07/08/2011 - Minecraft - 15 Replies
so also mir is das alles zu verwirrend und bevor jetzt "anti-sinnlose-themen" aktivisten von euch mich mit deren sinnlosen themen zumüllen, erklär ich euch vielleicht erst mal warum ich denn nicht einfach such:
nämlich: ich HAB gesucht, und mindestens die letzten 5 seiten durchgekuckt aber was gutes war nie dabei.
nämlich:
1. hab ich einen thread gelesen mit whitelist, im forum reingeschrieben, keine antwort
2. das gleiche
3. hab ich dann einen server gefunden der gestern echt fun...
|
Auf der suche nach einem Autoit Guide ...
02/09/2011 - Metin2 - 4 Replies
Hallo,
Ich habe mal folgende Frage :
Ich suche einen Anfänger Guide, womit man lernt mit Autoit einen kleinen Multihack zu erstellen. Gibt es hier so einen Anfänger Guide? Wäre nett wenn ihr mir einen Link posten könntet.
Lg
Destcrousher
|
Autoit3 Listview Transparent
12/31/2010 - AutoIt - 3 Replies
Hallo Leute,
kann mir wer sagen wie ich es schaffe, ein Listview Control transparent zu machen, damit das Hintergrundbild der GUI durchscheint.
Danke schon mal.
PaPa-Schlumpf
|
Nach Datum sortieren...
09/29/2010 - General Coding - 1 Replies
Hallo
Ich versuche seit einiger Zeit Datein, in meinem Fall html datein, aus einem bestimmten Ordner auszugeben. Das habe ich auch geschafft, jedoch ist mein Problem das die Datein nach dem Alphabet ausgegeben werden und so nicht die neuste oben steht...
Kann ich irgentwie die Datein nach dem Datum oder was auch immer sortieren so, dass die dann richtig ausgegeben werden?
Mein alter Code bis jetzt:
<?php
foreach (glob("artikel/*.html") as $filename) {
|
[VB 2008]Listview Items mit Spalten -Brauche Hilfe
03/15/2010 - .NET Languages - 5 Replies
Hallo,
ich habe ein Problem.
Und zwar bin ich gerade ein Projekt am Coden, indem ich ein ListView Control mit 3 Spalten habe: "ID", "PW" und "Beschreibung"
Die Texte die in die Spalten eingelesen werden sollen, stehen in einer Textdatei mit den Namen "Account1".
Zeile 1 = ID
Zeile 2 = PW
Zeile 3 = Beschreibung
|
All times are GMT +2. The time now is 13:58.
|
|