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. BugFix

Beiträge von BugFix

  • Bilder verschieben per Drag and Drop

    • BugFix
    • 24. März 2017 um 14:13

    Ich würde kein echtes Drag&Drop Verhalten probieren. Ein Bild ziehen (es bleibt also sichtbar, die Bewegung ist live) scheint mir etwas zu aufwändig.
    Ich würde so vorgehen:
    - Deiner Tabellenstruktur, die die Bilder anzeigt, liegt ein 2D-Array zugrunde. (Bild 2 in Zeile 2 = Index[1][1] - dort der kpl. Dateipfad
    - Klick auf ein Bild umrahmt es (das Bild ist markiert, über Klickposition erhältst du den Index)
    - Klick auf den Seitenstreifen - prüft ob in der Tabelle ein Bild markiert ist - JA: Anhand des Index ist Bilddatei bekannt, Bild kann im Seitenstreifen angezeigt werden und Dateipfad wird in Seitenstreifen-Array übernommen. Dann wird das Bild an Tabellenposition und im Tabellen-Array gelöscht
    - Ziehen von Seitenstreifen auf Tabelle: exakt entgegengesetzt

  • Textdatei einlesen und bestimmte Zeilennummer samt Inhalt löschen

    • BugFix
    • 22. März 2017 um 14:58

    Das ist hier in etwa, was @AspirinJunkie vorschlug. Ich habe jedoch nicht zeilenweise in die Ausgangsdatei geschrieben, sondern mit einem Schreibbefehl am Ende:

    AutoIt
    #cs
    Datei "LinesToDelete.cfg" (oder wie auch immer) - jede Zeile eine Zeilennummer, aufsteigend sortiert!!
    
    
    12
    14
    123
    124
    ...
    
    
    #ce
    
    
    Local $sFileLineNumbers = "....\PFAD\LinesToDelete.cfg"   ; Pfade anpassen
    Local $sFileToClean = "....\PFAD\Sollmietenoriginal.txt"
    Local $sFileOutput = "....\PFAD\SollmietenBereinigt.txt"
    Local $sToWrite = ""
    
    
    ; Nummern zu löschender Zeilen einlesen aus Datei in Array
    Local $aLinesToDelete
    _FileReadToArray($sFileLineNumbers, $aLinesToDelete)
    
    
    Local $fH = FileOpen($sFileToClean)  ; Datei zum zeilenweise Lesen öffnen
    Local $sRead                         ; Variable für Zeileninhalt
    Local $iLineCounter = 0              ; Zähler für aktuelle Zeile
    Local $iIndexNextToDel = 1           ; Arrayindex für Ablesen der zu löschenden Zeilennummern
    
    
    While True
    	$iLineCounter += 1
    	$sRead = FileReadLine($fH)
    	If @error Then ExitLoop                                        ; Dateiende erreicht
    	If $iLineCounter <= $aLinesToDelete[$aLinesToDelete[0]] Then   ; Zeilennummer < oder gleich letzter zu löschender Zeilennummer
    		If $iLineCounter = $aLinesToDelete[$iIndexNextToDel] Then  ; Zeilennummer gleich nächste zu löschender Zeilennummer
    			$iIndexNextToDel += 1                                  ; Index des Arrays mit zu löschenden Zeilennummern um 1 erhöhen
    			ContinueLoop                                           ; Zeileninhalt wird nicht benötigt, Schleife fortsetzen mit nächster Zeile
    		EndIf
    	EndIf
    	$sToWrite &= $sRead & @CRLF                                    ; Zeileninhalt wird übernommen
    WEnd
    
    
    FileClose($fH)  ; Dateihandle schliessen
    
    
    ; in Variable übernommene Zeilen, die nicht zu löschen waren, in Ausgabedatei schreiben
    FileWrite($sFileOutput, $sToWrite)
    Alles anzeigen
  • In EXCEL-Zelle Schrift unterschiedliche Textformate erzeugen

    • BugFix
    • 22. März 2017 um 10:28

    OK, greifen wir mal deine Interpretation auf und bieten auch diese Lösung:

    AutoIt
    ; Exel ist offen
    $oExcel = ObjGet('','Excel.Application')
    If Not IsObj($oExcel) Then Exit MsgBox(0, 'Fehler', 'Kein Objekt')
    
    
    $oExcel.Range('A1').Value = "Hallo"
    
    
    ; 3.tes bis letztes Zeichen formatieren
    _Excel_CharactersFormatFont($oExcel, 'A1', 3, -1, "Fett Kursiv Unterstrichen Durchgestrichen", 0x40AE00, "Comic Sans MS", 11)
    
    
    ; oder statt String mit Zelle, Range der Zelle übergeben
    ;~ $oA1 = $oExcel.Range('A1')
    ;~ _Excel_CharactersFormatFont($oExcel, $oA1, 3, -1, "Fett Kursiv Unterstrichen Durchgestrichen", 0x22AEFF, "Comic Sans MS", 11)
    
    
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _Excel_CharactersFormatFont
    ; Description ...: Sets formatting for one or more contiguous characters in a given cell
    ; Syntax ........: _Excel_CharactersFormatFont($_oExcel, $_sCellRC, $_iStart[, $_iLen = 1[, $_sStyle = Default[, $_iColorBGR = Default[,
    ;                  $_sFont = Default[, $_iSize = Default]]]]])
    ; Parameters ....: $_oExcel             - The Excel object
    ;                  $_soCell             - Cell name (e.g. "A1") or cell-range-object
    ;                  $_iStart             - Character position inside the cell (1-based)
    ;                  $_iLen               - [optional] The count of contiguous characters to format. -1=up to the end, Default is "1".
    ;                  $_iColorBGR          - [optional] The character color as BGR. Default is xlAutomatic - "Default" (-1 will also accepted).
    ;                  $_sStyle             - [optional] The style, one or combined with space ("Bold"; "Bold Italic Underline"). Default is none - "Default" (-1 will also accepted).
    ;                  $_sFont              - [optional] The character font name. Default is "Arial" - "Default" (-1 will also accepted).
    ;                  $_iSize              - [optional] The character font size. Default is "10" - "Default" (-1 will also accepted).
    ; Return values .: Success              1
    ; ...............: Failure              0    @error = 1 ($_oExcel is'nt object),  = 2 (formatting range exceeds string length)
    ; Author ........: BugFix
    ; ===============================================================================================================================
    Func _Excel_CharactersFormatFont(ByRef $_oExcel, $_soCell, $_iStart, $_iLen=1, $_sStyle=Default, $_iColorBGR=Default, $_sFont=Default, $_iSize=Default)
    	If Not IsObj($_oExcel) Then Return SetError(1,0,0)
    	Local $oRange = IsObj($_soCell) ? $_soCell : $_oExcel.Range($_soCell)
    	Local $iLen = StringLen($oRange.Value)
    	If $_iStart > $iLen+1 Then Return SetError(2,0,0)
    	If $_iLen = -1 Then $_iLen = $iLen+1 - $_iStart
    	If ($_iStart + $_iLen) > $iLen+1 Then Return SetError(2,0,0)
    	$_sStyle = ($_sStyle = Default Or $_sStyle = -1) ? "" : $_sStyle
    	$_iColorBGR = ($_iColorBGR = Default Or $_iColorBGR = -1) ? "xlAutomatic" : $_iColorBGR
    	$_sFont = ($_sFont = Default Or $_sFont = -1) ? "Arial" : $_sFont
    	$_iSize = ($_iSize = Default Or $_iSize = -1) ? 10 : $_iSize
    
    
    	With $oRange.Characters($_iStart, $_iLen).Font
    		.Bold = (StringInStr($_sStyle, "Bold") Or StringInStr($_sStyle, "Fett") ? True : False)
    		.Italic = (StringInStr($_sStyle, "Italic") Or StringInStr($_sStyle, "Kursiv") ? True : False)
    		.Underline = (StringInStr($_sStyle, "Underline") Or StringInStr($_sStyle, "Unterstrichen") ? True : False)
    		.Strikethrough = (StringInStr($_sStyle, "Strikethrough") Or StringInStr($_sStyle, "Durchgestrichen") ? True : False)
    		If $_iColorBGR = "xlAutomatic" Then
    			.ColorIndex = -4105 ; xlAutomatic
    		Else
    			.Color = $_iColorBGR
    		EndIf
    		.Name = $_sFont
    		.Size = $_iSize
    	EndWith
    
    
    	Return 1
    EndFunc  ;==>_Excel_CharactersFormatFont
    Alles anzeigen
  • In EXCEL-Zelle Schrift unterschiedliche Textformate erzeugen

    • BugFix
    • 22. März 2017 um 10:11
    Zitat von alpines

    Sicher, dass er nicht in einer Zelle einige Zeichen fett und einige nicht möchte?

    Er sprach vom gesamten Inhalt der Zelle, nicht von einzelnen Zeichen. - Man kann auch mehr hineininterpretieren, wenn man will... :P

  • In EXCEL-Zelle Schrift unterschiedliche Textformate erzeugen

    • BugFix
    • 22. März 2017 um 10:06

    Hier für ein geöffnetes Excel, Zelle 'A1':

    AutoIt
    $oExcel = ObjGet('','Excel.Application')
    If Not IsObj($oExcel) Then Exit MsgBox(0, 'Fehler', 'Excel nicht geöffnet')
    
    
    With $oExcel.Range('A1')
        .Font.Bold = True
        .Font.Italic = True
        .Font.Color = 0xFF0000 ; als BGR
    EndWith
  • Ideen für dynamisches Nippelboard

    • BugFix
    • 21. März 2017 um 10:50

    Vor vielen Jahren hab ich auch mal ein Skript erstellt um Listview-Item (und SubItem) per Doppelklick on-the-fly zu bearbeiten. Vielleicht kannst du es brauchen: https://autoit.de/index.php/Thre…49074#post49074

  • Registry Key Flag setzen um Script zu steuern?

    • BugFix
    • 20. März 2017 um 20:33
    Zitat von olfibits

    Aber was ist, wenn so ein sinnfreier Schwachsinn wie TuneUp&Co. auf dem Rechner des Endbenutzers ist, der alle naselang mal die Temp files löscht?

    Nun, "C:\Users\USER\AppData\Local" ist aber kein Temp-Ordner. Unter AppData kann man beruhigt Dinge ablegen, die der User nicht versehentlich einfach mal wegsemmeln soll. Mit Standardeinstellungen ist dieser Ordnerzweig für den User nicht sichtbar (er wird auch nicht in die Windows-Suche einbezogen).

  • Registry Key Flag setzen um Script zu steuern?

    • BugFix
    • 20. März 2017 um 19:22
    Zitat von olfibits

    Ich meinte, dass die Registry sicherer ist als eine INI. Wo soll man die dann sinnvoll speichern?

    Dafür gibt es das: C:\Users\USER\AppData\Local ^^

  • Winkel zwischen zwei Punkten

    • BugFix
    • 20. März 2017 um 13:48
    Zitat von zocker5656

    jedoch wenn man diese Koordinaten hier errechnen will bekommt man ein falsches Ergebnis raus

    Da kann niemals ein "richtiges" Ergebnis rauskommen, ist einer der Sonderfälle. Die Berechnung von atan beinhaltet eine Division durch 0.

  • Befehl "hidden" ausführen

    • BugFix
    • 20. März 2017 um 11:05

    Verwende Run - da bekommst du die PID und kannst damit das zugehörige Fenster ermitteln. Hast du das Fensterhandle, kannst du es ganz normal ausblenden.

  • Frage SNMP

    • BugFix
    • 20. März 2017 um 10:45

    Wende dich am Besten an den Autor der UDF im engl. Forum. Wenn beim händischen Eintragen ein falscher Wert kommt, scheint das Verarbeitungsproblem innerhalb der UDF zu liegen.

    Passiert das auch, wenn du mal den PC neu startest und dann mit Wert 2 die Funktion aufrufst? - Wenn es dann klappt, wäre es ein Hinweis, dass intern die Variable mit der OID nicht änderbar ist, wenn sie einmal gesetzt ist (wäre ganz schön sinnfrei).

  • Wenn ordner nicht vorhanden, zum nächstern springen

    • BugFix
    • 20. März 2017 um 10:35
    Zitat von DerSchatten

    Eventuell die komplette Verzeichnisstruktur ein mal einlesen und dann die vorhandenen Ordnerzahlen durchgehen?

    Genau, mach das. Und beim Bewegen zwischen den Ordnern nutzt du dann den Array-Index des Arrays mit allen Pfaden. Vereinfacht auch die Fehlerabfragen: kein If FileExists notwendig, Anfang und Ende sagen dir Index=0 (oder 1, je nachdem, ob du die Pfadanzahl an [0] führst oder nicht) und Ubound.

  • Frage SNMP

    • BugFix
    • 20. März 2017 um 10:02

    1. Klappt es, wenn du die Befehlsaufrufe einzeln schreibst und nicht in einer Schleife?
    2. Setze doch mal ein ConsoleWrite('$snmpOID = ' & $snmpOID & @CRLF) in die UDF, direkt unter den Funktionskopf von _SNMPBuildPacket um zu prüfen, ob der korrekte Wert in der Funktion landet. Wenn dem so ist (wovon ich eigentlich ausgehe), mußt du der internen Funktionsverarbeitung folgen um zu sehen, wo der Fehler auftritt.

  • AutoIt Nachschlagewerk

    • BugFix
    • 20. März 2017 um 09:55
    Zitat von Hingo

    Ich habe die Beispiele von der AutoIt.de online Hilfe genommen.

    Irgendwie fühle ich mich veräppelt.
    Wie schon gesagt, habe ich keine Einwände, wenn Beiträge/Tutorials von mir auch von anderen publiziert werden. Aber ein Verweis auf den Autor ist ein absolutes Muss.
    Und wie im Folgenden zu sehen, hast du sowohl Beschreibung als auch Bsp. 1:1 aus meinem Tutorial entnommen. Wenn du die Bilder siehst kannst du dich eventuell auch wieder daran erinnern.

    identisch_2.png

  • Frage SNMP

    • BugFix
    • 20. März 2017 um 08:58
    Zitat von Sonderbaar

    offenbar kann kann die SNMP-UDF insbesondere _SNMPBuildPacket offenbar (laut Kommentaren in der UDF) an der ersten Stelle (OID) kein Array nutzen... mache ich genau dieses wie vin BugFix vorgeschlagen, erhalten ich auch tatsächlich immer die selbe Ausgabe, obwohl eine andere OID übergeben wird.

    Kann ich nicht nachvollziehen, den Gedanken.
    In deinem Skript führst du die OID in einem Array, aber an den Aufruf der Funktion _SNMPBuildPacket übergibst du doch kein Array, sondern nur den Inhalt des jeweiligen Array-Elements, einen String.
    Der Kommentar in der UDF verweist nur darauf, dass keine Unterstützung (mehr) für ein Array als Parameter für OID besteht.

  • AutoIt Nachschlagewerk

    • BugFix
    • 20. März 2017 um 08:50
    Zitat von Hingo

    ich habe keine Beispiele von water genommen.

    Nein (hat auch nie wer behauptet) - aber von mir.

  • Tool: Datei(en) - Setzen von Datum Create/Modified

    • BugFix
    • 17. März 2017 um 19:11

    Kleine Ergänzung: Alle Attribute per Klick abrufbar.

  • Tool: Datei(en) - Setzen von Datum Create/Modified

    • BugFix
    • 17. März 2017 um 13:38

    Ich muß relativ häufig an Dateien das Erstelldatum ändern, weil dieses bei Speichervorgängen zwischen verschiedenen OS manchmal verändert wird (Datum auf NAS ist z.B. nach Spannungsausfall auf Werkseinstellung - Wird ein Dokument direkt dort abgelegt, bekommt es das falsche Datum).
    Bei Dokumenten, die einer Revision unterliegen kommt es natürlich seltsam, wenn in der Fußzeile steht "Rev. 6 vom 05.03.2017" und das Erstelldatum sagt "01.01.2010" :whistling:
    Bisher habe ich dann schnell die Codezeile für FileSetTime händisch befüllt und die Daten korrigiert.
    Nun habe ich das mal in eine kleine Oberfläche gepackt.
    - Ordner wird ausgewählt (Dateien darin werden in ein Listview geladen mit Anzeige DateCreate, DateModified)
    - Dateien mit den Attributen: Hidden, ReadOnly, System werden gleich rot eingefärbt - bei R und S ist das Ändern des Datums sowieso nicht möglich und versteckte Dateien sind sicher nicht umsonst versteckt. Falls diese Dateien doch markiert sind, werden sie vom Tool ignoriert.
    - In den Datumsfeldern werden die gewünschten Datumswerte(+ Uhrzeit) gewählt und mit "Datum Setzen" für alle markierten Dateien (selektive Mehrfachauswahl ist möglich) angewendet. Anschliessend wird das Listview neu geladen - die Änderungen sind also sofort sichtbar.

    EDIT: [v0.2] Da ich die Attribute sowieso auslese, speichere ich sie zwischen und mit Klick auf eine Datei werden deren Attribute als Tooltip gezeigt.

    EDIT: [v0.3]
    - NEU: (optional) automatische Übernahme Erstellungsdatum auch als Änderungsdatum
    - NEU: Datum aus markierter Datei in Datums-Control übernehmen
    - FIXED: Bisher keine Fehlermeldung bei versuchter Änderung einer offenen Datei. Jetzt [FILE-IN-USE] Meldung.

    AutoIt
    ;-- TIME_STAMP   2017-03-30 10:51:41   v 0.3
    ;-- charset=UTF-8
    
    
    #include <DateTimeConstants.au3>
    #include <EditConstants.au3>
    #include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <WindowsConstants.au3>
    
    
    Global $hListView, $iIndexClicked = -1, $aAttrib, $fSameDate = False
    
    
    _Main()
    
    
    Func _Main()
    	Local $hGui = GUICreate('Erstellungs- /Änderungsdatum setzen', 600, 480)
    	GUICtrlCreateLabel('Verzeichnis', 15, 18, 60)
    	Local $idPath = GUICtrlCreateInput('', 80, 15, 478, 20, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
    	GUICtrlSetBkColor(-1, 0xFFFFFF)
    	Local $idSelect = GUICtrlCreateButton('...', 563, 14, 22, 22)
    	GUICtrlCreateLabel('Erstellt', 15, 48, 40)
    	Local $idDateCreate = GUICtrlCreateDate(StringFormat('%s/%s/%s %s:%s:%s', @Year, @Mon, @MDay, @Hour, @Min, @Sec), 55, 45, 140, 22, $DTS_SHORTDATEFORMAT)
    	GUICtrlCreateLabel('Geändert', 215, 48, 45)
    	Local $idDateChange = GUICtrlCreateDate(StringFormat('%s/%s/%s %s:%s:%s', @Year, @Mon, @MDay, @Hour, @Min, @Sec), 265, 45, 140, 22, $DTS_SHORTDATEFORMAT)
    	Local $sStyle = "dd.MM.yyyy HH:mm:ss"
        GUICtrlSendMsg($idDateCreate, $DTM_SETFORMATW, 0, $sStyle)
        GUICtrlSendMsg($idDateChange, $DTM_SETFORMATW, 0, $sStyle)
    	Local $idSet = GUICtrlCreateButton('Datum Setzen', 435, 75, 150, 22)
    	Local $idCurrentDate = GUICtrlCreateButton('Dateidatum übernehmen', 15, 75, 180, 22)
    	Local $idSameDate = GUICtrlCreateCheckbox(' Datum Änderung == Erstelldatum', 215, 75)
    	Local $idListview = GuiCtrlCreateListView('Datei|Erstellt|Geändert', 15, 105, 570, 360, _
    		BitXOR(BitOR($GUI_SS_DEFAULT_LISTVIEW,$LVS_SHOWSELALWAYS),$LVS_SINGLESEL), _
    		BitOR($LVS_EX_GRIDLINES,$LVS_EX_FULLROWSELECT,$LVS_EX_DOUBLEBUFFER))
    	_GUICtrlListView_SetColumnWidth($idListview, 0, 340)
    	_GUICtrlListView_SetColumnWidth($idListview, 1, 100)
    	_GUICtrlListView_SetColumnWidth($idListview, 2, $LVSCW_AUTOSIZE_USEHEADER)
    	$hListview = GUICtrlGetHandle($idListview)
    	Local $sSelect, $sDateCreate, $sDateChange, $iIndex
    	Local $sPattern = '(\d{2})\.(\d{2})\.(\d{4}) (\d{2}):(\d{2}):(\d{2})'
    	Local $sRepl = '$3$2$1$4$5$6'
    
    
    	GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ; bei Left-Click auf Item werden Attribute als Tooltip gezeigt
    
    
    	GUISetState()
    	While True
    		Switch GUIGetMsg()
    			Case -3
    				Exit
    			Case $idSelect
    				$sSelect = FileSelectFolder('Bitte einen Ordner auswählen', @HomeDrive & '\' & @HomePath)
    				If $sSelect <> '' Then
    					GUICtrlSetData($idPath, $sSelect)
    					If __FillListview($idListview, $sSelect) = 0 Then MsgBox(16, 'Fehler', 'Der gewählte Ordner enthält keine Dateien!')
    				EndIf
    			Case $idSet
    				$sDateCreate = StringRegExpReplace(GUICtrlRead($idDateCreate), $sPattern, $sRepl)
    				$sDateChange = StringRegExpReplace(GUICtrlRead($idDateChange), $sPattern, $sRepl)
    				; Plausibilität Create<=Change prüfen (nur wenn beide Daten gesetzt werden)
    				If Number($sDateCreate) > Number($sDateChange) And (Not $fSameDate) Then
    					MsgBox(16, 'Fehler', 'Änderungsdatum liegt vor Erstellungsdatum!')
    				Else
    					__SetDate(GUICtrlRead($idPath), $idListview, $sDateCreate, $sDateChange)
    					__FillListview($idListview, GUICtrlRead($idPath))
    				EndIf
    			Case $idCurrentDate
    				Local $aSel = _GUICtrlListView_GetSelectedIndices($idListview, True)
    				If $aSel[0] = 0 Then
    					MsgBox(16, 'Fehler', 'Es wurde keine Datei ausgewählt!')
    				Else
    					_SetDateCtrl($idDateCreate, _GUICtrlListView_GetItemText($idListview, $aSel[1], 1))
    					_SetDateCtrl($idDateChange, _GUICtrlListView_GetItemText($idListview, $aSel[1], 2))
    				EndIf
    			Case $idSameDate
    				If BitAND(GUICtrlRead($idSameDate), $GUI_CHECKED) Then
    					$fSameDate = True
    					GUICtrlSetState($idDateChange, $GUI_DISABLE)
    				Else
    					$fSameDate = False
    					GUICtrlSetState($idDateChange, $GUI_ENABLE)
    				EndIf
    		EndSwitch
    	WEnd
    
    
    EndFunc
    
    
    Func _SetDateCtrl($iID, $sDate)
    	$sDate = StringRegExpReplace($sDate, '(\d{2})\.(\d{2})\.(\d{4}) (.+)', '$3/$2/$1 $4')
    	GUICtrlSetData($iID, $sDate)
    EndFunc
    
    
    
    
    Func __FillListview($idLV, $sPath)
    	Local Static $aColor[2] = [0xE5EEFF,0xBCC3FF], $iColWarning = 0xFF93B4
    	If Not FileExists($sPath) Then Return
    	Local $aFiles = _FileListToArray($sPath, '*', 1)
    	If @error Then Return 0
    	_GUICtrlListView_BeginUpdate($idLV)
    	_GUICtrlListView_DeleteAllItems($idLV)
    	Local $sItem, $sPatt = '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})', $sAttrib
    	Local $aAttr[$aFiles[0]]
    	For $i = 1 To $aFiles[0]
    		$sItem = StringFormat('%s|%s|%s', $aFiles[$i], _
    		StringRegExpReplace(FileGetTime($sPath & '\' & $aFiles[$i], 1, 1), $sPatt, '$3.$2.$1 $4:$5:$6'), _
    		StringRegExpReplace(FileGetTime($sPath & '\' & $aFiles[$i], 0, 1), $sPatt, '$3.$2.$1 $4:$5:$6'))
    		GUICtrlCreateListViewItem($sItem, $idLV)
    		$sAttrib = FileGetAttrib($sPath & '\' & $aFiles[$i])
    		$aAttr[$i-1] = $sAttrib
    		If StringInStr($sAttrib, 'H') Or StringInStr($sAttrib, 'R') Or StringInStr($sAttrib, 'S') Then
    			GUICtrlSetBkColor(-1, $iColWarning)
    		Else
    			GUICtrlSetBkColor(-1, $aColor[Mod($i,2)])
    		EndIf
    	Next
    	$aAttrib = $aAttr
    	_GUICtrlListView_EndUpdate($idLV)
    	Return $aFiles[0]
    EndFunc
    
    
    
    
    Func __SetDate($sFolder, $idLV, $sCreate, $sChange)
    	If $sFolder = '' Then Return
    	Local $aSel = _GUICtrlListView_GetSelectedIndices($idLV, True)
    	If $aSel[0] = 0 Then Return MsgBox(16, 'Fehler', 'Es wurde keine Datei ausgewählt!')
    	Local $sFile, $sAttrib, $sErr = '', $iOK
    	For $i = 1 To $aSel[0]
    		$sFile = $sFolder & '\' & _GUICtrlListView_GetItemText($idLV, $aSel[$i])
    		$sAttrib = FileGetAttrib($sFile)
    		If StringInStr($sAttrib, 'R') Then
    			$sErr &= '[READONLY] ' & $sFile & @CRLF
    			ContinueLoop
    		ElseIf StringInStr($sAttrib, 'S') Then
    			$sErr &= '[SYSTEM] ' & $sFile & @CRLF
    			ContinueLoop
    		ElseIf StringInStr($sAttrib, 'H') Then
    			$sErr &= '[HIDDEN] ' & $sFile & @CRLF
    			ContinueLoop
    		EndIf
    		$iOK = 0
    		$iOK += FileSetTime($sFile, $sCreate, 1)
    		$iOK += FileSetTime($sFile, ($fSameDate ? $sCreate : $sChange), 0)
    		If $iOK < 2 Then $sErr &= '[FILE-IN-USE] ' & $sFile & @CRLF
    	Next
    	If $sErr <> '' Then Return MsgBox(16, 'Fehler', 'Folgende Dateien wurden nicht bearbeitet:' & @CRLF & $sErr)
    EndFunc
    
    
    
    
    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    	$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    	If HWnd(DllStructGetData($tNMHDR, "hWndFrom")) = $hListView And _
    	   DllStructGetData($tNMHDR, "Code") = $NM_CLICK Then
    	   Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    		$iIndexClicked = DllStructGetData($tInfo, "Index")
    		AdlibRegister('__TipAttrib')
    	EndIf
    	Return $GUI_RUNDEFMSG
    EndFunc
    
    
    
    
    Func __TipAttrib()
    	If $iIndexClicked = -1 Then Return
    	AdlibUnRegister('__TipAttrib')
    	Local $sText = $aAttrib[$iIndexClicked]
    	_ToolTipMouseExit($sText, 1700, -1, -1, 'Attribute', 1, 1)
    	$iIndexClicked = -1
    EndFunc
    
    
    
    
    Func _ToolTipMouseExit($TEXT, $TIME=-1, $x=-1, $y=-1, $TITLE='', $ICON=0, $OPT='')
    	; Standard ToolTip, ergänzt um Schließen nach Zeit oder bei Mausbewegung
    	If $TIME = -1 Then $TIME = 3000
    	Local $start = TimerInit()
    	Local $pos, $pos0 = MouseGetPos()
    	If ($x = -1) Or ($y = -1) Then
    		ToolTip($TEXT, $pos0[0], $pos0[1], $TITLE, $ICON, $OPT)
    	Else
    		ToolTip($TEXT, $x, $y, $TITLE, $ICON, $OPT)
    	EndIf
    	Do
    		Sleep(50)
    		$pos = MouseGetPos()
    	Until (TimerDiff($start) > $TIME) Or _
    		(Abs($pos[0] - $pos0[0]) > 10 Or _
    		 Abs($pos[1] - $pos0[1]) > 10)
    	ToolTip('')
    EndFunc ;==>_ToolTipMouseExit
    Alles anzeigen

    FileSetTimeTool.png

    Dateien

    MultiFileSetTime[0.3].au3 7,6 kB – 389 Downloads
  • GUI | Variable Anzahl an Buttons... Wie Funktion zuweisen?

    • BugFix
    • 16. März 2017 um 07:39

    Wenn du eine dynamische Anzahl an Controls verwendest, ist es durchaus sinnvoll, die GUI auch dynamisch anzupassen. Hier mal ein Bsp. dafür:

    AutoIt
    Global $GUI, $aInput[2] = [1], $btAdd
    
    
    $GUI = GUICreate('Test', 400, 50)
    $aInput[1] = GUICtrlCreateInput('', 10, 10, 300, 21)
    GUICtrlSetResizing(-1, 802) ; $GUI_DOCKALL
    $btAdd = GUICtrlCreateButton('Add Input', 320, 10, 70, 21)
    GUICtrlSetResizing(-1, 802) ; $GUI_DOCKALL
    GUISetState()
    
    
    While 1
    	Switch GUIGetMsg()
    		Case -3
    			Exit
    		Case $btAdd
    			_NewCtrl()
    	EndSwitch
    WEnd
    
    
    Func _NewCtrl()
    	Local $iDiff = 31     ; == Abstand + Höhe ==> 10 + 21
    	Local Static $iY = 10 ; == Startwert vom ersten Ctrl
    	$iY += $iDiff
    	$aInput[0] += 1
    	ReDim $aInput[$aInput[0]+1]
    	Local $aWin = WinGetPos($GUI)
    	WinMove($GUI, '', $aWin[0], $aWin[1], $aWin[2], $aWin[3] + 31)
    	$aInput[$aInput[0]] = GUICtrlCreateInput('', 10, $iY, 300, 21)
    	GUICtrlSetResizing(-1, 802) ; $GUI_DOCKALL
    EndFunc
    Alles anzeigen
  • AutoIt Nachschlagewerk

    • BugFix
    • 15. März 2017 um 16:45

    Grundsätzlich habe ich nichts dagegen, wenn du Passagen aus meinem Array-Tut wortwörtlich verwendest. Aber es gehört zum guten Ton, dies vorab mit dem Ersteller zu klären, ebenso wie das Anbringen entsprechender Quellenangaben.
    Wenn dir sowas mit anderen Veröffentlichungen passiert, kannst du mal schnell Post vom Abmahnanwalt bekommen. Also sei vorsichtig mit C&P.

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™