• traurig
    Ich bin ein Chinese
    Spricht kein Englisch und Deutsch
    Google Translate


    Ändern Sie den Code

    $IHM = _WinAPI_ExtractIconEx($Image_File, -1, 0, 0, 0)
    For $iCntRow = 0 To $IHM
    $res = _GUIImageList_AddIcon($Image_List, $Image_File, $PicID, True)
    If $res = -1 Then ExitLoop
    ;If $res = 0 Then
    ;$Limiter = $Limiter - 1
    ;If $Limiter < 1 Then ExitLoop
    ;EndIf
    If Not $res = 0 Or Not $res = -1 Then
    _GUICtrlListView_SetImageList($Fotos_Thubnails, $Image_List, 0)
    _GUICtrlListView_AddItem($Fotos_Thubnails, $PicID, $PicID)
    $iconcounter = $iconcounter + 1
    GUICtrlSetData($statusbar, "加载图标 " & "(" & $iconcounter & ")...")
    EndIf
    $PicID = $PicID + 1
    Next

  • Der Loop sollte eigentlich stoppen sobald kein Icon mehr gefunden wurde... hm...
    ---------------
    The loop should actually stop when no new icon is found ...hmmm ...

    Zur Unterstützung der chinesischen Wide-Character,
    Bitte :
    _SciLexer.au3 51 Reihe: $LineLenght = StringSplit($Text,"")
    ändern: $LineLenght = StringSplit(StringRegExpReplace($Text, '[^\x00-\xff]', '00'),"")

    #include <copy.au3>:
    _FileOperationProgress()
    ändern:

    Func _FileOperationProgress($sSource, $sDest, $iABC, $iMode, $iFlags)
    Local Const $tagSHFILEOPSTRUCT = 'int;uint;ptr;ptr;uint;int;ptr;ptr'
    Local $sStruct, $tFrom, $tTo, $tSHFILEOPSTRUCT, $aRet

    $sStruct = 'wchar[' & (StringLen($sSource) + 1) & '];wchar[1]'
    $tFrom = DllStructCreate($sStruct)
    DllStructSetData($tFrom, 1, $sSource)
    DllStructSetData($tFrom, 2, ChrW(0))
    $sStruct = 'wchar[' & (StringLen($sDest) + 1) & '];wchar[1]'
    $tTo = DllStructCreate($sStruct)
    DllStructSetData($tTo, 1, $sDest)
    DllStructSetData($tTo, 2, ChrW(0))

    $tSHFILEOPSTRUCT = DllStructCreate($tagSHFILEOPSTRUCT)
    DllStructSetData($tSHFILEOPSTRUCT, 1, 0)
    DllStructSetData($tSHFILEOPSTRUCT, 2, $iMode)
    DllStructSetData($tSHFILEOPSTRUCT, 3, DllStructGetPtr($tFrom))
    DllStructSetData($tSHFILEOPSTRUCT, 4, DllStructGetPtr($tTo))
    DllStructSetData($tSHFILEOPSTRUCT, 5, $iFlags)

    $aRet = DllCall('shell32.dll', 'int', 'SHFileOperationW', 'ptr', DllStructGetPtr($tSHFILEOPSTRUCT))

    If @error Then
    Return SetError(@error, 2, 0)
    Return 0
    Else
    If $aRet[0] Then
    Return SetError($aRet[0], 1, 0)
    Return 0
    EndIf
    EndIf
    Return 1
    EndFunc

    Bitte beachten Sie, danke!

  • wann kann man eig mit der Version 0.85 rechnen?
    die müsste doch ein richtiger meilenstein sein, was man so an bugreports und neuen features liest

    MFG inventor

    wenn's weitere Fragen gibt -> PN
    wenn da keine Antwort kommt, überdenk deine Frage noch mal

  • Jap wird tatsächlich wieder ein riesen Update werden. Viele neue Sachen und natürlich auch Bugfixes… (s. Bugtracker)

    Nunja….ich würde mal sagen es ist zu ca. 70% fertig…ich hab schon noch einige Dinge vor mir die ich erledigen möchte.
    Des weiteren Plane ich nach dem Release einmal eine längere Pause in der Weiterentwicklung von neuen Features einzulegen. Die Versionen nach 0.85 BETA bis 0.9 BETA werden sie also nur auf Bug fixes und Sprachupdates beziehen. So möchte ich den ganzen Übersetzern da draußen genug Zeit geben um neue Sprachen in das ISN hinzuzufügen (oder die aktuellen zu aktualisieren) die ich dann einfach via Update ausliefere…
    Auch für Tutorials o.Ä. wäre nach dem Release von 0.85 BETA ein guter Zeitpunkt.

    Also bitte noch um etwas Geduld! Es wird sich lohnen! ;)

  • Eure Meinung ist mal wieder gefragt:
    Ich plane noch für die 0.85er Version sogenannte "Regelslots" einzubauen. Regelslots sind nichts anderes als bis zu 5 frei belegbare und designbare buttons in der Toolbar (und Menübar) die mit einer Projektregel belegt werden können:. So könnt ihr zb auf knopfdruck viele verschiedene Aktionen durchführen lassen (programme starten, dateioperationen usw....)

    So würde das ganze aussehen (Icon für jeden Slot ist natürlich änderbar):
    autoit.de/wcf/attachment/15844/
    -> Diese 5 Slots könne für jedes Projekt extra über eine Projektregel gesteuert werden
    -> Ist einem Slot keine Projektregel zugewiesen wird er aus der Toolbar ausgeblendet

    Was haltet ihr davon?

    Edit:
    Autolaser: Die funktion "toggle all folds" wird ab version 0.85 beta vorhanden sein! ;)

  • Find ich eine Tolle Idee. Über solche "Regeln" haben wir ja schon mal gesprochen und so kann man sie wohl am bequemsten einsetzen. Grosses Lob von einem "gierig lechzenden ISN Autoit Studio - Jünger" :D

  • Hey :D
    Danke für dieses Projekt ;) . Ich finde es sogar besser als SCiTE. Einen Wunsch: der Platz zum "scripten" ist etwas klein. Also bitte optional den Editor in einem extra Fenster öffnen. Aber sonst: Daumen hoch ;)

    MFG

    [Blockierte Grafik: http://stefan.blagojevic.at/loading.gif]

    Design, Modellbau, CAD <3
    AutoCAD, ArchiCAD, REVIT (ist ein Scheiss, habe aber das Zertifikat)

    Cinema 4D, RuckZuck Statik Programm

    Michael Bay als Architekt


    Da eine Glasfassade! Booom Sichtbeton! Laminiertes Bild auf Mosaiksteinchen! Granit! Granit! Granit! Sichtbetonwand mit 50° Neigung!
    Holzverkleidung erscheint da! Boooooom!

  • Stevenx: Du kannst einige Dinge deaktivieren wenn du viel Platz zum Code brauchst...
    -> Wenns schnell gehen soll: Durch einen klick auf den Titel des "Projektbaumen" oder des "Skriptbaumen" wird dieser zusammengeklappt/aufgeklappt. So steht schnell mehr Platz zur verfügung...
    -> -> Unter Programmeinstellungen kannst du den Skriptbaum (rechts) oder die Outputconsole (unten) auch komplett deaktivieren falls nicht benötigt.
    -> Und zuletzt kannst du das Programm mit F11 in den Vollbildmodus setzen...das bring dir auch wieder ein paar cm an Platz ;)

    Hoffe es hilft dir etwas... ;)


  • Aus Performance Gründen würde ich allerdings einen anderen Lösungsweg wählen und auf die Nutzung der array UDF weitestgehendst verzichten. Gerade bei einem derart umfangreichen Projekt sollte man jeden Performance Engpass vermeiden. Ich gehe mal davon aus, dass die meisten Projekte deutlich mehr Variablennamen als im Beispiel enthalten. Die gewünschte Aufgabe kann man mit einem einzigen Arraydurchlauf lösen, arrayunique und die nachfolgende Schleife mit arrayfindall verursachen deutlich mehr Arraydurchläufe und kosten wertvolle Zeit.

    Effizientere Methode:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

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

    Global $avArray[10] = ["$WM_KILLFOCUS", "$WM_KILLFOCUS", "$WM_ENABLE", "$WM_SETREDRAW", "$WM_SETTEXT", "$WM_PAINT", "$WM_CLOSE", "$WM_PAINT", "$WM_SETREDRAW", "$WM_SETREDRAW"]

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

    $timer=TimerInit()
    $aUniqueCount = _arrayUniqueCount($avArray,1)
    ConsoleWrite(TimerDiff($timer) & @CRLF)

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

    _ArrayDisplay($aUniqueCount)

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

    Func _arrayUniqueCount(ByRef $aData, $mode=2, $sepChar=",") ; mode: 1 = 1D Rückgabe , 2 = 2D Rückgabe
    Local $aNew[1][2] ; für 2D Rückgabe
    Local $aNew1D[1] ; für 1D Rückgabe
    Local $sTemp="" ; string verkettung des ergebnis arrays für schnelle unique prüfung
    Local $j=0 ; zahl der unique treffer

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

    ; hier sollten noch prüfungen folgen ob es sich bei $aData um ein array handelt und ob es eindimensional ist...

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

    For $i=0 To UBound($aData)-1
    If StringInStr($sTemp,$aData[$i] & $sepChar,1,-1) Then ; stringprüfung arbeitet schneller als große arrays zu durchlaufen und "viele" strings zu vergleichen
    For $k=0 To UBound($aNew)-1 ; bei bereits vorhandenen einträgen müssen wir zwangsweise die bisherigen suchergebnisse durchlaufen um den korrekten index zu finden
    If $aNew[$k][0]=$aData[$i] Then
    $aNew[$k][1]+=1
    ExitLoop
    EndIf
    Next
    Else
    $aNew[$j][0] = $aData[$i]
    $aNew[$j][1] = 1
    $sTemp &= $aData[$i] & $sepChar
    $j += 1
    ReDim $aNew[$j+1][2]
    EndIf
    Next

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

    If UBound($aNew) > 1 Then ReDim $aNew[UBound($aNew)-1][2]

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

    ; sofern zwingend ein 1D Array als Ausgabe benötigt wird muss das neue Array noch einmal durchlaufen werden:
    if $mode = 1 Then
    ReDim $aNew1D[UBound($aNew)]
    For $i=0 To UBound($aNew)-1
    If $aNew[$i][1] > 1 Then
    $aNew1D[$i]=$aNew[$i][0] & " {" & $aNew[$i][1] & "x}"
    Else
    $aNew1D[$i]=$aNew[$i][0]
    EndIf
    Next
    $aNew=$aNew1D
    EndIf

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

    Return $aNew
    EndFunc

    [/autoit]

    Direkter Vergleich zwischen beiden Methoden:

    Code
    bei einem Array mit 1600 Datensätzen und sehr langen werten (csv Datei) keine doubletten:
    29236.5581379756 ms ; chip
    2401.29373984682 ms ; me
    
    
    bei einem Array mit 1900 Variablennamen (dein Beispiel mehrfach kopiert), also viele doubletten:
    1106.71663577354 ms ; chip
    40.5784813432992 ms ; me


    EDIT: Der stringinstr Vergleich ist nun mit Parameter $occurence=-1 und der Umstellung der if Bedingung nochmals einige ms schneller

    PS:

    Auch von mir ein dickes Lob für dieses tolle Projekt, hatte zwar noch keine Zeit und Lust mir das anzusehen, aber nach 15 Seiten dieses Threads und den Screenshots bin ich wirklich begeistert und werde das ganze bei Gelegenheit mal antesten. ;)

    6 Mal editiert, zuletzt von misterspeed (17. Juni 2012 um 11:55)