versuchs mal mit
Spoiler anzeigen
[autoit]
$file = FileOpen($Pfad, 0)
[/autoit]zum Auslesen
versuchs mal mit
$file = FileOpen($Pfad, 0)
[/autoit]zum Auslesen
Danke für Deine Mühe, aber ......
Sorry, aber das war nicht die Lösung
mir geht es auch um den eigentlichen Hintergrund, wieso oder vielmehr was ändert sich, wenn ich
einen Tree auf-/zuklappe, das wird bei anderen Funktionen dann auch Einfluß haben ....
EDIT:
ich weiß nicht warum, aber mit folgenden Änderungen klappt es:
zeile 33 (bezogen auf mein Script)
statt $Treeview = _GUICtrlTreeView_Create($Gui, 20, 20, 400, 400, $iStyle)
jetzt $Treeview = GUICtrlCreateTreeView( 20, 20, 400, 400, $iStyle)
und zeile 140
statt Local $d = _GUICtrlTreeView_GetText($Treeview, $c)
jetzt Local $d = GUICtrlRead($Treeview, 1)
warum gibt es eigentlich vieles doppelt, so wie GUICtrlCreateTreeView und _GUICtrlTreeView_Create ???
Ich frage mit folgendem Script mein TreeView ab, welches Laufwerk/Ordner ich mit der Mouse gewählt habe, um dann damit weiter
zu arbeiten.
Zu Beginn lese ich die vorhandenen Laufwerke ein und stelle diese im TreeView dar. Wenn ich eins anklicke, werden die Unterordner
ermittelt und als Childs angelegt. Das klappt auch ---- beim ersten Mal!
Wenn ich nun das Laufwerk "aufklappe", also die Unterordner zu sehen sind, erhalte ich auch beim zweiten Klick auf das gleiche
Laufwerk in der Console die richtige Laufwerksbezeichnung angezeigt. Ist das Laufwerk aber "zugeklappt", erhalte ich über
_GUICtrlTreeView_GetText die Bezeichnung eines bestimmten Unterordners.
Hat da jemand eine Idee woran das liegen kann? Die Kennung beim HitTest ist korrekt, ein Ordner wird erkannt, nur die Zuordnung
stimmt nicht. Wie oder wieso verändert der Expand-Zustand das Handle eines Controls?
#include <Array.au3>
#include <GuiEdit.au3>
#include <GuiImageList.au3>
#include <GuiTreeView.au3>
#include <GUIConstantsEx.au3>
#include <TreeViewConstants.au3>
Opt("TrayIconDebug", 1) ; 0=keine Info, 1=Debug Zeileninfo
Opt("GUIOnEventMode", 1) ; 0=ausgeschaltet, 1=OnEvent Modus aktiviert
Opt("MustDeclareVars", 1) ; 0=nein, 1=erfordert Deklaration
Opt("GUICloseOnESC", 1) ; 1=ESC beendet, 0=ESC schließt nicht
; Variablen - Definition #################################################################################################################
Global $Paused, $Pausedtext = "- - Pause - -"
Global $Gui, $Treeview, $Progress1, $Button1, $Edit
Global $Datacount = 1, $aData[$Datacount][6]
; Haupt - Programm #######################################################################################################################
[/autoit] [autoit][/autoit] [autoit]_Gui()
_Laufwerke()
While 1
Sleep(100)
WEnd
; GUI - Definition #######################################################################################################################
Func _Gui()
Local $iStyle = BitOR($TVS_HASBUTTONS, $TVS_LINESATROOT, $TVS_HASLINES, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_SINGLEEXPAND ) ; $TVS_NOHSCROLL $TVS_NOHSCROLL
$Gui = GUICreate("Gui", 700, 500, 300, 300)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Ende")
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_Click")
$Treeview = _GUICtrlTreeView_Create($Gui, 20, 20, 400, 400, $iStyle)
Local $hImage = _GUIImageList_Create(16, 16, 5, 1)
_GUIImageList_AddIcon($hImage, 'shell32.dll', 4) ; Verzeichnis-Icon
_GUIImageList_AddIcon($hImage, 'shell32.dll', 110) ; Verzeichnis-Icon mit Haken
_GUIImageList_AddIcon($hImage, 'shell32.dll', 1) ; Datei-Icon
_GUIImageList_AddIcon($hImage, 'shell32.dll', 6) ; Diskette
_GUIImageList_AddIcon($hImage, 'shell32.dll', 7) ; Wechseldatenträger
_GUIImageList_AddIcon($hImage, 'shell32.dll', ; Festplatte
_GUIImageList_AddIcon($hImage, 'shell32.dll', 11) ; CDROM
_GUIImageList_AddIcon($hImage, 'shell32.dll', 9) ; Netzwerklaufwerk
_GUIImageList_AddIcon($hImage, 'shell32.dll', 53) ; Unbekannt
_GUICtrlTreeView_SetNormalImageList($Treeview, $hImage)
$Edit = GUICtrlCreateEdit("",460, 20, 200, 400)
$Progress1 = GUICtrlCreateProgress(20, 450, 400, 25)
$Button1 = GUICtrlCreateButton("- Test -", 500, 450, 100, 30)
GUICtrlSetOnEvent(-1, "_show")
GUISetState(@SW_SHOW)
EndFunc
; Laufwerk Funktionen ##################################################################################################################
Func _Laufwerke()
Local $Drives = DriveGetDrive( "all" ), $y, $iLWindex = 0
For $i = 1 To $Drives[0]
Local $belegt = Round((DriveSpaceTotal($Drives[$i])-DriveSpaceFree($Drives[$i])), 0)
If $belegt < 1000 Then
_GUICtrlEdit_AppendText($Edit, $Drives[$i] & " " & $belegt & " (MB)" & @CRLF)
Else
_GUICtrlEdit_AppendText($Edit, $Drives[$i] & " " & round($belegt/1000, 1) & " (GB)" & @CRLF)
EndIf
Switch DriveGetType($Drives[$i])
Case 'Fixed'
$iLWindex = 5
Case 'CDROM'
$iLWindex = 6
Case 'RAMDisk'
$iLWindex = 7
Case 'Network'
$iLWindex = 7
Case 'Removable'
$iLWindex = 4
If StringLeft($Drives[$i], 2) = 'a:' Or StringLeft($Drives[$i], 2) = 'b:' Then $iLWindex = 3
Case Else
$iLWindex = 8
EndSwitch
Local $Item = _GUICtrlTreeView_Add($Treeview, 0, $Drives[$i] & " " & DriveGetLabel($Drives[$i]), $iLWindex, $iLWindex)
GUICtrlSetData($Progress1, $i/$Drives[0]*100)
Sleep(200)
Next
GUICtrlSetData($Progress1, "")
EndFunc
Func _SubLaufwerke($lw, $parent)
Local $count = 0, $filesum = 0
GUICtrlSetData($Progress1, $count)
Local $search = FileFindFirstFile($lw & "\*.*")
If $search = -1 Then Return
Local $file, $Item2, $parentold
FileChangeDir($lw)
While 1
$file = FileFindNextFile($search)
Local $ex = @extended
If @error Then
$parent = $parentold
ExitLoop
EndIf
If $count < 100 Then
$count += 1
GUICtrlSetData($Progress1, $count)
Else
$count = 0
GUICtrlSetData($Progress1, $count)
EndIf
If StringInStr(FileGetAttrib($file), "D") Or $ex = 1 Then
$Item2 = _GUICtrlTreeView_AddChild($Treeview, $parent, $file)
_GUICtrlTreeView_SelectItem ($Treeview, $Item2)
$parentold = $parent
$parent = $lw & "\" & $file
$Datacount += 1
ReDim $aData[$Datacount][6]
$aData[$Datacount-1][1] = $parent
Local $info = DirGetSize ( $parent, 1 + 2 ) ; erweiterter Modus aber ohne Unterverzeichnisse
$aData[$Datacount-1][3] = $info[0] ; $array[0] = Größe
$aData[$Datacount-1][4] = $info[1] ; $array[1] = Anzahl der Dateien
$aData[$Datacount-1][5] = $info[2] ; $array[2] = Anzahl der Verzeichnisse
_SubLaufwerke($parent, $Item2)
$aData[$Datacount-1][2] = $filesum ; Größer der Dateien im Verzeichnis
$parent = $parentold
Else
$filesum = $filesum + FileGetSize($file)
EndIf
WEnd
FileClose($search)
GUICtrlSetData($Progress1, "")
Return
EndFunc
; Allgemeine Funktionen ##################################################################################################################
Func _Click()
;~ _GUICtrlTreeView_BeginUpdate($treeview)
Local $a = GUIGetCursorInfo($Gui) ; Pos Cursor
Local $b = ControlGetPos($Gui, "", $Treeview) ; Pos des Tree-Controls
Local $e = _GUICtrlTreeView_HitTest($Treeview, $a[0]-$b[0] , $a[1]-$b[1])
If $e = 4 Or $e = 2 Then
Local $c = _GUICtrlTreeView_HitTestItem($Treeview, $a[0]-$b[0] , $a[1]-$b[1])
Local $d = _GUICtrlTreeView_GetText($Treeview, $c)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $d = ' & $d & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
$d = StringLeft($d, StringInStr($d, ":"))
_SubLaufwerke($d, $c)
_GUICtrlEdit_AppendText($Edit, "####### eingelesen ######" & @CRLF)
If $d <> "" Then _GUICtrlTreeView_Expand($Treeview, $d, False)
EndIf
$aData[0][1] = $Datacount
;~ _GUICtrlTreeView_EndUpdate($treeview)
EndFunc
Func _show()
_ArrayDisplay($aData, "", "", "", "", "", "Index|leer|Verzeichnis|FileSum|Größe|Dateien|Ordner")
EndFunc
Func _Ende()
Exit
EndFunc
$input = InputBox("Zahl","Gib eine Zahl ein")
Dim $aArray[$input]
aber ein wenig selber tüfteln ist auch erlaubt
Ich denke man sollte mit einem solchen Tool zwischen schnellen Bewegungen (Mutter checkt Deine Mails ) und langsamen
Veränderungen (die Sonne geht unter während Du unterwegs bist ) unterscheiden.
Also die CeckSum in bestimmten Abständen vergleichen und nur bei deutlichen Änderungen reagieren, sonst die neue CS
für den nächsten Test übernehmen .....
vielleicht so ?????
wegen der Bezeichnungen siehe Skizze:
autoit.de/wcf/attachment/8175/
1.
Innenwinkelsumme eines Dreieck : 180 °
Gleichwinkliges Dreieck : jeder Winkel 60 °
--> beta daher 0,5 * 60 ° = 30 °
2.
Kosinus beta = b / r
--> b = r * Kosinus beta
3.
Sinus beta = h / r
--> h = r * Sinus beta
Quick and Dirty - Rechnen mußt Du selbst
mal wieder ein genials Tool
THX
Klasse Vorlage Oscar, habs mal auf mehrfache Fundstellen und Teilstringsuche erweitert (nachdem ich es verstanden habe )
ConsoleWrite(_RegSearch('HKEY_LOCAL_MACHINE', 'v3.3.4.0') & @CRLF)
Func _RegSearch($sRegPath, $sSearch)
Local $sKey, $sVal, $sVar, $ret, $i = 0, $j = 0
While True
$i += 1
$sKey = RegEnumKey($sRegPath, $i)
If @error Then ExitLoop
$ret = _RegSearch($sRegPath & '\' & $sKey, $sSearch)
If $ret <> '' Then ExitLoop
$j = 0
While True
$j += 1
$sVal = RegEnumVal($sRegPath & '\' & $sKey, $j)
If @error Then ExitLoop
$sVar = RegRead($sRegPath & '\' & $sKey, $sVal)
If StringInStr($sVar, $sSearch, 2) Then
ConsoleWrite($sRegPath & '\' & $sKey & '\' & $sVal & @CRLF)
ExitLoop
EndIf
WEnd
WEnd
Return $ret
EndFunc
ohne die Details nachzuvollziehen, Drag und Drop geht .... vielleicht nicht immer ?!
HotKeySet( "^{a}", "a")
While 1
Sleep(200)
WEnd
Func a()
MouseDown("right") ; drückt und hält an aktueller Mouseposition die rechte Taste
MouseMove(200,200) ; move nach 200,200
MouseUp("right") ; läßt Taste los
Exit
EndFunc
Also wenn ich das richtig verstehe, dann soll in Deiner GUI eine Liste von Dingen erscheinen, deren
Reihenfolge Du dann ändern möchtest.
Warum soll das nicht gehen? In Deiner GUI hat doch jedes Element seine feste Position und seinen
eindeutigen Namen/Handle (Button1, Pic1, .....)
Wenn nun ein Pfeil gedrückt wird, mußt Du eben die Zuordnung bzw. Darstellung der einzelnen
Elemente mit GUICtrlSetData ändern, Thats It!!
Also ein Array mit allen Details (Bilder, Name, blabla) erstellen, bei Klicken eines Button Array neu
sortieren und dann erneut und geändert darstellen .................
hoffe es trifft Deine Frage und hilft
Lade Dir doch einfach einige Scripte hier aus dem Forum und versuche
sie zu verstehen and abzuändern ...... das hat mir bisher gut geholfen
Hi BugFix,
ich habe mal versucht folgenden Ablauf zu dokumentieren:
- Script starten
- Funktion wählen
- PopUp schließen
- editieren wählen
- PopUp schließen
- editieren wählen
- PopUp schließen
so sieht es dann aus (vor dem editieren ist alles OK):
autoit.de/wcf/attachment/7671/
autoit.de/wcf/attachment/7672/
ich hoffe es hilft, das Script ist sonst wirklich super hilfreich, zur Not muss der Editor herhalten
Ich denke es hat damit zu tun, dass AutiIt automatisch "für Dich" die Variablen deklariert, wenn
Du es nicht explizit selber machst.
Opt("MustDeclareVars", 0)
Wenn diese Option genutzt wird müssen alle Variablen deklariert werden mit Dim, Local oder Global bevor sie verwendet werden können - beseitigt die Möglichkeit von Bugs durch Schreibfehler in Variablen.
1 = Variable muss deklariert werden
0 = Variable muss nicht deklariert werden (Standard)
Deshalb ist "$a = 1" so ähnlich wie "Local/Global $a = 1"
auf alle Fälle muss das Eine oder Andere im Script erscheinen, sonst kann die Addition nicht
ausgeführt werden, habe nur für mich laut gedacht/geschrieben
Versteh es auch nicht, hab auch alles nach einem Fehler durchsucht, aber gibt einfach keine Erklärung warum bei mir immer ein ? hinten angehängt wird....
ich hole den Thread nochmal hoch .....
bei mir taucht das Problem auch auf (XP Prof. SP3) .... hast Du eine Lösung gefunden??
na ... bei der Beteiligung werde ich wohl einen guten 2ten Platz belegen, während Ludwig Vorletzter werden wird
Statt einen Wert zuzuweisen tuts auch Folgendes :
[autoit]
Local $var
; oder auch
[/autoit][autoit][/autoit][autoit]Global $var
[/autoit][autoit][/autoit][autoit][/autoit]Hallo an Alle,
ich bin auch noch dabei und zumindest weitgehend fertig, hoffe ich
und da mir momentan etwas die Zeit fehlt, um weiter am Design und Gimmicks zu feilen,
hoffe ich auf einen Frühposter-Rabatt
bin auf Eure Versionen gespannt ......
autoit.de/wcf/attachment/7689/
PW : ersterversuch
und noch der Hintergrund, war in der ersten Dateiversion nicht mitgepackt
autoit.de/wcf/attachment/7687/
wie immer .... zu spät Bug entdeckt, daher Update "Graph3", nicht mehr für die Wertung, ist klar!
GUICtrlGetState ( . .. . . )
oder auch
GUIGetCursorInfo( . . . . . . )
oder Du kannst die Hotkey-Definition auch zustandsabhängig ändern:
- wenn GUI, dann HotKeySet("{F5}", "_func")
- wenn Browser, dann HotKeySet("{F5}") -->> Zuweisung gelöscht
- wenn wieder GUI aktiv, dann HotKeySet("{F5}", "_func")