ISN AutoIt Studio
-
-
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 ... -
Der Loop sollte eigentlich stoppen sobald kein Icon mehr gefunden wurde... hm...
---------------
The loop should actually stop when no new icon is found ...hmmm ... -
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
EndFuncBitte beachten Sie, danke!
-
diese _FileOperationProgress() funktion funktioniert nicht wie die alte Version...
Ich kann sie daher leider nicht direkt ersetzen... -
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 -
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!
-
ISI360 gib uns gierig lechzenden "ISN Autoit Studio - Jüngern" doch bitte einen ungefähren Zeitraum für die 0.85 BETA in Aussicht
Tage/Wochen/Monaten ?
Achja, was ich gestern beim scripten noch vermißt habe ist, in SciTE gibt es unter view die Funktion "Toggle all folds"
Kannst sowas bitte auch bei ISN miteinbauen
-
Hallo ihr gierig lechzenden "ISN Autoit Studio - Jüngern"
hmm naja...ca. 1 Monat wirs schon noch dauern.... -.-
Dafür ist die Überraschung dan größer wens noch vor einem Monat erscheint! -
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 ausgeblendetWas 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"
-
Hey
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 hochMFG
-
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 PlatzHoffe es hilft dir etwas...
-
Und wieder mal brauch ich eure Hilfe:
Da ich nicht soo der Array Experte bin frag ich am besten gleich euch:
Also...ich habe ein array in dem z.b folgende Werte stehen:Spoiler anzeigen
[autoit]
[/autoit]
$WM_KILLFOCUS
$WM_KILLFOCUS
$WM_ENABLE
$WM_SETREDRAW
$WM_SETTEXT
$WM_PAINT
$WM_CLOSE
$WM_PAINT
$WM_SETREDRAW
$WM_SETREDRAWjezt möchte ich daraus ein neues Array Bilden in dem alle Doppelten Einträge entfernt werden. (Was ja noch nicht soo schwer wäre..)
Ich möchte jedoch auch noch mitzählen wie oft ein Element im Array Doppelt vorkommt und die Anzahl an das Element anhängen...
Das Fertige Array sollte dan ca. so aussehen:Spoiler anzeigen
[autoit]
[/autoit]
$WM_KILLFOCUS {2x}
$WM_ENABLE
$WM_SETREDRAW {3x}
$WM_SETTEXT
$WM_PAINT {2x}
$WM_CLOSEWie könnte man das am einfachsten lösen?!
Danke im Vorraus!!!!Kannst du z.b. so machen:
Spoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>
Dim $avArray[10] = ["$WM_KILLFOCUS", "$WM_KILLFOCUS", "$WM_ENABLE", "$WM_SETREDRAW", "$WM_SETTEXT", "$WM_PAINT", "$WM_CLOSE", "$WM_PAINT", "$WM_SETREDRAW", "$WM_SETREDRAW"]$unique = _ArrayUnique($avArray)
[/autoit] [autoit][/autoit] [autoit]For $i = 1 To $unique[0] Step 1
[/autoit] [autoit][/autoit] [autoit]
$result = _ArrayFindAll($avArray, $unique[$i])
If UBound($result) > 1 Then
$unique[$i] = $unique[$i] & " {" & UBound($result) & "x}"
EndIf
Next_ArrayDelete($unique,0)
[/autoit]
_ArrayDisplay($unique)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]
[/autoit] [autoit][/autoit] [autoit]
#include <Array.au3>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()
[/autoit] [autoit][/autoit] [autoit]
$aUniqueCount = _arrayUniqueCount($avArray,1)
ConsoleWrite(TimerDiff($timer) & @CRLF)_ArrayDisplay($aUniqueCount)
[/autoit] [autoit][/autoit] [autoit]Func _arrayUniqueCount(ByRef $aData, $mode=2, $sepChar=",") ; mode: 1 = 1D Rückgabe , 2 = 2D Rückgabe
[/autoit] [autoit][/autoit] [autoit]
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; 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
[/autoit] [autoit][/autoit] [autoit]
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
NextIf 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:
[/autoit] [autoit][/autoit] [autoit]
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
EndIfReturn $aNew
[/autoit]
EndFuncDirekter Vergleich zwischen beiden Methoden:
Codebei 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 schnellerPS:
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.
-
Ich finde es sogar besser als SCiTE.
Unter der Haube befindet sich ebenfalls die SciLexer.dll.
-
Unter der Haube befindet sich ebenfalls die SciLexer.dll.
Ja, aber die "Innenaustattung" ist (meiner Meinung nach) besser!
-
misterspeed
Danke für die kleine optimierung! Läuft wirklich etwas schneller -
Hi!
Dachte es wäre eine allgemeine Autoit Frage.
Evtl. liegt es jetzt aber doch an ISN.
Könnt Ihr bitte einmal in diesen Thread schauen:
[ offen ] Wie in ISN ein Programmicon zuweisen?Evtl. könnt Ihr mir hier nen Tip geben.
Danke, Björn
-
Nur so zur Info:
Wenn alles weiter nach Plan läuft könnt ihr nächste Woche vlt. schon mit der 0.85er Version rechnen!Nur noch etwas Geduld!
-