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

Beiträge von FichteFoll

  • Aktuelle SQLite3.dll herunterladen

    • FichteFoll
    • 24. Mai 2019 um 13:41
    Zitat von BugFix

    AutoIt wirft zwar keinen Fehler, aber wenn du z.B. mit https://regex101.com/ prüfst, wird dies als Fehler angemerkt.

    regex101 zeigt nur für Php und JavaScript einen Fehler an, weil dort `/` als Markierungszeichen für reguläre Ausdrücke in der Syntax festgelegt ist. In Python (und auch AutoIt) ist dies nicht der Fall und daher unbedenklich.

  • ISN AutoIt Studio

    • FichteFoll
    • 5. Juli 2012 um 19:55
    Zitat von ISI360

    Hmm...grundsätzlich hast du ja recht. Da das ISN sehr viel mit temporären Dateien arbeitet ist dieser Schritt leider nicht ganz so leicht. Auch soll für User die das aktuelle "system" verwenden die Übernahme der Daten in das "neue System" (Speicherung der Daten im Benutzerprofil) leicht ermöglicht werden...ich werd mal sehen was sich machen lässt

    Aber zur Version 0.85 BETA (die nächste Woche erscheint) werd ich es noch so lassen wie es ist.
    Evtl. dann zur 0.9 BETA...


    Normalerweise speichern Anwendungen ihre Einstellungen (wenn sie "zahlreich" sind) in "%APPDATA\<Anwendungsname>\". Das würde das "Program Files"-Problem beheben.
    Für temporäre Dateien könntest du theoretisch "%TEMP%\<Anwendungsname>\" benutzen, ich weiß allerdings nicht, was genau du mit diesen "temporären Dateien" genau meinst.

    Für den Umstieg könntest du beim Installer (im Falle eines Updates) einfach die Konfigurationsdateien verschieben. Wenn du es portable machen willst, brauchst du entweder eine externe Anwendung (bsp. ein eigenes Programm, das alte Konfigurationen an Updates anpasst) oder du schreibst den Code in das Hauptprogramm.


    Ansonsten sieht das wirklich sehr nett aus. Sollte ich mal wieder etwas Neues in AutoIt machen, werde ich es mal austesten.

  • DeepRed92's Install Creator (in Arbeit)

    • FichteFoll
    • 3. Juni 2012 um 22:46

    Habe mal ein wenig rumgestöbert. Sieht im Allgemeinen sehr gut aus, sind überweigend Kleinigkeiten - dafür aber einige.
    Ich weiß, dass das bisher nur ein Konzept in Form eines GUIs ist, aber:

    • UPX hat nur zwei Optionen: "Ja" und "Nein". Für so etwas sind Ceckboxen gut geeignet.
    • Schön finde ich Drag'n'Drop im "Dateien" Tab. Allerdings sollte es trotzdem die Möglichkeit geben, diese auch über einen File-/DirectoryOpen-Dialog hinzuzufügen.
    • Des Weiteren kann man den Zeildateinamen nicht bearbeiten. Das ist sehr wichtig, falls man z.B. Dateien in ein Unterverzeichnis "entpacken" will.
    • "Installationsverzeichnis veränderbar?" kann auch eine Checkbox vertragen.
    • Im "Registry" Tab hat man nur ein TextInput. Man benötigt aber mindestens 3 (Schlüssel, Name, Wert), eher 4 (für den Wert-Typ).
    • "Sonstige": Warum nur RTF-Dateien? PDF oder TXT geht doch genauso gut. Oder gar CHM. Kann man alles über ShellExecute() öffnen, deswegen würde ich die Gruppe in "Informationsdateien" o.ä. ändern.
    • "Wann Ausführen?" kann man gut in Radios ausdrücken, da es nur zwei Optionen sind (und mir auch gerade keine weitere einfällt). Ansonsten gibt es auch einen Stil, der ein Combo-Control nicht editierbar macht (um damit z.B. illegale Eingaben vorzubeugen).
    • ... Warum ist da noch ein "Sonstige" Tab mit demselben Inhalt wie beim ersten (abgesehen von der Lizenz)? Wahrscheinlich Überreste.

    Ich denke, das fasst es so ziemlich zusammen. Ich werde zwar wahrscheinlich meine Installer für AutoIt-Programme weiterhin (mit AutoIt) selbst schreiben, aber der Ansatz ist sicher interessant. Werde ich weiter verfolgen.

  • Controls als Arrays

    • FichteFoll
    • 21. März 2011 um 22:10

    Du könntest "Switch" benutzten und die Abfrage lösen wie:

    [autoit]

    Switch Mod($nMsg - $Checkboxen[$iAktTab][0],4) Then
    Case 0
    $iAktCheckBox = ($nMsg - $Checkboxen[$iAktTab][0]) /4 ; Checkbox
    Case 1
    $iAktCheckBox = -1 ; Irgendetwas anderes
    Case Else
    $iAktCheckBox = -1 ; Der ganze Rest
    EndSwitch

    [/autoit]

    Ach, und AutoIt geht in "Then", wenn die Zahl größer als 0 ist. Somit würde er bei 1, 2, 3 (, 4, 5 ...) in "Then" gehen und ansonsten "Else".
    Eine präziesere Abfage kannst du mit "If Mod($nMsg - $Checkboxen[$iAktTab][0],4) = 0 Then" machen, aber Switch ist besser geeignet, wenn du mehrere Fälle bearbeiten willst.

  • IE Browserfenster - Inhalt einer Zelle auslesen

    • FichteFoll
    • 20. März 2011 um 14:46

    Ich brauche den Quellcode deiner Seite in dem Moment, wenn du sie auslesen willst, und was du auslesen willst.

  • [SciTE/Notepad++] Send To Pastebin / Get From Pastebin

    • FichteFoll
    • 20. März 2011 um 14:29

    Hab es mal eben getestet, du musst die Parameter anders handlen. Jedes " verursacht einen Konflikt. [Edit: bei selektiertem Text]

    Spoiler anzeigen
    [autoit]

    ; *******************************************************
    ; Example 1 - Open a browser to the AutoIt Homepage, get a reference
    ; to the document object and display a document attribute
    ; *******************************************************
    ;
    #include <IE.au3>
    $oIE = _IECreate ("http://www.autoitscript.com")
    $oDoc = _IEDocGetObj ($oIE)
    MsgBox(0, "Document Created Date", $oDoc.fileCreatedDate)

    [/autoit]

    resultiert in http://pastebin.com/e1HbMiSK

    [autoit]

    ; *******************************************************
    ; Example 1 - Open a browser to the AutoIt Homepage, get a reference
    ; to the document object and display a document attribute
    ; *******************************************************
    ;
    #include <IE.au3>
    $oIE = _IECreate (http://www.autoitscript.com)
    $oDoc = _IEDocGetObj ($oIE)
    MsgBox(0, Document

    [/autoit]
    [autoit]

    Case 45, 46, 48 - 57, 65 To 90, 95, 97 To 122, 126

    [/autoit]


    Das "-" muss zu "To" geändert werden. (_URIEncode)

    Und leider muss man des öfteren noch einen Captcha eingeben, weil Pastebin keine URIs in seinen Pastes mag :/ vielleicht könntest du einbauen, dass man in diesem Fall den Browser öffnet.

  • IE Browserfenster - Inhalt einer Zelle auslesen

    • FichteFoll
    • 20. März 2011 um 14:10

    Ich müsste die gesamte Struktur der Seite kennen, um an einen bestimmten Inhalt zu kommen...

    Aber du kannst das von _IECreate zurückgelieferte Objekt wie das window-Objekt in Javascript behandeln.
    Nützlich sollten dabei .getElementById und .childNodes sein.

  • Drag and Drop innerhalb eines Listview

    • FichteFoll
    • 6. Februar 2011 um 10:51

    Wirklich sehr schick, das "If IsArray($aHit) Then _GUICtrlListView_SetItemFocused($hListView, $aHit[0])" gefällt mir besonders :D Die Methode werde ich wohl auch bei mir verwenden, danke. Und WM_NOTIFY habe ich sowieso schon registriert.

    Übrigens, das #forceref wird allein für Au3Check benutzt,

    Code
    -w 5      : local var declared but not used (off)


    Da man bei einer WndProc (oder eher eine WM_Proc) nicht immer alle Parameter benutzt, werden die Variablen dann als Warnung angezeigt. Mit #forceref gibt man an, diese Variablen "zu benutzen", ohne dass man sie wirklich benötigt.

  • ListView Drag And Drop auch nach oben und unten möglich?

    • FichteFoll
    • 5. Februar 2011 um 16:00

    Kleines Update, da ich selbst so eine Funktion benötigte: Das Beispiel in dem von Douky angesprochenen Post funktioniert nicht mehr richtig, ich habe das mal korrigiert. Außerdem kann man das Script nun, da ich noch $GUI_EVENT_PRIMARYUP hinzugefügt habe, während des Verschiebens auf andere Events reagieren. Allerdings benötigt diese Variante drei globale Variablen, zusätzlich zum ListView.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>

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

    Opt("GUIOnEventMode", 1)

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

    Global $ListView, $iFrom, $iTo, $fTracking = False

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

    $GUI = GUICreate("Test-GUI", 500, 300, -1, -1, -1, $WS_EX_ACCEPTFILES)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_OnGuiEvent_Close")
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_OnGuiEvent_PrimaryDown")
    GUISetOnEvent($GUI_EVENT_PRIMARYUP, "_OnGuiEvent_PrimaryUp")
    $ListView = GUICtrlCreateListView("Eintrag", 10, 10, 480, 280)
    _GUICtrlListView_SetColumnWidth($ListView, 0, 475)

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

    For $i = 1 To 10
    $Item = GUICtrlCreateListViewItem("Eintrag " & $i, $ListView)
    Next

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

    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(100)
    WEnd

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

    ; ====================================================================

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

    Func _OnGuiEvent_Close()
    Exit
    EndFunc ;==>raus

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

    Func _OnGuiEvent_PrimaryDown()
    Local $aCursor = GUIGetCursorInfo($GUI)

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

    If $aCursor[4] = $ListView Then
    $fTracking = True
    $iFrom = _GUICtrlListView_GetHotItem($ListView)
    EndIf
    EndFunc ;==>_MoveListViewItem

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

    Func _OnGuiEvent_PrimaryUp()
    Local $aCursor = GUIGetCursorInfo($GUI)
    If $aCursor[4] = $ListView And $fTracking Then
    $iTo = _GUICtrlListView_GetHotItem($ListView)

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

    If $iFrom <> $iTo Then
    _MoveLVItem($iFrom, $iTo - $iFrom, GUICtrlGetHandle($ListView))
    _GUICtrlListView_SetSelectionMark($ListView, $iTo)
    EndIf
    EndIf
    $fTracking = False
    EndFunc

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

    ;----------------------------------------------------------------------------------------------------------------------
    ; Funktion _MoveLVItem($ItemIndex, $StepWidth, $hLV)
    ;
    ; Beschreibung verschiebt per Index angegebenen Eintrag eines ListViewCtrl um eine Anzahl Positionen
    ;
    ; Parameter $ItemIndex: Index der Zeile
    ; $StepWidth: Anzahl Zeilen um die der Eintrag verschoben wird (negative Zahl - aufwärts)
    ; $hLV: ListView ID
    ;
    ; Erfordernisse #include <GuiListView.au3>
    ;
    ; Autor BugFix ([email='bugfix@autoit.de'][/email])
    ;----------------------------------------------------------------------------------------------------------------------
    #include <GuiListView.au3>
    Func _MoveLVItem($ItemIndex, $StepWidth, $hLV)
    If ($ItemIndex + $StepWidth) < 0 Or _
    ($ItemIndex + $StepWidth) > _GUICtrlListView_GetItemCount($hLV) - 1 Then Return SetError(1)

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

    Local $txt2skip = _GUICtrlListView_GetItemText($hLV, $ItemIndex)

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

    If $StepWidth > 0 Then
    _GUICtrlListView_InsertItem($hLV, $txt2skip, $ItemIndex + $StepWidth + 1)
    _GUICtrlListView_DeleteItem($hLV, $ItemIndex)
    Else
    _GUICtrlListView_InsertItem($hLV, $txt2skip, $ItemIndex + $StepWidth)
    _GUICtrlListView_DeleteItem($hLV, $ItemIndex + 1)
    EndIf

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

    Return -1
    EndFunc ;==>_MoveLVItem

    [/autoit]

    Edit: https://autoit.de/index.php?page…7938#post207938

  • ListView Drag And Drop auch nach oben und unten möglich?

    • FichteFoll
    • 5. Februar 2011 um 11:51

    http://www.autoitscript.com/forum/topic/12…rsion-3-feb-11/ sieht da sehr vielversprechend aus, wurde mir von Raupi empfohlen, aber habe es noch nicht getestet.

  • WM_RBUTTONDOWN wird nicht immer aufgerufen

    • FichteFoll
    • 4. Februar 2011 um 22:09

    Danke Greenhorn, dein Beispiel funktioniert bestens. Allerdings verstehe ich nicht, warum du mit 'GUIRegisterMsg ($WM_SYSCOMMAND, "OnSysCommand")' WM_SYSCOMMAND registrierst. Wenn man "$wParam = $SC_CLOSE" (also ein "=") benutzt, wird der If-Zweig ausgeführt, aber durch das "Return 0" wird anschließend kein WM_CLOSE oder WM_DESTROY ausgeführt, was mich verwundert; man könnte auch einfach bei WM_CLOSE 0 zurückgeben...

    Ich überlege noch, ob ich die WndProc-Variante oder einfach ein ListView nehmen soll, vielleicht kann mir jemand meine Fragen im Post oben beantworten. Währenddessen arbeite ich an meinen Unicode-Ini-Funktionen.

    Edit: Seite lange nicht aktualisiert,
    Raupi : Auf $GUI_EVENT_SECONDARYDOWN hätte ich eigentlich selbst kommen können, das erspart mir WM_RBUTTONDOWN komplett. Ich denke, dass ich dann wohl erst einmal dise Methode benutze, bis ich das Drag&Drop vom ListView rausgefunden habe. Dann würde sich eine Umstellung lohnen (ich weiß, dass man auch ein Workaround für ListBox machen könnte, aber dazu hätte ich auch keine Lust).

    Danke auf jeden Fall euch beiden für die Hilfe.

  • WM_RBUTTONDOWN wird nicht immer aufgerufen

    • FichteFoll
    • 4. Februar 2011 um 20:11

    Habe mittlerweile noch etwas mit dem ListView rumgespielt, um es so aussehen zu lassen, wie ich das gerne hätte.... Wie kann ich verhindern, dass eine horizontale Scrollleiste angezeigt wird? Wenn ich die Größe der ersten Spalte auf das Maximum setze und anschließend so viele Einträge hnzufüge, dass eine vertikalte Sl angezeigt werden muss, dann wird auch eine horz. angezeigt, da die vert. dann den Rest der Zeile verdeckt.
    Wie kann ich erreichen, dass Items in dem ListView per Drag&Drop verschoben werden können? Ich meine beim Cursor wird ja immer washinzugefügt, also muss es auch so eine Funktion geben.
    Und auch habe ich bei der ListBox mit _SetData gearbeitet, aber das ließe sich mit Assign und Eval lösen.

  • WM_RBUTTONDOWN wird nicht immer aufgerufen

    • FichteFoll
    • 4. Februar 2011 um 18:21

    Beim Rumexperimentieren mit meinem ListBox-Control hat mich gestört, dass bei einem Rechtsklick (welcher das Kontextmenü aufruft) das Item nicht ausgewählt wird (anders als beim ListView), und deswegen habe ich mir etwas zusammengebastelt. Bei ListView hatte ich mit NM_RCLICK mit WM_NOTIFY gearbeitet, aber das wird von einer ListBox nicht gesendet. Hier der relevante Auszug:

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListBox.au3>

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

    $hGUI_Main = GUICreate("TestGUI", 300, 400)
    $hList_Downloads = GUICtrlCreateList("list1", 10, 20, 280, 360)
    GUICtrlSetData(-1, "list2|list3|list4")

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

    GUIRegisterMsg($WM_RBUTTONDOWN, "WM_RBUTTONDOWN")
    GUISetState()

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

    Do
    Until GUIGetMsg() = -3

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

    Func WM_RBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $wParam
    Local $cx = _WinAPI_LoWord($lParam), $cy = _WinAPI_HiWord($lParam);, $aiWinPos = WinGetPos($hGUI_Main)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $cx = ' & $cx & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $iIndex = _GUICtrlListBox_ItemFromPoint($hList_Downloads, $cx, $cy);$cx - $aiWinPos[0], $cy - $aiWinPos[1])
    If $iIndex <> -1 Then _GUICtrlListBox_SetCurSel($hList_Downloads, $iIndex)

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

    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_RBUTTONDOWN

    [/autoit]

    Wie man am Debug sehen kann, wird die Funktion (zumindest bei mir) extrem selten ausgeführt, alle 10 Klicks, und liefert manchmal einen völlig schwachsinnigen Wert zurück (teilweise 1800, was auf der der "totalen" Mausposition entspräche, auf der rechten Seite, obwohl die Position relativ zum Client sein soll). Ähnliche Ergebnisse bei WM_RBUTTONDOWN und WM_RBUTTONCLICK sowie WM_NCRBUTTONUP und WM_NCRBUTTONDOWN, welche allerdings zuverlässig ausgeführt werden, wenn man auf den X-Button drück (Rechtsklick natürlich). Ich kann mir ehrlich gesagt nicht erklären, wie es dazu kommt. Link zur MSDN.

  • Icon einer Datei wie vom Explorer laden & per GDI+ zeichnen

    • FichteFoll
    • 3. Februar 2011 um 23:16

    Finde ich verwunderlich, dass es mit _WinAPI_ExtractIconEx funktioniert, wo doch in der Hilfe steht "Name der dll oder ico Datei, von welcher Icons extrahiert werden sollen", was mich in der SB stutzig gemacht hat. Aber dennoch schön, dass es funktioniert.

    Wie auch immer, du solltest dennoch den DC in einer Variable speichern und anschließend mit _WinAPI_ReleaseDC wieder freigeben. Das ist sicherer und spart vor allem Ressourcen, da du ihn ja nur einmal benutzt.

  • Rechtsklick bei ListView für ein Kontextmenü

    • FichteFoll
    • 31. Januar 2011 um 16:44

    Dank, funktioniert jetzt. Habe lange bei $hWndFrom Probleme gehabt, da es zu keinem Zeitpunkt gleich meinem ListView war, das habe ich jetzt mit GUICtrlGetHandle lösen können.

    Für die Vervollständigung:

    Spoiler anzeigen
    [autoit]

    Func WM_NOTIFY($hWnd, $iMsg, $iWparam, $iLparam)
    #forceref $iMsg, $iWparam
    Local $hWndFrom, $iCode, $tNMHDR, $tMsgFilter, $hMenu
    $tNMHDR = DllStructCreate($tagNMHDR, $iLparam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iCode = DllStructGetData($tNMHDR, "Code")
    Local Static $hWndList = GUICtrlGetHandle($hList_Log)

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

    Switch $hWndFrom
    Case $hList_Log, $hWndList
    Switch $iCode
    Case $NM_RCLICK
    MsgBox(0, "olol", "it works")
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • Rechtsklick bei ListView für ein Kontextmenü

    • FichteFoll
    • 30. Januar 2011 um 18:39

    Hallo,
    ich möchte ein Kontextmenü für ein ListView-Control erstellen und anhand der ausgewählten Zeile dann die Einträge im Menü aktivieren/deaktivieren. Ein sehr ähnliches Beispiel gibt es bei _GUICtrlRichEdit_CanRedo, nur mit einem RichTextEdit und es werden andere Nachrichten benutzt.
    Da ich allerdings recht wenig Erfahrung bei den Windowsnachrichten habe und weder die wichtigsten so kenne noch deren Parameter (müsste ich wieder alles aufwendig in der msdn nachschlagen), frag ich einfach mal hier, wie ich bewerkstelligen kann, dass mein Code bei einem Rechtsklick auf das Control ausgeführt wird.

    Danke im Voraus.

  • _FTP_FileGetSize

    • FichteFoll
    • 27. August 2010 um 11:40

    Ich habe allerdings die Größe von _FTP_FileFindFirst zurückgeben lassen.

    Wie auch immer, es wird wohl an seinen Servern liegen... Wirklich merkwürdig.

  • _FTP_FileGetSize

    • FichteFoll
    • 26. August 2010 um 23:36

    Probier mal folgendes:

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <FTPEx.au3>
    #include <Array.au3>

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

    $server = 'ftp.csx.cam.ac.uk'
    $username = ''
    $pass = ''

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

    $Open = _FTP_Open('MyFTP Control')
    $Conn = _FTP_Connect($Open, $server, $username, $pass)

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

    Local $h_Handle, $aFiles[1][2] = [[0, 0]], $i = 0
    $aFile = _FTP_FindFileFirst($Conn, "/pub/software/programming/pcre/", $h_Handle)

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

    Do
    ReDim $aFiles[$i + 1][2]
    $aFiles[$i][0] = $aFile[10]
    $aFiles[$i][1] = $aFile[9]
    $i += 1
    $aFile = _FTP_FindFileNext($h_Handle)
    Until @error

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

    _ArrayPrint($aFiles)
    ;~ _ArrayDisplay($aFiles)

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

    $FindClose = _FTP_FindFileClose($h_Handle)

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

    $Ftpc = _FTP_Close($Open)

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

    ; #Function# ===========================================================================================================================================
    ; Name............: _ArrayPrint
    ; Description.....: Prints a one or two dimensional array as a table into the console or just returns the table as string
    ; Syntax..........: _ArrayPrint($aArray)
    ; Parameters......:
    ; $aArray - The Array to print; with one or two dimensions
    ; $bConsole - [optional] If False the table will not be printed to the console and only returned
    ; Return values...:
    ; Success - The table as string
    ; Failure v
    ; -1 - $aArray is not an array
    ; -2 - $aArray has more than two dimensions
    ; Author .........: FichteFoll
    ; Modified........:
    ; Remarks ........:
    ; Related ........: __Max (or _Max from Math.au3)
    ; Link ...........;
    ; Example ........; _ArrayPrint(WinList())
    ; ======================================================================================================================================================
    Func _ArrayPrint($aArray, $bConsole = True)
    If Not IsArray($aArray) Then Return -1

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

    Switch UBound($aArray, 0)
    Case 1
    Local $sLine, $sOutput = ''
    Local $aiLenMax[2] = [__Max(StringLen(String(UBound($aArray, 1) - 1)), 3), 0], _
    $acFlag[2] = ['', ''] ; "Row" = 3

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

    For $i = 0 To UBound($aArray, 1) - 1
    $aiLenMax[1] = __Max(StringLen(String($aArray[$i])), $aiLenMax[1])
    If IsString($aArray[$i]) Then $acFlag[1] = '-'
    Next

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

    ; Header
    $sLine = StringFormat('+ %' & $acFlag[0] & $aiLenMax[0] & 's + %' & $acFlag[1] & $aiLenMax[1] & 's +', 'Row', 'Content')

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

    $sOutput &= $sLine
    If Not @Compiled Then $sLine = '- ' & $sLine
    If $bConsole Then ConsoleWrite($sLine & @CRLF)

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

    ; Lines
    For $i = 0 To UBound($aArray, 1) - 1
    $sLine = StringFormat('| %' & $acFlag[0] & $aiLenMax[0] & 'd | %' & $acFlag[1] & $aiLenMax[1] & 's +', $i, StringReplace(String($aArray[$i]), "'", "\'"))

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

    $sOutput &= @CRLF & $sLine
    If Not @Compiled Then $sLine = '> ' & $sLine
    If $bConsole Then ConsoleWrite($sLine & @CRLF)
    Next

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

    ; Footer
    $sLine = '+'
    For $i = 0 To 1
    $sLine &= '-'
    For $j = 1 To $aiLenMax[$i]
    $sLine &= '-'
    Next
    $sLine &= '-+'
    Next

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

    $sOutput &= @CRLF & $sLine
    If Not @Compiled Then $sLine = '- ' & $sLine
    If $bConsole Then ConsoleWrite($sLine & @CRLF)

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

    Return $sOutput

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

    Case 2
    Local $sExec, $sLine, $sOutput = ''
    Local $aiElmts[2] = [UBound($aArray, 1), UBound($aArray, 2)], _
    $aiLenMax[$aiElmts[1] + 1], _
    $acFlag[$aiElmts[1] + 1]
    $aiLenMax[0] = __Max(StringLen(String(UBound($aArray, 1) - 1)), 3) ; "Row" = 3
    $acFlag[0] = '-'

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

    For $j = 0 To $aiElmts[1] - 1
    $aiLenMax[$j + 1] = StringLen(String(UBound($aArray, 2) - 1)) + 4 ; "Col_" = 4
    Next
    For $i = 0 To $aiElmts[0] - 1
    For $j = 0 To $aiElmts[1] - 1
    $aiLenMax[$j + 1] = __Max(StringLen(String($aArray[$i][$j])), $aiLenMax[$j + 1])
    If IsString($aArray[$i][$j]) Then $acFlag[$j + 1] = '-'
    Next
    Next

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

    ; Header
    $sExec = "StringFormat('+ %" & $acFlag[0] & $aiLenMax[0] & "s"
    For $j = 0 To $aiElmts[1] - 1
    $sExec &= " + %" & $acFlag[$j + 1] & $aiLenMax[$j + 1] & "s"
    Next
    $sExec &= " +', 'Row'"
    For $j = 0 To $aiElmts[1] - 1
    $sExec &= ", 'Col_" & $j & "'"
    Next
    $sExec &= ")"
    $sLine = Execute($sExec)

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

    $sOutput &= $sLine
    If Not @Compiled Then $sLine = '- ' & $sLine
    If $bConsole Then ConsoleWrite($sLine & @CRLF)

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

    ; Lines
    For $i = 0 To $aiElmts[0] - 1
    $sExec = "StringFormat('| %" & $aiLenMax[0] & "d"
    For $j = 0 To $aiElmts[1] - 1
    $sExec &= " | %" & $acFlag[$j + 1] & $aiLenMax[$j + 1] & "s"
    Next
    $sExec &= " |', " & $i
    For $j = 0 To $aiElmts[1] - 1
    $sExec &= ", '" & StringReplace(String($aArray[$i][$j]), "'", "\'") & "'"
    Next
    $sExec &= ")"
    $sLine = Execute($sExec)

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

    $sOutput &= @CRLF & $sLine
    If Not @Compiled Then $sLine = '> ' & $sLine
    If $bConsole Then ConsoleWrite($sLine & @CRLF)
    Next

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

    ; Footer
    $sLine = '+'
    For $i = 0 To $aiElmts[1]
    $sLine &= '-'
    For $j = 1 To $aiLenMax[$i]
    $sLine &= '-'
    Next
    $sLine &= '-+'
    Next

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

    $sOutput &= @CRLF & $sLine
    If Not @Compiled Then $sLine = '- ' & $sLine
    If $bConsole Then ConsoleWrite($sLine & @CRLF)

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

    Return $sOutput
    Case Else

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

    EndSwitch

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

    Return -2
    EndFunc ;==>_ArrayPrint

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

    Func __Max($nNum1, $nNum2)
    If $nNum1 > $nNum2 Then Return $nNum1
    Return $nNum2
    EndFunc ;==>__Max

    [/autoit]

    Und vergleich die Dateigrößen in der Konsole mit den per HTML sichtbaren: ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
    Bei mir funktioniert das super, wenn es bei dir nicht funktioniert, liegt es bestimmt an deiner FTPEx.au3 oder AutoIt Version.

    PS: _ArrayDisplay hat mich irgendwie dazu inspiriert _ArrayPrint zu basteln...

  • Combolist

    • FichteFoll
    • 26. August 2010 um 18:49

    Du hast jetzt in deinen letzten drei Posts jeweils etwas komplett anderes geschrieben und immer ist der Text kaum zu verstehen.

    So gern ich dir auch helfen möchte, so geht es beim besten WIllen nicht.

  • InetGet über Cancel Button abbrechen

    • FichteFoll
    • 26. August 2010 um 18:41
    Spoiler anzeigen
    [autoit]


    ; Advanced example - downloading in the background
    Local $hDownload = InetGet("http://www.autoitscript.com/autoit3/files/beta/update.dat", @TempDir & "\update.dat", 1, 1)
    Do
    Sleep(50)
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $Cancel
    InetClose($hDownload)
    Exit
    EndSwitch
    Until InetGetInfo($hDownload, 2) ; Check if the download is complete.
    Local $nBytes = InetGetInfo($hDownload, 0)
    InetClose($hDownload) ; Close the handle to release resourcs.

    [/autoit]


    würde der Lösung entsprechen, aber die Implementierung fehlt halt noch.

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™