Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 13:56

  • Please register to post and access all features, it's quick, easy and FREE!

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.

Reply
 
Old   #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
//- Spalte mit der TDifferenz
//- 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
Endtothenight is offline  
Old 02/25/2011, 19:50   #2
 
PenGuin :O's Avatar
 
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.
PenGuin :O is offline  
Thanks
1 User
Old 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...
Endtothenight is offline  
Old 02/25/2011, 21:23   #4
 
PenGuin :O's Avatar
 
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
PenGuin :O is offline  
Thanks
1 User
Old 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:


Vlt kann das ja mal jemand irgendwo gebrauchen

Danke für eure/deine Hilfe!

MfG,

Morris
Endtothenight is offline  
Old 02/26/2011, 14:44   #6
 
PenGuin :O's Avatar
 
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
PenGuin :O is offline  
Thanks
1 User
Old 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
Endtothenight is offline  
Old 02/26/2011, 17:44   #8
 
PenGuin :O's Avatar
 
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.
PenGuin :O is offline  
Reply


Similar Threads 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.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.