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

Beiträge von TheLuBu

  • Labels - bessere Gestaltung und Suchfunktion

    • TheLuBu
    • 30. September 2011 um 10:37

    Hier mal ein Beispiel, was vielleicht für einen Anfänger einfacher ist ;)

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>

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

    _Main()

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

    Func _Main()
    Local $iI, $hListView
    GUICreate("ListView: Sucht ein Item", 400, 300)
    $hListView = GUICtrlCreateListView("", 2, 2, 394, 268)
    GUISetState()
    ; Fügt die Spalten hinzu
    _GUICtrlListView_AddColumn($hListView, "Items", 100)
    _GUICtrlListView_AddColumn($hListView, "NewItems", 100)
    ; Fügt die Items hinzu
    _GUICtrlListView_BeginUpdate($hListView)
    For $iI = 1 To 100
    _GUICtrlListView_AddItem($hListView, "Item " & $iI)
    _GUICtrlListView_AddSubItem($hListView, $iI- 1, "Test " & $iI, 1)
    Next
    _GUICtrlListView_EndUpdate($hListView)

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

    ; Setzt für Item 50 einen Parameterwert
    _GUICtrlListView_SetItemParam($hListView, 49, 1234)

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

    ; Suche nach Zielitem
    _GUICtrlListView_EnsureVisible($hListView, $iI)
    $input = InputBox("Suche", "zu suchendes Item angeben", "Item 11")
    $Found = 0
    For $k = 0 To _GUICtrlListView_GetColumnCount($hListView) ; für alle Spalten
    For $i = 0 To _GUICtrlListView_GetItemCount($hListView) ; für alle Zeilen
    If StringInStr(_GUICtrlListView_GetItemText($hListView, $i, $k), $input) <> 0 Then; Wenn der Itemtext gleich dem Suchwort ist
    _GUICtrlListView_SetItemSelected($hListView, $i, True, False) ; Wählt das gefundene Item aus
    _GUICtrlListView_EnsureVisible($hListView, $i) ; Scrollt bis zum gefundenen Item
    MsgBox(0, "Gefunden", "Text gefunden in Zeile " & $i)
    $Found = 1
    EndIf
    Next
    Next
    If $Found = 0 THen
    MsgBox(0, "Nicht gefunden", "Text wurde nicht gefunden")
    EndIf
    Exit
    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
    EndFunc ;==>_Main

    [/autoit]

    -- EDIT --
    war ein kleiner Fehler drin, hab ich mal editiert

  • StringReplace - Problem in Rechner

    • TheLuBu
    • 30. September 2011 um 09:53

    naja du hast eine Inputbox, also einfach

    [autoit]

    $Korrektur = Stringreplace($Inputbox, ",", ".")

    [/autoit]

    -EDIT-
    mal auf die ZEile aus deinem Script angepasst

    [autoit]

    Global $Var_KM

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

    ...

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

    If GUICtrlRead($KILO_P) <> '' Then $Var_KM = (GUICtrlRead($KILO_P)* GUICtrlRead($ANZ_FAHR) & ' €') ; Handelt es sich um eine Eingabe bei der Kilometerpauschalen, rechne den Betrag * die Anzahl der Anfahrten
    If GUICtrlRead($KILO_AN) <> '' Then $Var_KM = (GUICtrlRead($KILO_AN)* Stringreplace(GUICtrlRead($BETR_AN), ",", ".")* GUICtrlRead($ANZ_FAHR) & ' €') ; Handelt es sich um eine Eingabe bei den Anfahrtskilometern, rechne den Betrag * die Anzahl der Anfahrten * den Betrag pro Kilometer
    GUICtrlSetData($H_Gesamt, $Var_KM) ; Gib bei den Gesamtkilometern das Ergebnis aus

    [/autoit]
  • GDI+ globale Variable setzt sich zurück

    • TheLuBu
    • 27. September 2011 um 14:32

    Deine Funktion

    [autoit]

    Func _charchange($buffer, $bk, $char, $graphic, $bitmap, $direction = "start")

    [/autoit]


    heißt du übergibst der Funktion eine Variable $char.

    Laut Hilfe:
    "Wenn Variablen verwendet werden, wird zuerst geprüft, ob die Variable lokal existiert, und erst danach, ob sie global deklariert ist."

    Das heißt in der Funktion nutzt er das Loakle $char, ausserhalb das Globale.
    du änderst nur das Lokale, in der Funktion, gültige char.

    Warum übergibst du $char überhaupt an die Funktion? ist doch global ;)

  • ListView durchsuchen nach bestimmten Wörtern

    • TheLuBu
    • 27. September 2011 um 14:11

    ja, du rufst die Funktion dann mit dem Wort auf, also bei nem Inputfeld wäre es

    [autoit]

    $inputwert = InputBox ( "title", "prompt" , "default")
    $Anzahlwort = Wortzaehlen($inputwert)

    [/autoit]
  • ListView durchsuchen nach bestimmten Wörtern

    • TheLuBu
    • 27. September 2011 um 13:54

    3 Sachen geändert
    1. neue Globale Variable
    2. In der Load Funktion wird der Counter hochgezählt
    3. Neue Funktion Wortzaehlen mit Returnwert

    [autoit]


    Global $counter = 0

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

    Func Load() ; Datenbank-Datei laden
    Local $sItem, $aTmp
    Local $hFile = FileOpen($sDBFile, 0) ; Datei zum lesen öffnen
    $nGesamt = 0
    If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
    _GUICtrlListView_BeginUpdate($hLVHandle) ; Listview sperren
    While True ; Endlosschleife
    $sItem = FileReadLine($hFile) ; Zeile aus der Datei lesen
    If @error Then ExitLoop ; wenn das Ende der Datei erreicht ist, dann Endlosschleife verlassen
    $counter += 1
    $aTmp = StringSplit($sItem,"|") ;<=============
    ;_ArrayDisplay($aTmp)
    $nGesamt += $aTmp[5] ;<=========== Tagesarbeitszeit hinzuaddieren
    GUICtrlCreateListViewItem($sItem, $hListView) ; mit den eingelesenen Daten einen neuen Listview-Eintrag erstellen
    WEnd
    _GUICtrlListView_EndUpdate($hLVHandle) ; Listview wieder freigeben
    FileClose($hFile) ; Datei schließen
    EndIf
    GUICtrlSetData($Summe,$nGesamt) ;<=========== Summe anzeigen
    EndFunc ;==>Load

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

    Func Wortzaehlen($Wort)
    Local $wortcounter = 0
    For $i = 1 To $counter
    If _GUICtrlListView_GetItemText($hListView, $i, 2) = $Wort Then $wortcounter += 1
    Next
    Return $wortcounter
    EndFunc

    [/autoit]

    Müsstest du jetzt nurnoch an der Stelle einbauen, an der du das haben willst ;)

  • Formular wird nicht gefüllt

    • TheLuBu
    • 27. September 2011 um 13:45

    Aus der Hilfe:

    [autoit]

    ; *******************************************************
    ; Beispiel 2 - Ähnlich wie Beispiel 1, nur dass hier dem gewünschten Element der Fokus übergeben
    ; wird und dann über ControlSend() Enter gesendet.
    ; Verwende diese Technik, wenn Skripte im Browser verhindern,
    ; dass AutoIt das Ende der Aktion mitbekommt und das Skript fortgesetzt wird.
    ; *******************************************************
    ;
    #include <IE.au3>
    $oIE = _IE_Example ("form")
    $oSubmit = _IEGetObjByName ($oIE, "submitExample")
    $hwnd = _IEPropertyGet($oIE, "hwnd")
    _IEAction ($oSubmit, "focus")
    ControlSend($hwnd, "", "[CLASS:Internet Explorer_Server; INSTANCE:1]", "{Enter}")

    [/autoit]


    --EDIT-- Habs grade ausprobiert, der Fokus wird zwar gesetzt , aber man ist immernoch in der Adresszeile.
    Ich würde es mit einem Mouseclick versuchen, sonst weiß ifch aber auch nicht weiter

  • Formular wird nicht gefüllt

    • TheLuBu
    • 27. September 2011 um 12:07

    bei mir trägt er es ein.

    Was für eine Meldung kriegst du denn?
    Diesselbe Fehlermeldung kann nicht sein, weil du ne andere Funktion nutzt

  • Formular wird nicht gefüllt

    • TheLuBu
    • 27. September 2011 um 11:33

    Nimm nicht

    [autoit]

    _IEFormGetCollection

    [/autoit]


    sondern

    [autoit]

    _IEFormGetObjByName

    [/autoit][autoit]

    #include <IE.au3>
    $oIE = _IECreate()
    _IENavigate($oIE,"https://ssl-eu1.t-systems.com/dana-na/auth/url_default/welcome.cgi") ; VPN-Login aufrufen

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

    $oFormular = _IEFormGetObjByName($oIE,"frmLogin") ; Forumular festlegen

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

    $oUsername = _IEFormElementGetObjByName($oFormular,"username") ; Eingabefeld bestimmen

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

    _IEFormElementSetValue($oUsername,"test") ; Username eintragen

    [/autoit]
  • ListView durchsuchen nach bestimmten Wörtern

    • TheLuBu
    • 27. September 2011 um 11:27

    Nen bisschen Code würde helfen, damit man das direkt an deins anpassen kann.
    Ansonsten würd ich

    [autoit]


    #Include <GuiListView.au3>
    _GUICtrlListView_GetItemText($hWnd, $iIndex[, $iSubItem = 0])

    [/autoit]


    in ner Schleife durchlaufen lassen

  • Datenbank nutzen, aber wie?

    • TheLuBu
    • 20. September 2011 um 14:05

    ich mach meine Abfragen immer so:

    PHP
    include("db_config.php");
    $sql = mysql_query('SELECT id, titel, subtitel FROM `DVDs`');
    if (!$sql ) {
    	die('Ung&uuml;ltige Abfrage: ' . mysql_error());
    }
    $numOfCols = mysql_num_fields($sql);
    $numOfRows = mysql_num_rows($sql);
    If (!$numOfRows) {
    	mysql_free_result($sql);
    echo ("Keine Daten gefunden");
    exit();
    }
    while ($row = mysql_fetch_array($sql)) {
    echo $row[0] . '|' . row[1] . '|' . row[2] . '<br>';
    }
    Alles anzeigen
  • Prüfen ob Datei vorhanden

    • TheLuBu
    • 13. September 2011 um 15:37
    [autoit]


    $exist = 0
    $var = EnvGet("PATH") ;PATH Variablen auslesen
    MsgBox(4096, "Die Pfad-Variable lautet:", $var)
    $Split = Stringsplit($var, ";") ; Pfade trennen
    For $i = 1 To $Split[0]
    If FileExists($Split[$i]&"\nibread.exe") Then ; alle Ordner durchsuchen
    $exist = $i
    Exitloop
    EndIF
    Next
    If $exist <> 0 Then
    MsgBox(4096, "Die Datei liegt hier:", $Split[$exist])
    Else
    MsgBox(4096, "Die Datei wurde nicht gefunden", "Die Datei wurde nicht gefunden")
    EndIf

    [/autoit]
  • Prüfen ob Datei vorhanden

    • TheLuBu
    • 13. September 2011 um 15:00

    mit

    [autoit]

    $var = EnvGet("PATH")
    MsgBox(4096, "Die Pfad-Variable lautet:", $var)

    [/autoit]


    kriegst du alle Pfade, mit ";" getrennt, die in der PATH Variable stehen.

    Das ganze mit

    [autoit]

    Stringsplit($var, ";")

    [/autoit]

    trennen und alle Pfade durchgehen.

    P.S:
    nicht ganz 1 minute in der Autoit Hilfedatei, einfach mal Spasseshalber nach "PATH" gesucht ;)

  • Starten und Beenden

    • TheLuBu
    • 13. September 2011 um 11:52

    Du hast 12 Programme, aber nur 11 mögliche Einträge.

    [autoit]

    Dim $programs[12][3]

    [/autoit]


    immer einmal mehr als du Zeilen hast, weil wegen der 0 ^^

  • Autoit .jar Dateien verwalten

    • TheLuBu
    • 13. September 2011 um 11:44

    schau mal nach der zip.au3 (UDF) (windows Interne Packfunktionen) oder die 7-Zip UDF (nutzt eben 7zip.exe).
    Soweit ich weiß, sind die .jar Dateien auch nur Archive, die du dann damit bearbeiten kannst.
    Ich bin mir allerdings nicht sicher, ob das Windowsinterne Packprogramm .jar Dateien erkennt, müsste man mal testen ;)

  • Hilfe bei regex o.ä. um zeilenweise Inhalte aus einer Datei in ein Array zu schreiben

    • TheLuBu
    • 12. September 2011 um 11:39

    Vielleicht hilft dir ja

    [autoit]

    StringStripWS

    [/autoit]


    oder eine der anderen Strip Funktionen dabei

  • Über Auswahlliste zu Anker auf selben Seite springen

    • TheLuBu
    • 9. September 2011 um 14:41

    Habs jetzt so gelöst:

    PHP
    <script language="JavaScript">
    function Go (select) {
    var wert = select.options[select.options.selectedIndex].value;
    if (wert == "leer") {
    select.form.reset();
    self.location.href = select.options[1].value;
    }else {
    self.location.href = wert;
    }
    }
    function Reset (select) {
    select.form.reset();
    }
    </script>
    Alles anzeigen

    Die Auswahl:

    PHP
    <form>
      <select class="innertable" name="Datumauswahl" size="1" id="Jumptodate" name="Jumptodate" onchange="Go(this)" onClick="Reset(this)">
      <option value="leer">Datum</option>
            <?php
    while ($row = mysql_fetch_array($ergebnis)) {
    	echo '<option value="#' . $row[0] . '">' . date_mysql2german($row[0]) . '</option>';
    }
            mysql_data_seek($ergebnis, 0);
    
    
            ?>
    </select>
    </form></th>
    Alles anzeigen

    Er springt hin, genauso wie ich es wollte ;)

  • Über Auswahlliste zu Anker auf selben Seite springen

    • TheLuBu
    • 8. September 2011 um 10:19

    Hallöchen ihr lieben,
    ich arbeite grade an der Darstellung einer Tabelle aus MySQL. Die Tabelle ist fertig und wird auch richtig dargestellt.
    Jetzt möchte ich gerne eine Auswahlliste über der Tabelle haben, mit der man zu einem bestimmten Eintragsdatum springen kann.

    Hier mal der COde für die Auswahlliste

    PHP
    <form action="Statistiken.php" method="post">
      <select name="Datumauswahl" size="1" id="Jumptodate" name="Jumptodate" onchange="location.href = 'Statistiken.php?#' + this.options[this.selectedIndex].value;">
            <?php
    while ($row = mysql_fetch_array($ergebnis)) {
        echo '<option value="' . $row[0] . '">' . date_mysql2german($row[0]) . '</option>';
    }
    mysql_data_seek($ergebnis, 0);
    ?>
    </select>
    </form>


    Ich habe im Netz geforscht und der Eventhandler onchange wäre genau das richtige, allerdings will der nicht zu dem Eintrag springen.

    Zur Tabelle:

    PHP
    echo '<td><a name="#' . $row[0] . '">', date_mysql2german($row[0]), "</a></td>";


    Jeder Datumswert kriegt einen Anker, jedes Datum kommt nur einmalig vor.

    Im generierten HTML Quelltext stimmt die Tabelle soweit, aber er springt eben nicht, wenn man etwas Auswählt.

    Würde mich über eure Hilfe freuen.

  • Speichern eines arrays in einer Text datei

    • TheLuBu
    • 7. September 2011 um 08:21

    ich arbeite ebenfalls sehr viel mit Excel und habe mir angewöhnt, die zu bearbeitende Datei vorher als .csv zu speichern und dann als Array einzulesen.

    Hier mal die 2 Funktionen, die du dafür brauchst: (_CSV2Array ist nicht von mir, hab aber leider den Autor nicht mehr gefunden)

    [autoit]

    ; #FUNCTION#
    ;===============================================================================
    ; Function Name: _ExcelSaveAs($oExcel, $Fileformat, $NewFilepath, $Close = True)
    ; Description: Speichert eine Exceldatei in einem bestimmten Format ab
    ; Parameter(s): $oExcel Ein Excelobject, wie es von _ExcelbookOpen oder _ExcelbookNew zurückgegeben wird
    ; $Fileformat Der Dateityp, in dem gespeichert werden soll (xlsx, xlsb, xlsm, xls, csv, txt, prn)
    ; $NewFilepath Speicherort und Dateiname der neuen Datei
    ; $Close = True Soll nach dem Speichern das Objekt geschlossen werden? (Standard = True)
    ; Return Value(s): Erfolg Gibt 1 zurück
    ; Fehler @error 1 - $oExcel ist kein Objekt
    ; 2 - $Fileformat ist keine bekannte Dateiendung oder Formatnummer
    ; Author(s): TheLuBu ([email='LuBu@veytal.com'][/email])
    ; Copyright: TheLuBu ([email='LuBu@veytal.com'][/email])
    ;===============================================================================
    Func _ExcelSaveAs($oExcel, $vFileformat, $vNewFilepath, $bClose = True)
    If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
    Switch $vFileformat
    Case 51, "xlsx", ".xlsx"
    $vFileformat = 51
    Case 50, "xlsb", ".xlsb"
    $vFileformat = 50
    Case 52, "xlsm", ".xlsm"
    $vFileformat = 52
    Case 6, "csv", ".csv"
    $vFileformat = 6
    Case -4158, "txt", ".txt"
    $vFileformat = -4158
    Case 36, "prn", ".prn"
    $vFileformat = 36
    Case 56, "xls", ".xls"
    $vFileformat = 56
    Case Else
    Return SetError(2, 0, 0)
    EndSwitch
    With $oExcel
    .Application.DisplayAlerts = False ; Schaltet Fehlermeldungen bei Excel aus
    .ActiveWorkBook.SaveAs($vNewFilepath, $vFileformat)
    If $bClose Then
    .ActiveWorkbook.Close ; Schließt die Tabelle
    .Quit ; Schließt das Workbook
    EndIf
    EndWith
    Return 1
    EndFunc ;==>_ExcelSaveAs

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

    Func _CSV2Array($hFile, $cSeperator = "auto", $bFilterString = True, $iColumnMode = 0)
    Local $s = FileRead($hFile)
    If @error Then Return SetError(1)
    If $cSeperator = Default Then $cSeperator = "auto"
    If Not $cSeperator Then $cSeperator = Opt("GUIDataSeparatorChar")
    ; searching the line-seperator and splitting the lines into an array
    Local $aLines
    If StringInStr($s, @CRLF) Then
    $aLines = StringSplit($s, @CRLF, 1)
    ElseIf StringInStr($s, @CR) Then
    $aLines = StringSplit($s, @CR)
    Else
    $aLines = StringSplit($s, @LF)
    EndIf
    ; searching the delimiter in the first line
    Local $aTMP
    If $cSeperator = "auto" Then
    Local $iMax = 0
    Local $iC[5] = [0, 0, 0, 0, 0]
    Local $sC[4] = [";", ",", @TAB, "|"]
    $aTMP = StringRegExp($aLines[1], ";", 3)
    If Not @error Then $iC[0] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], ",", 3)
    If Not @error Then $iC[1] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], "\t", 3)
    If Not @error Then $iC[2] = UBound($aTMP)
    $aTMP = StringRegExp($aLines[1], "\|", 3)
    If Not @error Then $iC[3] = UBound($aTMP)
    ;~ $aTMP = StringRegExp($aLines[1], "[ ]", 3)
    ;~ If Not @error Then $iC[4] = UBound($aTMP)
    For $i = 0 To UBound($sC) - 1
    If $iC[$i] > $iMax Then
    $iMax = $iC[$i]
    $cSeperator = $sC[$i]
    EndIf
    Next
    EndIf
    ; creating 2-dim array based on the number of data in the first line
    $aTMP = StringSplit($aLines[1], $cSeperator)
    Local $iCol = $aTMP[0]
    Local $aRet[$aLines[0]][$iCol]
    ; splitting and filling the lines
    For $i = 1 To $aLines[0]
    $aTMP = StringSplit($aLines[$i], $cSeperator)
    If @error Then ContinueLoop
    If $aTMP[0] > $iCol Then
    Switch $iColumnMode
    Case 0
    Return SetError(2, $i)
    Case 1
    ReDim $aRet[$aLines[0] - 1][$aTMP[0]]
    Case 2
    $aTMP[0] = $iCol
    Case Else
    Return SetError(3)
    EndSwitch
    EndIf
    For $j = 1 To $aTMP[0]
    $aTMP[$j] = StringStripWS($aTMP[$j], 7)
    If $bFilterString Then ; removing leading and trailing " or '
    $aTMP[$j] = StringRegExpReplace($aTMP[$j], '^("|'')(.*?)\1$', '$2')
    EndIf
    $aRet[$i - 1][$j - 1] = $aTMP[$j]
    Next ; /cols
    Next ; /lines
    Return $aRet
    EndFunc ;==>_CSV2Array

    [/autoit]

    Ich arbeite mit Exceltabellen, die zwischen 20.000 und 250.000 Einträge haben, das einlesen einer csv, also Textdatei ist da ein immenser Zeitsparfaktor, auch wenn man später nochmal die Spalten anpassen muss

    [autoit]


    With $oExcel
    .Columns("H:H" ).Select ; Spalte H auswählen
    .Selection.NumberFormat = "0" ; als Zahl formatieren, die Numberformate kannst du dir aus der Makroaufnahme von Excel holen.
    EndWith

    [/autoit]
  • FTP - Dateien nicht erneut überschreiben/ Komplette Ordner hochladen

    • TheLuBu
    • 2. September 2011 um 15:52

    Du kannst alle Lokalen Dateien auflisten mit

    [autoit]

    _FilelisttoArray

    [/autoit]


    Dann gehst du Datei für Datei durch und überprüfst, ob die Datei da ist, oder nicht

    [autoit]


    $List = _FilelisttoArray("Lokaler Ordner")
    For $i = 1 To List[0]
    _FTP_FileGetSize($Path &$list[$i])
    if @error THEN
    ;......UPLOAD.....
    EndIF
    Next

    [/autoit]

    Zu deiner 2ten Frage, BugFix hat mal eine Rekursive Suche gebastelt, such mal nach, der kann dir auch die Dateien in Unterordnern anzeigen

  • AutoIt3 Compiler/Parser

    • TheLuBu
    • 2. September 2011 um 10:59

    Ich bin grade dabei, mir C# beizubringen, von daher wäre ich sehr gespannt, den Entwicklungsverlauf mitzubekommen. Wenn dann irgendwas kommt, wobei ich helfen kann, würd ich das auch gerne machen ;)

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™