1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. nuts

Beiträge von nuts

  • Differenz zweier Uhrzeiten

    • nuts
    • 19. Mai 2011 um 15:43

    Das Pattern muss immer an den "Suchstring" angepasst werden.

    Was enthält die Variable $date1?

  • Differenz zweier Uhrzeiten

    • nuts
    • 19. Mai 2011 um 15:34

    Du musst die ausgelesenen Angaben eben ins _Datediff konforme Format bringen.
    z.B. über Stringregexpreplace

    [autoit]


    dim $date="19.05.2011"
    dim $date_format=StringRegExpReplace($date, "(\d{2}).(\d{2}).(\d{4})", "$3\/$2\/$1")

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0,"YYYY/MM/DD", $date_format)

    [/autoit]
  • EDID / DDC Daten direkt vom Monitor lesen

    • nuts
    • 10. Mai 2011 um 09:21

    Diesen Thread schon gesehen? http://forums.entechtaiwan.com/index.php?topic=6388.0

  • EDID / DDC Daten direkt vom Monitor lesen

    • nuts
    • 10. Mai 2011 um 00:51

    Soweit ich weiss ich das sehr hardwarenah und mit autoit eher schwierig umzusetzen.
    Werden dabei nicht direkt bestimmte Speicherregister der GPU ausgelesen und interpretiert?
    Das Thema hat es auf jeden Fall in sich ...

    Die Top-Experten auf dem Gebiet (zumindest @Windows) sind imho die Jungs von EnTech: http://www.entechtaiwan.com/util/moninfo.shtm
    Das Tool macht was du willst, nur in wie weit es sich automatisieren lässt weiss ich nicht.
    Dort gibt es aber auch ein Forum mit direktem Kontakt zu den Entwicklern.

  • WM_Command & Wertebereich im HighWord unterbringen

    • nuts
    • 6. Mai 2011 um 14:56

    Der Wertebereich 0-2147483647 wird durch eine Drittanwendung vorgegeben.

    Mal genauer:

    Eventghost lauert noch Fernbedienungsanschlägen und sendet auf ein Event eine Nachricht über Sendmessage an mein Skript.
    WM_Command müsste hier nicht unbedingt sein, ist aber einfach zu machen und imho relativ schnell.

    Anschließend übersetzt mein Skript die Nachricht in eine Objektanweisung (DVBViewer)

    [autoit]

    $odvbviewer.sendcommand($hi_word)

    [/autoit]


    Um das ganze möglichst effektiv zu halten sind die Nachrichten im Eventghost-Plugin schon DVBViewer gerecht (zumindest 0-32767) hinterlegt.

    Soweit ok.
    Nur dann ist mir aufgefallen, dass ich den Wertebereich von 0-2147483647 gar nicht komplett unterbringen kann.
    Komplett wird der Bereich derzeit (aber wer weiss?) nicht verwendet, eher so im Bereich 0-50000.

  • WM_Command & Wertebereich im HighWord unterbringen

    • nuts
    • 6. Mai 2011 um 13:28

    Hey,


    ein kleines Problem:
    Ich möchte möglist viel vom Wertebereich 0-2147483647 im Highword einer WM_Command Nachricht unterbringen.

    Soweit ich das verstanden habe ist im Highword maximal Platz für den Bereich −32.768 bis 32.768.

    D.h. man könnten den Bereich von −32.768 bis -1 ausnutzen.
    Hier ein Versuch:

    Spoiler anzeigen
    [autoit]


    #include <Winapi.au3>

    [/autoit] [autoit][/autoit] [autoit]

    global const $lowword=1000

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $ihighword_1=32767*2
    Global $ihighword_2=0
    Global $ihighword_3=32768

    [/autoit] [autoit][/autoit] [autoit]

    Global $ilongword_1=_CreateLong($lowword, $ihighword_1)
    Global $ilongword_2=_CreateLong($lowword, $ihighword_2)
    Global $ilongword_3=_CreateLong($lowword, $ihighword_3)

    [/autoit] [autoit][/autoit] [autoit]

    ;ConsoleWrite($ilongword_1 &@crlf)
    ;ConsoleWrite($ilongword_2 &@crlf)
    ;ConsoleWrite($ilongword_3 &@crlf)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $ihighword_return_1=_get_highword($ilongword_1)
    Global $ihighword_return_2=_get_highword($ilongword_2)
    Global $ihighword_return_3=_get_highword($ilongword_3)

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite($ihighword_return_1 &@crlf)
    ConsoleWrite($ihighword_return_2 &@crlf)
    ConsoleWrite($ihighword_return_3 &@crlf)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _CreateLong($lo_word, $hi_word)
    if $hi_word > 32767 then $hi_word-=65535
    ;ConsoleWrite("Hiword createlong :"&$hi_word&@crlf)
    return _WinAPI_MakeLong($lo_word, $hi_word)
    endfunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    func _get_highword($long_word)
    ; dieser Teil ist zeitkritisch

    [/autoit] [autoit][/autoit] [autoit]

    local $itemp=_WinAPI_HiWord($long_word)
    if $itemp <0 then $itemp+=65535
    ;ConsoleWrite("Hiword itemp :"&$itemp&@crlf)
    return $itemp
    endfunc

    [/autoit]

    Sind die Überlegungen so richtig?
    Gibt es eine Methode um einen noch größeren Wertebereich zu erfassen?

    Die Funktion _get_highword ist möglicherweise etwas zeitkritisch, da die WM_Command Funktion im eigentlichen Skript auf Fernbedienungsanschläge reagieren soll.
    Wie sich das praktisch darstellt weiss ich noch nicht.
    Zu zeitaufwendige Algos sind eher nicht drin, aber vielleicht habt ihr ja einen schlauen Trick auf lager :thumbup:


    Gruß nuts

  • Listview sortieren ohne Columnclick

    • nuts
    • 8. April 2011 um 09:15

    Na super! Das löst mein Problem doch! Danke :thumbup:

    Zitat


    Es müsste auch mit _GUICtrlListView_RegisterSortCallBack() und _GUICtrlListView_SortItems() gehen, dann wird für die Sortierung wohl __GUICtrlListView_Sort() genutzt.


    Das stimmt.
    Nach genauerem Untersuchen ist mir aber aufgefallen, dass es für die Sortierfunktion ja eine eigene Funktion (__GUICtrlListView_Sort($nItem1, $nItem2, $hWnd) nur interne verwendung) in der Guilistview.au3 UDF gibt.
    Diese lässt sich theoretisch auch anpassen.

    Aber deine Lösung klappt ja auch! :)


    Edit\ DllCallbackFree sollte man beim beenden noch ausführen oder ist das in dem Fall nicht nötig?

  • Listview sortieren ohne Columnclick

    • nuts
    • 7. April 2011 um 20:04

    Hm schade :(
    Ist dein Code nur temporär nicht verfügbar?

    Im englischen Forum gibts leider auch keine Lösung dafür.

  • List Control soll zahlen richtig anordnern

    • nuts
    • 7. April 2011 um 17:38

    Mit einem Listview kannst du es so wie hier machen: [ offen ] Listview sortieren ohne Columnclick

  • Listview sortieren ohne Columnclick

    • nuts
    • 7. April 2011 um 13:32

    Ich bin etwas aus der Übung und verstehe nicht so ganz was zu mir sagen willst - sorry! :(

    Die normale Funkionalität (Sortierung über Spaltenkopfzeile) bleibt bei mir auch erhalten.
    Um nach verschiedenen Kriterien zu sortieren (Col1 -> Datum, Col2 0-n, Col3 ABC usw.) bleibt doch nur der Weg über GUICtrlRegisterListViewSort und entsprechend unterschiedlichen Funktionen für die Art und Weise der Sortierung.

    Für die Prüfschleifen bietet es sich jedoch an gleich mit der Sortierung zu beginnen. Nur ohne Mausklick auf den header bekomm ich die nicht in gang.

  • Listview sortieren ohne Columnclick

    • nuts
    • 7. April 2011 um 13:23

    Wie ist die Alternative?
    z.B.
    Spalte1: Datum: DD.MM.YYYY
    Spalte2: Zahlen von 1-10000
    Dazu muss ich doch jeweils eine andere Sortierfunktion verwenden?

    Ich möchte für bestimmte Spalten eben verschiedene Prüfschleifen (mit Sortierung) erstellen.
    Dazu bietet es sich an das Listview erstmal entsprechend zu sortieren.
    Die Prüfungen sollen eben nicht über die Header angestossen werden.

    TheLuBu: Das funktioniert nicht. (_LV_Sort gibt immer 0 für no change zurück und läuft auch nur einmal an)

  • Listview sortieren ohne Columnclick

    • nuts
    • 7. April 2011 um 12:11

    Hallo zusammen,

    folgendes Problem:
    Ich möchte ein Listview nach verschiedenen Kriterien sortieren.

    Dazu verwende ich GUICtrlRegisterListViewSort
    Das funktioniert auch wunderbar.

    Nun möchte ich diese Sortierfunktion auf einem anderen Weg starten (Hotkey, Buttonclick usw.)

    Hier mal ein Beispiel zum spielen:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <Guilistview.au3>
    #include <File.au3>
    #include <Array.au3>
    #include <SendMessage.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; nuts (http://www.autoit.de)

    [/autoit] [autoit][/autoit] [autoit]

    Global $nSortDir = 1

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    Global $Form1 = GUICreate("Form1", 633, 544, 193, 125)
    Global $ListView1 = GUICtrlCreateListView("Text|Nummer|Datum1|Datum2", 48, 16, 521, 385)
    GUICtrlRegisterListViewSort(-1, "_LVSort")
    Global $hLVHandle = GUICtrlGetHandle($ListView1)
    _GUICtrlListView_SetColumn($hLVHandle, 0, "Text", 50, 1)
    _GUICtrlListView_SetColumn($hLVHandle, 1, "Nummer", 150, 1)
    _GUICtrlListView_SetColumn($hLVHandle, 2, "Datum1", 150, 1)
    _GUICtrlListView_SetColumn($hLVHandle, 3, "Datum2", 150, 1)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $Button1 = GUICtrlCreateButton("Test", 216, 448, 177, 49, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To 5
    $temp = Random(1, 31, 1)
    If $temp < 10 Then $temp = "0" & $temp
    GUICtrlCreateListViewItem("ABC|" & Random(1, 10050, 1) & "|2010\02\" & $temp & "|" & $temp & ".02.2010", $ListView1)
    GUICtrlCreateListViewItem("DDC|" & Random(1, 10050, 1) & "|2011\03\" & $temp & "|" & $temp & ".03.2011", $ListView1)

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    ;sortiere nach col 2
    _SendMessage(0x00130458, 78, 0x00000003, 0x008CE2AC)
    $nSortDir = $nSortDir * - 1
    Case $ListView1
    DllCall("user32.dll", "int", "InvalidateRect", "hwnd", $hLVHandle, "int", 0, "int", 1)
    $nSortDir = $nSortDir * - 1
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Sort_byNumber($item1, $item2)

    [/autoit] [autoit][/autoit] [autoit]

    Local $ret = 0

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If Number($item1) < Number($item2) Then
    $ret = -1
    ElseIf Number($item1) > Number($item2) Then
    $ret = 1

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Return $ret

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_Sort_byNumber

    [/autoit] [autoit][/autoit] [autoit]

    Func _Sort_byString($item1, $item2)
    Local $ret = 0

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If $item1 < $item2 Then
    $ret = -1
    ElseIf $item1 > $item2 Then
    $ret = 1

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Return $ret
    EndFunc ;==>_Sort_byString

    [/autoit] [autoit][/autoit] [autoit]

    Func _Sort_byDate($item1, $item2, $del = ".", $step = -1)

    [/autoit] [autoit][/autoit] [autoit]

    Local $ret = 0, $sitem1, $sitem2, $aitem1, $aitem2

    [/autoit] [autoit][/autoit] [autoit]

    $aitem1 = StringSplit($item1, $del)
    $aitem2 = StringSplit($item2, $del)
    Switch $step
    Case - 1
    For $i = $aitem1[0] To 1 Step -1
    $sitem1 &= $aitem1[$i]
    Next
    For $i = $aitem2[0] To 1 Step -1
    $sitem2 &= $aitem2[$i]
    Next
    Case 1
    For $i = 1 To $aitem1[0]
    $sitem1 &= $aitem1[$i]
    Next
    For $i = 1 To $aitem2[0]
    $sitem2 &= $aitem2[$i]
    Next
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;ConsoleWrite($sitem1 & " | "& $sitem2 & " | $val1 < $val2"&@CRLF) ;debug

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If Number($sitem1) < Number($sitem2) Then
    $ret = -1
    ElseIf Number($sitem1) > Number($sitem2) Then
    $ret = 1

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Return $ret

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_Sort_byDate

    [/autoit] [autoit][/autoit] [autoit]

    Func _LVSort($hWnd, $nItem1, $nItem2, $nColumn)

    [/autoit] [autoit][/autoit] [autoit]

    Local $val1, $val2, $nResult

    [/autoit] [autoit][/autoit] [autoit]

    $val1 = GetSubItemText($hWnd, $nItem1, $nColumn)
    $val2 = GetSubItemText($hWnd, $nItem2, $nColumn)

    [/autoit] [autoit][/autoit] [autoit]

    ;ConsoleWrite($val1 & " | "& $val2 & " | $val1 < $val2"&@CRLF) ;debug

    [/autoit] [autoit][/autoit] [autoit]

    $nResult = 0

    [/autoit] [autoit][/autoit] [autoit]

    Switch $nColumn

    [/autoit] [autoit][/autoit] [autoit]

    Case 3
    $nResult = _Sort_byDate($val1, $val2)
    Case 2

    [/autoit] [autoit][/autoit] [autoit]

    $nResult = _Sort_byDate($val1, $val2, "\", 1)
    Case 1
    $nResult = _Sort_byNumber($val1, $val2)
    Case 0
    $nResult = _Sort_byString($val1, $val2)

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    $nResult = $nResult * $nSortDir
    Return $nResult

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_LVSort

    [/autoit] [autoit][/autoit] [autoit]

    Func GetSubItemText($nCtrlID, $nItemID, $nColumn)
    Local $stLvfi = DllStructCreate("uint;ptr;int;int[2];int")
    Local $nIndex, $stBuffer, $stLvi, $sItemText

    [/autoit] [autoit][/autoit] [autoit]

    DllStructSetData($stLvfi, 1, $LVFI_PARAM)
    DllStructSetData($stLvfi, 3, $nItemID)

    [/autoit] [autoit][/autoit] [autoit]

    $stBuffer = DllStructCreate("char[260]")

    [/autoit] [autoit][/autoit] [autoit]

    $nIndex = GUICtrlSendMsg($nCtrlID, $LVM_FINDITEM, -1, DllStructGetPtr($stLvfi));

    [/autoit] [autoit][/autoit] [autoit]

    $stLvi = DllStructCreate("uint;int;int;uint;uint;ptr;int;int;int;int")

    [/autoit] [autoit][/autoit] [autoit]

    DllStructSetData($stLvi, 1, $LVIF_TEXT)
    DllStructSetData($stLvi, 2, $nIndex)
    DllStructSetData($stLvi, 3, $nColumn)
    DllStructSetData($stLvi, 6, DllStructGetPtr($stBuffer))
    DllStructSetData($stLvi, 7, 260)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSendMsg($nCtrlID, $LVM_GETITEMA, 0, DllStructGetPtr($stLvi));

    [/autoit] [autoit][/autoit] [autoit]

    $sItemText = DllStructGetData($stBuffer, 1)

    [/autoit] [autoit][/autoit] [autoit]

    $stLvi = 0
    $stLvfi = 0
    $stBuffer = 0

    [/autoit] [autoit][/autoit] [autoit]

    Return $sItemText
    EndFunc ;==>GetSubItemText

    [/autoit]


    Also z.B. eine Sortierung von Spalte 2 durch klicken des Buttons.


    Gruß nuts

  • [APRIL APRIL] Autoit Version 4 nächste Woche [APRIL APRIL]

    • nuts
    • 1. April 2011 um 15:54

    Nur weil man drauf reinfallen ist macht das den Aprilscherz nicht schlecht :P

  • TCP Send / Recv

    • nuts
    • 1. April 2011 um 15:02

    Soweit so gut.

    Ich hänge nur an der Variante, dass beide Skripte als Server und als Client fungieren sollen.
    Trotzdem danke für dein Bemühen.

  • [APRIL APRIL] Autoit Version 4 nächste Woche [APRIL APRIL]

    • nuts
    • 1. April 2011 um 14:32

    Bei genauem lesen erscheint mir das alles recht schwachsinnig :P

    Aprilscherz gelungen :thumbup:

  • TCP Send / Recv

    • nuts
    • 1. April 2011 um 14:26

    Hat dazu vielleicht jemand ein kurzes Beispiel wie das richtig funtkioniert?

  • TCP Send / Recv

    • nuts
    • 1. April 2011 um 14:05

    Nicht so ganz :(

    Beide Skripte sollten doch die while ... wend Schleife gar nicht verlassen oder?
    Können nicht beide Verbindungen dauerhaft gehalten werden?

  • [APRIL APRIL] Autoit Version 4 nächste Woche [APRIL APRIL]

    • nuts
    • 1. April 2011 um 13:59

    Ein Aprilscherz? Ich bin verwirrt :wacko:

  • [APRIL APRIL] Autoit Version 4 nächste Woche [APRIL APRIL]

    • nuts
    • 1. April 2011 um 13:54
    Zitat von chip

    Ein großer Nachteil hat allerdigns Version 4. Durch die OOP-Umstellung werden keine Scripte der Version 3 mehr laufen.


    Was bedeutet das genau?

    Müssen die alten Skripte einfach angepasst werden? Oder unterscheidet sich Syntax und Funktionen so sehr das jedes Skript nue geschrieben werden muss?

  • Wie sortiere ich mein ListView

    • nuts
    • 1. April 2011 um 13:39

    Hier mal ein Beispiel:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <Guilistview.au3>
    #include <File.au3>
    #include <Array.au3>
    #include <SendMessage.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; nuts (http://www.autoit.de)

    [/autoit] [autoit][/autoit] [autoit]

    Global $nSortDir = 1

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    Global $Form1 = GUICreate("Form1", 633, 544, 193, 125)
    Global $ListView1 = GUICtrlCreateListView("Text|Nummer|Datum1|Datum2", 48, 16, 521, 385)
    GUICtrlRegisterListViewSort(-1, "_LVSort")
    Global $hLVHandle = GUICtrlGetHandle($ListView1)
    _GUICtrlListView_SetColumn($hLVHandle, 0, "Text", 50, 1)
    _GUICtrlListView_SetColumn($hLVHandle, 1, "Nummer", 150, 1)
    _GUICtrlListView_SetColumn($hLVHandle, 2, "Datum1", 150, 1)
    _GUICtrlListView_SetColumn($hLVHandle, 3, "Datum2", 150, 1)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $Button1 = GUICtrlCreateButton("Test", 216, 448, 177, 49, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To 5
    $temp = Random(1, 31, 1)
    If $temp < 10 Then $temp = "0" & $temp
    GUICtrlCreateListViewItem("ABC|" & Random(1, 10050, 1) & "|2010\02\" & $temp & "|" & $temp & ".02.2010", $ListView1)
    GUICtrlCreateListViewItem("DDC|" & Random(1, 10050, 1) & "|2011\03\" & $temp & "|" & $temp & ".03.2011", $ListView1)

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    ;sortiere nach col 2
    _SendMessage(0x00130458, 78, 0x00000003, 0x008CE2AC)
    $nSortDir = $nSortDir * - 1
    Case $ListView1
    DllCall("user32.dll", "int", "InvalidateRect", "hwnd", $hLVHandle, "int", 0, "int", 1)
    $nSortDir = $nSortDir * - 1
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Sort_byNumber($item1, $item2)

    [/autoit] [autoit][/autoit] [autoit]

    Local $ret = 0

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If Number($item1) < Number($item2) Then
    $ret = -1
    ElseIf Number($item1) > Number($item2) Then
    $ret = 1

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Return $ret

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_Sort_byNumber

    [/autoit] [autoit][/autoit] [autoit]

    Func _Sort_byString($item1, $item2)
    Local $ret = 0

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If $item1 < $item2 Then
    $ret = -1
    ElseIf $item1 > $item2 Then
    $ret = 1

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Return $ret
    EndFunc ;==>_Sort_byString

    [/autoit] [autoit][/autoit] [autoit]

    Func _Sort_byDate($item1, $item2, $del = ".", $step = -1)

    [/autoit] [autoit][/autoit] [autoit]

    Local $ret = 0, $sitem1, $sitem2, $aitem1, $aitem2

    [/autoit] [autoit][/autoit] [autoit]

    $aitem1 = StringSplit($item1, $del)
    $aitem2 = StringSplit($item2, $del)
    Switch $step
    Case - 1
    For $i = $aitem1[0] To 1 Step -1
    $sitem1 &= $aitem1[$i]
    Next
    For $i = $aitem2[0] To 1 Step -1
    $sitem2 &= $aitem2[$i]
    Next
    Case 1
    For $i = 1 To $aitem1[0]
    $sitem1 &= $aitem1[$i]
    Next
    For $i = 1 To $aitem2[0]
    $sitem2 &= $aitem2[$i]
    Next
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;ConsoleWrite($sitem1 & " | "& $sitem2 & " | $val1 < $val2"&@CRLF) ;debug

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If Number($sitem1) < Number($sitem2) Then
    $ret = -1
    ElseIf Number($sitem1) > Number($sitem2) Then
    $ret = 1

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Return $ret

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_Sort_byDate

    [/autoit] [autoit][/autoit] [autoit]

    Func _LVSort($hWnd, $nItem1, $nItem2, $nColumn)

    [/autoit] [autoit][/autoit] [autoit]

    Local $val1, $val2, $nResult

    [/autoit] [autoit][/autoit] [autoit]

    $val1 = GetSubItemText($hWnd, $nItem1, $nColumn)
    $val2 = GetSubItemText($hWnd, $nItem2, $nColumn)

    [/autoit] [autoit][/autoit] [autoit]

    ;ConsoleWrite($val1 & " | "& $val2 & " | $val1 < $val2"&@CRLF) ;debug

    [/autoit] [autoit][/autoit] [autoit]

    $nResult = 0

    [/autoit] [autoit][/autoit] [autoit]

    Switch $nColumn

    [/autoit] [autoit][/autoit] [autoit]

    Case 3
    $nResult = _Sort_byDate($val1, $val2)
    Case 2

    [/autoit] [autoit][/autoit] [autoit]

    $nResult = _Sort_byDate($val1, $val2, "\", 1)
    Case 1
    $nResult = _Sort_byNumber($val1, $val2)
    Case 0
    $nResult = _Sort_byString($val1, $val2)

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    $nResult = $nResult * $nSortDir
    Return $nResult

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_LVSort

    [/autoit] [autoit][/autoit] [autoit]

    Func GetSubItemText($nCtrlID, $nItemID, $nColumn)
    Local $stLvfi = DllStructCreate("uint;ptr;int;int[2];int")
    Local $nIndex, $stBuffer, $stLvi, $sItemText

    [/autoit] [autoit][/autoit] [autoit]

    DllStructSetData($stLvfi, 1, $LVFI_PARAM)
    DllStructSetData($stLvfi, 3, $nItemID)

    [/autoit] [autoit][/autoit] [autoit]

    $stBuffer = DllStructCreate("char[260]")

    [/autoit] [autoit][/autoit] [autoit]

    $nIndex = GUICtrlSendMsg($nCtrlID, $LVM_FINDITEM, -1, DllStructGetPtr($stLvfi));

    [/autoit] [autoit][/autoit] [autoit]

    $stLvi = DllStructCreate("uint;int;int;uint;uint;ptr;int;int;int;int")

    [/autoit] [autoit][/autoit] [autoit]

    DllStructSetData($stLvi, 1, $LVIF_TEXT)
    DllStructSetData($stLvi, 2, $nIndex)
    DllStructSetData($stLvi, 3, $nColumn)
    DllStructSetData($stLvi, 6, DllStructGetPtr($stBuffer))
    DllStructSetData($stLvi, 7, 260)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSendMsg($nCtrlID, $LVM_GETITEMA, 0, DllStructGetPtr($stLvi));

    [/autoit] [autoit][/autoit] [autoit]

    $sItemText = DllStructGetData($stBuffer, 1)

    [/autoit] [autoit][/autoit] [autoit]

    $stLvi = 0
    $stLvfi = 0
    $stBuffer = 0

    [/autoit] [autoit][/autoit] [autoit]

    Return $sItemText
    EndFunc ;==>GetSubItemText

    [/autoit]

    Was mich in dem Zusammenhang interessieren würde:
    Wie kann ich die Sortierfunktion außer durch einen Mausklick auslösen?

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™