Hi Lina,
1. es sind keine Fehlermeldungen, sondern Warnungen, die du ignorieren kannst
2. in dem Bsp. leite ich die Ausgabe auf Console, du kannst aber geanausogut das Funktionsergebnis direkt in eine Datei schreiben
Beiträge von BugFix
-
-
So Lina,
dir zur Freude, habe ich jetzt in die Funktion eine Option zur Rückgabe als Array (Standard) oder als @LF-getrennten String eingebaut. s. ersten Beitrag.
[OT]
Doppelpost, damit es in den News erscheint. ( klappt bei Edits leider nicht
)
[/OT] -
Wenn du im OnEvent-Mode arbeitest, kannst du dir viel Schreibarbeit sparen, indem du die Aktionen beim Anklicken mit in das Array der Pic-ID schreibst und beim Anklicken per Execute ausführst.
Spoiler anzeigen
[autoit]Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]Global $n = -1, $aFeld[100][2]
[/autoit] [autoit][/autoit] [autoit]
$aFeld[0][1] = 'MsgBox(0,"", "Hallo, das ist Pic1")'
$aFeld[1][1] = 'MsgBox(0,"", "Hallo, das ist Pic2")'
$aFeld[2][1] = 'MsgBox(0,"", "Hallo, das ist Pic3")'For $s = 0 To 9
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To 9
$n += 1
$aFeld[$n][0] = GUICtrlCreatePic("images\buttonchose.gif", 31 + $i * 20 + $i, 146 + $s * 20 + $s, 20, 20, 0)
GUICtrlSetOnEvent(-1, 'Pic_click')
Next
NextFunc Pic_click()
[/autoit]
For $i = 0 To UBound($aFeld) -1
If $aFeld[$n][0] = @GUI_CtrlId Then Return Execute($aFeld[$n][1])
Next
EndFunc -
[OT]
Seid wann ist Vista denn eine Windows-Version
50% Umsatzeinbruch für DELL und HP bei Auslieferung von PC mit Vista und als Folge jetzt immer die Möglichkeit des Downgrades auf ein funktionierendes Windows XP. Das sagt mehr als tausend Worte.
[/OT] -
Das geht ganz einfach, da es als String erstellt wird.
Kommentiere wie gezeigt aus und du bekommst einen String zurück.Spoiler anzeigen
[autoit];==================================================================================================
[/autoit]
Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1)
Global $oFSO = ObjCreate('Scripting.FileSystemObject')
Global $strFF_Ret = '', $strFiles = ''
Local $aOut
If $sExt = -1 Then $sExt = '*'
If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
_ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir)
; $aOut = StringSplit(StringTrimRight($strFF_Ret,1), @LF)
; If $aOut[1] = '' Then
; ReDim $aOut[1]
; $aOut[0] = 0
EndIf
; Return $aOut
; statt dessen:
Return $strFF_Ret
EndFunc -
Es ist zwar syntaktisch falsch, aber da passenderweise die Sektionsnamen identisch mit den Werten von $i sind, klappt es auch.

-
Du liest zwar die Sektionsnamen aus - aber du verwendest sie nicht!
Statt $var[$i2] verwendest du nur $i2 -
Es kann auch an der Funktion _ArrayDisplay liegen...
Goldrichtig
Dafür ist in der Array.au3 die Konstante: $iLVIAddUDFThreshold = 4000 zuständig. -
Ja, versuche mal das Motherboard zu reseten. Boardbatterie raus für 20 min. Vielleicht hilft es.
-
Hi,
ich hab mal die Rekursive Datei und/oder Ordner Auflistung per Objekt umgesetzt. (Ist viel kürzer als die ..FirstFile/..NextFile Variante
)
Vielleicht habt ihr mal Bedarf.
Ihr übergebt Pfad (für aktuellen Pfad kann '.' und für übergeordneten Pfad kann '..' verwendet werden), Dateierweiterung ('*' oder -1 für alle[Standard]) und ein OrdnerFlag (-1 Datei+Ordner[Standard], 0 nur Dateien, 1 nur Ordner).
Rückgabewert ist ein Array mit der Anzahl gefundener Pfade in Array[0].
(SciTE warnt beim Ausführen, da 2 Variablen erst innerhalb der Funktion erstellt werden)Edit: Auf mehrfachen Wunsch einer einzelnen Dame
habe ich jetzt noch die Option zur Wahl des Rückgabetyps eingebaut. Entweder als Array (Standard), Flag 0, oder als @LF-getrennten String mit Flag 1.Edit 03.07.08: Eine Ergänzung eingefügt.
Bei Stringrückgabe kann das Trennzeichen selbst gewählt werden. Vordefiniert: 0=@CRLF (Standard); 1=@CR; 2=@LFDie Warnung wegen noch nicht deklarierter Variable habe ich jetzt auch verbannt.

Edit 16.09.08: Kleine Korrekturen
Wahl der Trennzeichen jetzt festgelegt auf: 0=@CRLF (Standard) / 1=@CR/ 2=@LF / 3=; / 4=|
Dank Oscars Hinweisen Probleme bei Trennzeichen unterschiedlicher Länge (@CR=1, @CRLF=2) beseitigt._GetFilesFolder_Rekursiv()
[autoit]#include<Array.au3>
[/autoit] [autoit][/autoit] [autoit]
$ret = _GetFilesFolder_Rekursiv('.', 'au3',0,1)
If IsArray($ret) Then
_ArrayDisplay($ret, 'Rekursiv alle au3-Dateien')
Else
ConsoleWrite($ret & @CRLF)
EndIf;==================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
; Description: Rekursive Auflistung von Dateien und/oder Ordnern
; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
; optional: $iRetType 0 gibt Array, 1 gibt String zurück
; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
Global $oFSO = ObjCreate('Scripting.FileSystemObject')
Global $strFiles = ''
Switch $sDelim
Case '1'
$sDelim = @CR
Case '2'
$sDelim = @LF
Case '3'
$sDelim = ';'
Case '4'
$sDelim = '|'
Case Else
$sDelim = @CRLF
EndSwitch
If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
If $sExt = -1 Then $sExt = '*'
If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
_ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)
If $iRetType = 0 Then
Local $aOut
$aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
If $aOut[1] = '' Then
ReDim $aOut[1]
$aOut[0] = 0
EndIf
Return $aOut
Else
Return StringTrimRight($strFiles, StringLen($sDelim))
EndIf
EndFuncFunc _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
[/autoit]
If Not IsDeclared("strFiles") Then Global $strFiles = ''
If ($Dir = -1) Or ($Dir = 0) Then
For $file In $Folder.Files
If $Ext <> '*' Then
If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
$strFiles &= $file.Path & $Delim
Else
$strFiles &= $file.Path & $Delim
EndIf
Next
EndIf
For $Subfolder In $Folder.SubFolders
If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
_ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
Next
EndFunc -
Die Sortierung wechselt immer von Ascending nach Descending.
Hier mal ein Bsp., per Kontext-Menü kannst du wählen nach welcher Spalte sortiert werden soll. Die Sortierung betrachtet Zahlen aber als String.Spoiler anzeigen
[autoit]#include <GuiConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiListView.au3>
#include <WindowsConstants.au3>Opt('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit]Global $hListView, $B_DESCENDING, $mnu, $mnuSort0, $mnuSort1, $mnuSort2, $msg
[/autoit] [autoit][/autoit] [autoit]_Main()
[/autoit] [autoit][/autoit] [autoit]Func _Main()
[/autoit] [autoit][/autoit] [autoit]
GUICreate("ListView SimpleSort", 400, 300)
$hListView = GUICtrlCreateListView("col1|col2|col3", 2, 2, 394, 268)
$mnu = GUICtrlCreateContextMenu($hListView)
$mnuSort0 = GUICtrlCreateMenuItem('Sort Spalte1', $mnu)
$mnuSort1 = GUICtrlCreateMenuItem('Sort Spalte2', $mnu)
$mnuSort2 = GUICtrlCreateMenuItem('Sort Spalte3', $mnu)
GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
GUICtrlCreateListViewItem("line4|5|more_a", $hListView)
GUICtrlCreateListViewItem("line5|4.50 |more_c", $hListView)
GUICtrlCreateListViewItem("line5|4.0 |more_c", $hListView)
GUICtrlCreateListViewItem("line3|23|more_e", $hListView)
GUICtrlCreateListViewItem("line2|0.34560 |more_d", $hListView)
GUICtrlCreateListViewItem("line1|1.0 |more_b", $hListView)
GUICtrlCreateListViewItem("line1|0.1 |more_b", $hListView)
GUICtrlCreateListViewItem("line1|10|more_b", $hListView)
_GUICtrlListView_SetColumnWidth($hListView, 0, 75)
_GUICtrlListView_SetColumnWidth($hListView, 1, 75)
_GUICtrlListView_SetColumnWidth($hListView, 2, 75)GUISetState()
[/autoit] [autoit][/autoit] [autoit]Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($hListView)]
[/autoit]
; Loop until user exits
Do
$msg = GUIGetMsg()
Switch $msg
Case $mnuSort0
_GUICtrlListView_SimpleSort($hListView, $B_DESCENDING,0)
Case $mnuSort1
_GUICtrlListView_SimpleSort($hListView, $B_DESCENDING,1)
Case $mnuSort2
_GUICtrlListView_SimpleSort($hListView, $B_DESCENDING,2)
EndSwitch
Until $msg = $GUI_EVENT_CLOSE
GUIDelete()
EndFunc ;==>_Main -
Deine erste Lösung hat mir besser gefallen.
Mir auch
-
Es ist durchaus möglich über den (System-) Ping-Befehl die IP zu erfragen, aber es geht ja einfacher

Aber ich zeige trotzdem mal die Möglichkeit:Spoiler anzeigen
[autoit]#include<Constants.au3>
[/autoit] [autoit][/autoit] [autoit]
$IPadress = _GetIP_fromURL('autoit.de')
If $IPadress = -1 Then
MsgBox(0, 'Fehler', 'Antwortzeit überschritten oder Adresse nicht auflösbar.')
Else
MsgBox(0, 'IP-Adresse', $IPadress)
EndIfFunc _GetIP_fromURL($URL, $TIMEOUT=10000)
[/autoit]
Local $start = TimerInit()
Local $foo = Run(@ComSpec & " /c " & 'ping ' & $URL, "", @SW_HIDE, $STDOUT_CHILD)
Local $line, $IP[1] = [-1]
While True
If TimerDiff($start) > $TIMEOUT Then ExitLoop
$line = StdoutRead($foo)
If StringInStr($line, '[') Then
$IP = StringRegExp($line, '(?<=\[).*(?=\])', 1)
ExitLoop
EndIf
Wend
Return $IP[0]
EndFunc -
Also der markante Unterschied zwischen den Varianten ist folgender:
In der einfachen Version setzt du die Daten der Liste immer alle gemeinsam (GUICtrlSetData($Combo, 'Eintrag1|Eintrag2|Eintrag3') ).
Das bedeutet, wenn du Änderungen ausführen willst, mußt du den Inhalt der Liste in einer eigenen Variablen (z.B. Array) führen um entsprechend Löschungen oder Ergänzungen durchzuführen. Also um einen Eintrag zu löschen mußt du die Liste komplett zurücksetzen (GUICtrlSetData($Combo, '') ), dann den zu löschenden Wert aus der Variablen, die den Inhalt führt, löschen und anschließend mit den restlichen Daten die Liste neu setzen.In der erweiterten Version brauchst du diese Variable nicht führen, da dir der Listeninhalt direkt per Index (bzw. Text des Eintrags) zur Verfügung steht. Willst du z.B. den Eintrag "Rechner5" entfernen, erfragst du den Index für Text=Rechner5 und löscht dann diesen Index aus der Liste.
-
Klar geht auch das, aber wenn z.B. Eintrag 3 von 10 angezeigt ist und dieser gelöscht werden soll, kannst du das i.A. auf diesem Weg nicht gerade komfortabel lösen. Unterschiede in der Listenerstellung (Reihenfolge) und Darstellung (sortiert/ nicht sortiert) erschweren es unnütz.
Deshalb empfehle ich lieber gleich die Funktionen der UDF um per Indexanwahl auf die Einträge zugreifen zu können. -
Na ja,danke, nur wenn ich guictrcreateicon mache,kommt da überhaupt nix,nichtmals ein Standbild !
Ist ja klar, ich hatte ja auch geschrieben: "Animierte Icon lassen sich normal mit GUICtrlCreateIcon einbinden."
Du willst aber ein animiertes GIF einbinden, somit ist diese Funktion dafür nicht geeignet.Hier mal ein Bsp.:
[autoit]#include <GUIConstantsEx.au3>
[/autoit][autoit][/autoit][autoit]
GUICreate(" My GUI Icons", 250, 250)
$n1 = GUICtrlCreateIcon(@WindowsDir & "\cursors\horse.ani", -1, 20, 40, 32, 32)
GUISetState()While 1
[/autoit]
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
GUIDelete() -
Ja, wenn du nur eine beim Programmstart festgelegte, sich nicht verändernde Auswahl möchtest, reicht auch das.

Falls du aber einzelne Einträge entfernen/hinzufügen möchtest etc., kommst du mit der Variante nicht weiter. -
Animierte Icon lassen sich normal mit GUICtrlCreateIcon einbinden.
-
Tweaky, ich hab volles Verständnis für Motivationsverlust. Meine Einsätze beim Übersetzen/Reviewen sind zugegebenermaßen auch eher sporadisch. Hängt durchaus auch damit zusammen, dass ich persönlich eine englische der deutschen Hilfe vorziehe. Es geht mir dabei, wie mit vielen Dokumentationen (z.B. auf MSDN), auch bei völlig korrekter Übersetzung gelingt es nicht immer den Inhalt in vollem Umfang rüberzubringen.
Aber natürlich ist es für Anfänger sicher leichter, mit einer deutschen Hilfe zu arbeiten. Vielleicht sollten deshalb gerade jene, die die deutsche Version benötigen, aktiver werden? Denn beim Übersetzen kann man Funktionen kennenlernen, die einem sonst wohl 'ewig' verborgen bleiben. -
Sourcecode betreffend:
Wie soll das laufen, wenn das Originalskript nicht eingestellt wird? - Bei Skripten hat das dann nichts zu suchen, sonst könnte ja jeder ein Programm das mit einer anderen Sprache erstellt wurde hier einstellen.
Die Frage ist doch: Wozu stelle ich Skripte ein? - Ich gehe davon aus, das der Grundgedanke unseres Forums OpenSource ist. Wer damit nicht konform geht, braucht doch seine Programme nicht einstellen.
Wenn ein Forenbeitrag Archive als Dateien enthält, lade ich das schon nicht. Ich öffne ausschließlich au3-Dateien.
Es bleibt jedem selbst überlassen, ob er Code zeigt oder nicht. Aber ich werde niemals ein Programm bewerten wollen, dass ich hier nicht im Sourcecode sehe!