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

  • Silkroad Process Manager

    • BugFix
    • 1. Oktober 2008 um 23:07

    Verwende:

    [autoit]

    Opt("WinTitleMatchMode", 2)

    [/autoit]


    Dann sollte das passen. Achja - Titel und Text aufpassen, dasss das stimmt.

  • Satzschieberei

    • BugFix
    • 1. Oktober 2008 um 23:03

    Unter diesem Baum tanzt der Koalabär. :P

  • Silkroad Process Manager

    • BugFix
    • 1. Oktober 2008 um 23:02

    Schau dir mal WinSetTitle() an.

  • _MultiFileCopy

    • BugFix
    • 1. Oktober 2008 um 22:10
    Zitat von eukalyptus


    Außerdem hab ich die Variablen $i und $j in der Funktion deklariert, da es sonst zu Problemen kommen kann, wenn man die Funktion in einer $i-Schleife aufruft...

    Das kann nicht passieren, $i und $j sind Variablen in For-Schleifen. Diese werden per default als Local deklariert.

  • Exceldatenblatterstellung per GUI-Combo

    • BugFix
    • 1. Oktober 2008 um 17:58

    Hi,
    hier das Ganze mit Transfer an Excel-Datei.

    Spoiler anzeigen
    [autoit]

    #include <DateTimeConstants.au3>
    #Include <GuiListView.au3>
    #include <GUIConstants.au3>
    Opt("GUIOnEventMode", 1)

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

    Global $arCtrlID[7]
    Global $ExelPath = @ScriptDir & '\Test.xls'
    ; Muster Excel-Tabelle - Spalten: A = Datum; B = km; C = Von; D = Bis; E = Ab; F = An; G = Zweck
    ; Wenn nicht vorhanden, wird sie erstellt

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

    GUICreate("Formular", 940, 400)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
    $arCtrlID[0] = GUICtrlCreateDate('Datum', 10, 10, 100, 20, $DTS_SHORTDATEFORMAT)
    $arCtrlID[1] = GUICtrlCreateCombo('km', 120, 10, 50)
    $arCtrlID[2] = GUICtrlCreateCombo('Strecke von', 180, 10, 170)
    $arCtrlID[3] = GUICtrlCreateCombo('Strecke bis', 360, 10, 170)
    $arCtrlID[4] = GUICtrlCreateDate('', 540, 10, 100, 20, $DTS_TIMEFORMAT)
    $arCtrlID[5] = GUICtrlCreateDate('', 650, 10, 100, 20, $DTS_TIMEFORMAT)
    $arCtrlID[6] = GUICtrlCreateCombo('Zweck', 760, 10, 170)
    $hListView = GUICtrlCreateListView("Datum|km|Von|Bis|Abfahrt|Ankunft|Zweck", 10, 35, 920, 320, Default, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
    _GUICtrlListView_SetColumnWidth($hListView, 0, 105)
    _GUICtrlListView_SetColumnWidth($hListView, 1, 60)
    _GUICtrlListView_SetColumnWidth($hListView, 2, 180)
    _GUICtrlListView_SetColumnWidth($hListView, 3, 180)
    _GUICtrlListView_SetColumnWidth($hListView, 4, 110)
    _GUICtrlListView_SetColumnWidth($hListView, 5, 110)
    _GUICtrlListView_SetColumnWidth($hListView, 6, $LVSCW_AUTOSIZE_USEHEADER )
    GUICtrlCreateButton("In &Liste Übernehmen", 10, 365, 120, 20)
    GUICtrlSetOnEvent(-1, "_ReadData")
    GUICtrlCreateButton("Daten &Übertragen", 810, 365, 120, 20)
    GUICtrlSetOnEvent(-1, "_Transfer")
    ; Daten einfügen:
    For $i = 0 To UBound($arCtrlID) -1
    Switch $i
    Case 1
    GUICtrlSetData($arCtrlID[$i],"3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20", "km")
    Case 2
    GUICtrlSetData($arCtrlID[$i],"Seefeld, Krummenseer Cha|Werneuchen Markt|Bernau Zentrale|innerhalb", "von")
    Case 3
    GUICtrlSetData($arCtrlID[$i],"Seefeld, Krummenseer Cha|Werneuchen Markt|Bernau Zentrale|Werneuchen", "bis")
    Case 6
    GUICtrlSetData($arCtrlID[$i],"2. Zustellung Schötzau|Verteilung Briefe|Fahrt zum Bezirk", "Zweck")
    EndSwitch
    Next
    GUISetState()

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

    While True
    Sleep(100)
    WEnd

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

    Func _exit()
    Exit
    EndFunc

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

    Func _ReadData() ; Inhalt aus Datenfeldern auslesen und in Liste schreiben, bricht ab, wenn kein Eintrag bei km
    If GUICtrlRead($arCtrlID[1]) = "km" Then Return
    $str = ''
    For $i = 0 To UBound($arCtrlID) -1
    $str &= GUICtrlRead($arCtrlID[$i]) & "|"
    Next
    GUICtrlCreateListViewItem(StringTrimRight($str, 1), $hListView)
    EndFunc

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

    Func _Transfer()
    Local $count = _GUICtrlListView_GetItemCount($hListView), $oExcel
    If $count < 1 Then Return
    If Not FileExists($ExelPath) Then
    $oExcel = _ExcelBookNew(0)
    $oExcel.Activesheet.Range("A1").Value = "DATUM"
    $oExcel.Activesheet.Range("B1").Value = "KM"
    $oExcel.Activesheet.Range("C1").Value = "VON"
    $oExcel.Activesheet.Range("D1").Value = "BIS"
    $oExcel.Activesheet.Range("E1").Value = "AB"
    $oExcel.Activesheet.Range("F1").Value = "AN"
    $oExcel.Activesheet.Range("G1").Value = "ZWECK"
    _ExcelBookSaveAs($oExcel, $ExelPath)
    _ExcelBookClose($oExcel)
    EndIf
    $oExcel = _ExcelBookOpen($ExelPath, 0)
    Local $Row = _ExcelBookGetWidth($oExcel, 2) +1
    For $i = 0 To $count -1 ; Daten jeder Zeile an Exel-Tabelle übertragen
    $oExcel.Activesheet.Range("A" & $Row+$i).Value = _GUICtrlListView_GetItemText($hListView, $i, 0)
    $oExcel.Activesheet.Range("A" & $Row+$i).NumberFormat = "TT.MM.JJJJ"
    $oExcel.Activesheet.Range("B" & $Row+$i).Value = _GUICtrlListView_GetItemText($hListView, $i, 1)
    $oExcel.Activesheet.Range("C" & $Row+$i).Value = _GUICtrlListView_GetItemText($hListView, $i, 2)
    $oExcel.Activesheet.Range("D" & $Row+$i).Value = _GUICtrlListView_GetItemText($hListView, $i, 3)
    $oExcel.Activesheet.Range("E" & $Row+$i).Value = _GUICtrlListView_GetItemText($hListView, $i, 4)
    $oExcel.Activesheet.Range("F" & $Row+$i).Value = _GUICtrlListView_GetItemText($hListView, $i, 5)
    $oExcel.Activesheet.Range("G" & $Row+$i).Value = _GUICtrlListView_GetItemText($hListView, $i, 6)
    Next
    _GUICtrlListView_DeleteAllItems($hListView)
    _ExcelBookClose($oExcel)
    EndFunc

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

    ;==================================================================================================
    ; Function: _ExcelBookGetWidth($oExcel [, $iTyp=1 [, $iHeader=1 [, $sCol='A']]])
    ; Description: Gibt die letzte belegte Zeile und/oder Spalte einer Tabelle zurück
    ; Syntax: _ExcelBookGetWidth($oExcel, $iTyp=1, $iHeader=1, $sCol='A')
    ; Parameter(s): $oExcel - Referenz eines geöffneten Excel Objekts
    ; $iTyp - 1=letzte Spalte (Standard); 2=letzte Zeile; 3=Spalte|Zeile
    ; $iHeader - Nummer der Zeile, in der die letzte Spalte gesucht wird
    ; $$sCol - Buchstabe der Spalte, in der die letzte Zeile gesucht wird
    ; Return Value(s): Erfolg - letzte Spalte und/oder Zeile
    ; Ist die Zeile oder Spalte leer, wird '0' zurückgegeben
    ; Fehler - 0 und setzt @error:
    ; @error=1 - Objekt existiert nicht
    ; @error=2 - $iTyp oder $iHeader außerhalb des Wertebereichs (1 - 65536)
    ; @error=3 - $sCol außerhalb des Wertebereichs (A - IV)
    ; Requirement(s): $iHeader bzw. $sCol sind durchgängig bis zum letzten Zeilen-/Spaltenelement belegt
    ; Author(s): BugFix ( [email='bugfix@autoit.de'][/email] )
    ;==================================================================================================
    Func _ExcelBookGetWidth($oExcel, $iTyp=1, $iHeader=1, $sCol='A')
    If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
    If $iTyp < 1 Or $iHeader < 1 Or $iTyp > 65536 Or $iHeader > 65536 Then Return SetError(2, 0, 0)
    $sCol = StringUpper($sCol)
    If StringLen($sCol) = 2 Then
    Local $str = StringSplit($sCol, '')
    If Asc($str[1]) < 65 Or Asc($str[1]) > 73 Then Return SetError(3, 0, 0)
    If Asc($str[2]) < 65 Or Asc($str[2]) > 90 Or _
    (Asc($str[1]) = 73 And Asc($str[2]) > 86) Then Return SetError(3, 0, 0)
    ElseIf StringLen($sCol) > 2 Then
    Return SetError(3, 0, 0)
    EndIf
    If Asc($sCol) < 65 Or Asc($sCol) > 90 Then Return SetError(3, 0, 0)
    Local $sColOut, $iRowOut
    Select
    Case $iTyp = 1 Or $iTyp = 3
    For $i = 65 To 90
    If $oExcel.Activesheet.Range(Chr($i) & $iHeader).Value = '' Then
    If $i = 65 Then
    $sColOut = 0
    Else
    $sColOut = Chr($i-1)
    EndIf
    ExitLoop
    EndIf
    If $i = 90 Then
    For $j = 65 To 73
    For $k = 65 To 90
    If $j = 73 And $k = 87 Then
    $sColOut = Chr($j) & Chr($k-1)
    ExitLoop
    EndIf
    If $oExcel.Activesheet.Range(Chr($j) & Chr($k)).Value = '' Then
    If $k = 65 Then
    $sColOut = Chr($j)
    Else
    $sColOut = Chr($j) & Chr($k-1)
    EndIf
    ExitLoop
    EndIf
    Next
    Next
    EndIf
    Next
    ContinueCase
    Case $iTyp = 2
    For $i = 1 To 65536
    If $oExcel.Activesheet.Range($sCol & $i).Value = '' Then
    $iRowOut = $i -1
    ExitLoop
    EndIf
    Next
    EndSelect
    Switch $iTyp
    Case 1
    Return $sColOut
    Case 2
    Return $iRowOut
    Case 3
    Return $sColOut & '|' & $iRowOut
    EndSwitch
    EndFunc ;==>_ExcelBookGetWidth

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

    ;===============================================================================
    ;
    ; Description: Creates new workbook and returns its object identifier.
    ; Syntax: $oExcel = _ExcelBookNew($fVisible = 1)
    ; Parameter(s): $fVisible - Flag, whether to show or hide the workbook (0=not visible, 1=visible)
    ; Requirement(s): None
    ; Return Value(s): On Success - Returns new object identifier
    ; On Failure - Returns 0 and sets @error on errors:
    ; @error=1 - Unable to create the Excel COM object
    ; @error=2 - $fVisible parameter is not a number
    ; Author(s): SEO <locodarwin at yahoo dot com>
    ; Note(s): None
    ;
    ;===============================================================================
    Func _ExcelBookNew($fVisible = 1)
    $oExcel = ObjCreate("Excel.Application")
    If NOT IsObj($oExcel) Then Return SetError(1, 0, 0)
    If NOT IsNumber($fVisible) Then Return SetError(2, 0, 0)
    If $fVisible > 1 Then $fVisible = 1
    If $fVisible < 0 Then $fVisible = 0
    With $oExcel
    .Visible = $fVisible
    .WorkBooks.Add
    .ActiveWorkbook.Sheets(1).Select()
    EndWith
    Return $oExcel
    EndFunc ;==>_ExcelBookNew

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

    ;===============================================================================
    ;
    ; Description: Opens an existing workbook and returns its object identifier.
    ; Syntax: $oExcel = _ExcelBookOpen($sFilePath, $fVisible = 1)
    ; Parameter(s): sFilePath - Path and filename of the file to be opened
    ; $fVisible - Flag, whether to show or hide the workbook (0=not visible, 1=visible) (default=1)
    ; $fReadOnly - Flag, whether to open the workbook as read-only (True or False) (default=False)
    ; Requirement(s): None
    ; Return Value(s): On Success - Returns new object identifier
    ; On Failure - Returns 0 and sets @error on errors:
    ; @error=1 - Specified object does not exist
    ; @error=2 - File does not exist
    ; Author(s): SEO <locodarwin at yahoo dot com>
    ; Note(s): None
    ;
    ;===============================================================================
    Func _ExcelBookOpen($sFilePath, $fVisible = 1, $fReadOnly = False)
    $oExcel = ObjCreate("Excel.Application")
    If NOT IsObj($oExcel) Then Return SetError(1, 0, 0)
    If NOT FileExists($sFilePath) Then Return SetError(2, 0, 0)
    If $fVisible > 1 Then $fVisible = 1
    If $fVisible < 0 Then $fVisible = 0
    With $oExcel
    .Visible = $fVisible
    .WorkBooks.Open($sFilePath, Default, $fReadOnly)
    .ActiveWorkbook.Sheets(1).Select()
    EndWith
    Return $oExcel
    EndFunc ;==>_ExcelBookOpen

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

    ;===============================================================================
    ;
    ; Description: Saves the active workbook of the specified Excel object.
    ; Syntax: _ExcelBookSave($oExcel, $fAlerts = 0)
    ; Parameter(s): $oExcel - Excel object opened by a preceding call to _ExcelBookOpen() or _ExcelBookNew()
    ; $fAlerts - Flag for disabling/enabling Excel message alerts (0=disable, 1=enable)
    ; Requirement(s): None
    ; Return Value(s): On Success - Returns 1
    ; On Failure - Returns 0 and sets @error on errors:
    ; @error=1 - Specified object does not exist
    ; @error=2 - File exists, overwrite flag not set
    ; Author(s): SEO <locodarwin at yahoo dot com>
    ; Note(s): None
    ;
    ;===============================================================================
    Func _ExcelBookSave($oExcel, $fAlerts = 0)
    If NOT IsObj($oExcel) Then Return SetError(1, 0, 0)
    If $fAlerts > 1 Then $fAlerts = 1
    If $fAlerts < 0 Then $fAlerts = 0
    With $oExcel
    .Application.DisplayAlerts = $fAlerts
    .Application.ScreenUpdating = $fAlerts
    .ActiveWorkBook.Save
    If NOT $fAlerts Then
    .Application.DisplayAlerts = 1
    .Application.ScreenUpdating = 1
    EndIf
    EndWith
    Return 1
    EndFunc ;==>_ExcelBookSave

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

    ;===============================================================================
    ;
    ; Description: Saves the active workbook of the specified Excel object with a new filename and/or type.
    ; Syntax: _ExcelSaveDocAs($oExcel, $sFilePath, $sType = "xls", $fAlerts = 0, $fOverWrite = 0)
    ; Parameter(s): $oExcel - Excel object opened by a preceding call to _ExcelBookOpen() or _ExcelBookNew()
    ; $sFilePath - Path and filename of the file to be read
    ; $sType - Excel writable filetype string = "xls|csv|txt|template|html", default "xls"
    ; $fAlerts - Flag for disabling/enabling Excel message alerts (0=disable, 1=enable)
    ; $fOverWrite - Flag for overwriting the file, if it already exists (0=no, 1=yes)
    ; Requirement(s): None
    ; Return Value(s): On Success - Returns 1
    ; On Failure - Returns 0 and sets @error on errors:
    ; @error=1 - Specified object does not exist
    ; @error=2 - Invalid filetype string
    ; @error=3 - File exists, overwrite flag not set
    ; Author(s): SEO <locodarwin at yahoo dot net>
    ; Note(s): You can only SaveAs back to the same working path the workbook was originally opened from at this time
    ; (not applicable to newly created, unsaved books).
    ;
    ;===============================================================================
    Func _ExcelBookSaveAs($oExcel, $sFilePath, $sType = "xls", $fAlerts = 0, $fOverWrite = 0)
    If NOT IsObj($oExcel) Then Return SetError(1, 0, 0)
    If $sType = "xls" or $sType = "csv" or $sType = "txt" or $sType = "template" or $sType = "html" Then
    If $sType = "xls" Then $sType = -4143
    If $sType = "csv" Then $sType = 24
    If $sType = "txt" Then $sType = 20
    If $sType = "template" Then $sType = 17
    If $sType = "html" Then $sType = 44
    Else
    Return SetError(2, 0, 0)
    EndIf
    If $fAlerts > 1 Then $fAlerts = 1
    If $fAlerts < 0 Then $fAlerts = 0
    $oExcel.Application.DisplayAlerts = $fAlerts
    $oExcel.Application.ScreenUpdating = $fAlerts
    If FileExists($sFilePath) Then
    If NOT $fOverWrite Then Return SetError(3, 0, 0)
    FileDelete($sFilePath)
    EndIf
    $oExcel.ActiveWorkBook.SaveAs ($sFilePath, $sType)
    If NOT $fAlerts Then
    $oExcel.Application.DisplayAlerts = 1
    $oExcel.Application.ScreenUpdating = 1
    EndIf
    Return 1
    EndFunc ;==>_ExcelBookSaveAs

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

    ;===============================================================================
    ;
    ; Description: Closes the active workbook and removes the specified Excel object.
    ; Syntax: _ExcelCloseDoc($oExcel, $fSave = 1, $fAlerts = 0)
    ; Parameter(s): $oExcel - Excel object opened by a preceding call to _ExcelBookOpen() or _ExcelBookNew()
    ; $fSave - Flag for saving the file before closing (0=no save, 1=save)
    ; $fAlerts - Flag for disabling/enabling Excel message alerts (0=disable, 1=enable)
    ; Requirement(s): None
    ; Return Value(s): On Success - Returns 1
    ; On Failure - Returns 0 and sets @error on errors:
    ; @error=1 - Specified object does not exist
    ; @error=2 - File exists, overwrite flag not set
    ; Author(s): SEO <locodarwin at yahoo dot com>
    ; Note(s): None
    ;
    ;===============================================================================
    Func _ExcelBookClose($oExcel, $fSave = 1, $fAlerts = 0)
    If NOT IsObj($oExcel) Then Return SetError(1, 0, 0)
    If $fSave > 1 Then $fSave = 1
    If $fSave < 0 Then $fSave = 0
    If $fAlerts > 1 Then $fAlerts = 1
    If $fAlerts < 0 Then $fAlerts = 0
    $oExcel.Application.DisplayAlerts = $fAlerts
    $oExcel.Application.ScreenUpdating = $fAlerts
    If $fSave Then
    $oExcel.ActiveWorkBook.Save
    EndIf
    $oExcel.Application.DisplayAlerts = True
    $oExcel.Application.ScreenUpdating = True
    $oExcel.Quit
    Return 1
    EndFunc ;==>_ExcelBookClose

    [/autoit]
  • Name einer Array-Variablen zusammen setzen

    • BugFix
    • 1. Oktober 2008 um 12:03

    Also mehrere Arrayelemente auf einmal lassen sich nur im Deklarationsschritt befüllen. (Also nur wenn Global, Local oder Dim auftauchen)
    Im Skript selber läßt sich immer nur 1 Element ansprechen.
    Du kannst aber mit einer kleinen Schleife alle entsprechenden Elemente einer Zeile nacheinander ansprechen.
    z.B. willst du in einem Array mit 4 Spalten die 3.te Zeile befüllen:

    [autoit]

    ; Werte die eingefügt werden sollen
    Local $arEinfueg[4] = [1,2,3,4]
    ; jetzt im eigentlichen Array eintragen in Zeile 3
    For $i = 0 To UBound($HauptArray, 2) -1
    $HauptArray[2][$i] = $arEinfueg[$i]
    Next

    [/autoit]
  • Exceldatenblatterstellung per GUI-Combo

    • BugFix
    • 1. Oktober 2008 um 11:53

    Hi,
    so - ich habe dein Skript erst mal etwas ( gewaltig :P ) optimiert. Da schreibst du dich ja tot bei. :whistling:
    Ich brauche mal noch die Struktur deiner Excel-Tabelle, um die Daten dort einzutragen. Im Bsp. lese ich einfach in die Console aus.

    Spoiler anzeigen
    [autoit]

    #include <DateTimeConstants.au3>
    #include <GUIConstants.au3>
    Opt("GUIOnEventMode", 1)

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

    Global $arCtrlID[10][7] ; 10 Zeilen, 7 Spalten <== Formular
    Global $y0 = 10
    Global $arCtrlSize[7][2] = [ _ ; 7 Controls je Zeile, 2 Werte: CtrlErstellgCmd_1, CtrlErstellgCmd_2
    ["GUICtrlCreateDate('Datum', 10,",", 100, 20, $DTS_SHORTDATEFORMAT)"], _
    ["GUICtrlCreateCombo('km', 120,",", 50)"], _
    ["GUICtrlCreateCombo('Strecke von', 180,",", 170)"], _
    ["GUICtrlCreateCombo('Strecke bis', 360,",", 170)"], _
    ["GUICtrlCreateDate('', 540,",", 100, 20, $DTS_TIMEFORMAT)"], _
    ["GUICtrlCreateDate('', 650,",", 100, 20, $DTS_TIMEFORMAT)"], _
    ["GUICtrlCreateCombo('Zweck', 760,",", 170)"]]

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

    GUICreate("Formular", 940, 400)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
    ; Erstellen Controls:
    For $i = 0 To UBound($arCtrlID) -1
    For $k = 0 To UBound($arCtrlSize) -1
    ; y-Wert für akt. Zeile einfügen u. Ctrl erstellen
    $arCtrlID[$i][$k] = Execute($arCtrlSize[$k][0] & ($y0 + $i*35) & $arCtrlSize[$k][1])
    Next
    Next
    GUICtrlCreateButton("Daten Übertragen", 830, 365, 100, 20)
    GUICtrlSetOnEvent(-1, "_ReadData")
    ; Daten einfügen:
    For $i = 0 To UBound($arCtrlID) -1
    For $k = 0 To UBound($arCtrlID, 2) -1
    Switch $k
    Case 1
    GUICtrlSetData($arCtrlID[$i][$k],"3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20", "km")
    Case 2
    GUICtrlSetData($arCtrlID[$i][$k],"Seefeld, Krummenseer Cha|Werneuchen Markt|Bernau Zentrale|innerhalb", "von")
    Case 3
    GUICtrlSetData($arCtrlID[$i][$k],"Seefeld, Krummenseer Cha|Werneuchen Markt|Bernau Zentrale|Werneuchen", "bis")
    Case 6
    GUICtrlSetData($arCtrlID[$i][$k],"2. Zustellung Schötzau|Verteilung Briefe|Fahrt zum Bezirk", "Zweck")
    EndSwitch
    Next
    Next
    GUISetState()

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

    While True
    Sleep(100)
    WEnd

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

    Func _exit()
    Exit
    EndFunc

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

    Func _ReadData() ; Inhalt aus Datenfeldern auslesen, bricht ab, wenn eine Zeile o. Eintrag (km als Prüfwert)
    For $i = 0 To UBound($arCtrlID) -1
    If GUICtrlRead($arCtrlID[$i][1]) = "km" Then Return
    ; hier testweise als String ausgelesen:
    $str = ''
    For $k = 0 To UBound($arCtrlID, 2) -1
    $str &= GUICtrlRead($arCtrlID[$i][$k]) & "|"
    Next
    ConsoleWrite(StringTrimRight($str, 1) & @CRLF)
    Next
    EndFunc

    [/autoit]

    Edit:
    Hier mal noch eine Variante mit ListView, finde ich ansprechender als 1000 Controls ;)

    Spoiler anzeigen
    [autoit]

    #include <DateTimeConstants.au3>
    #Include <GuiListView.au3>
    #include <GUIConstants.au3>
    Opt("GUIOnEventMode", 1)

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

    Global $arCtrlID[7]

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

    GUICreate("Formular", 940, 400)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
    $arCtrlID[0] = GUICtrlCreateDate('Datum', 10, 10, 100, 20, $DTS_SHORTDATEFORMAT)
    $arCtrlID[1] = GUICtrlCreateCombo('km', 120, 10, 50)
    $arCtrlID[2] = GUICtrlCreateCombo('Strecke von', 180, 10, 170)
    $arCtrlID[3] = GUICtrlCreateCombo('Strecke bis', 360, 10, 170)
    $arCtrlID[4] = GUICtrlCreateDate('', 540, 10, 100, 20, $DTS_TIMEFORMAT)
    $arCtrlID[5] = GUICtrlCreateDate('', 650, 10, 100, 20, $DTS_TIMEFORMAT)
    $arCtrlID[6] = GUICtrlCreateCombo('Zweck', 760, 10, 170)
    $hListView = GUICtrlCreateListView("Datum|km|Von|Bis|Abfahrt|Ankunft|Zweck", 10, 35, 920, 320, Default, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
    _GUICtrlListView_SetColumnWidth($hListView, 0, 105)
    _GUICtrlListView_SetColumnWidth($hListView, 1, 60)
    _GUICtrlListView_SetColumnWidth($hListView, 2, 180)
    _GUICtrlListView_SetColumnWidth($hListView, 3, 180)
    _GUICtrlListView_SetColumnWidth($hListView, 4, 110)
    _GUICtrlListView_SetColumnWidth($hListView, 5, 110)
    _GUICtrlListView_SetColumnWidth($hListView, 6, $LVSCW_AUTOSIZE_USEHEADER )
    GUICtrlCreateButton("In &Liste Übernehmen", 10, 365, 120, 20)
    GUICtrlSetOnEvent(-1, "_ReadData")
    GUICtrlCreateButton("Daten &Übertragen", 810, 365, 120, 20)
    GUICtrlSetOnEvent(-1, "_Transfer")
    ; Daten einfügen:
    For $i = 0 To UBound($arCtrlID) -1
    Switch $i
    Case 1
    GUICtrlSetData($arCtrlID[$i],"3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20", "km")
    Case 2
    GUICtrlSetData($arCtrlID[$i],"Seefeld, Krummenseer Cha|Werneuchen Markt|Bernau Zentrale|innerhalb", "von")
    Case 3
    GUICtrlSetData($arCtrlID[$i],"Seefeld, Krummenseer Cha|Werneuchen Markt|Bernau Zentrale|Werneuchen", "bis")
    Case 6
    GUICtrlSetData($arCtrlID[$i],"2. Zustellung Schötzau|Verteilung Briefe|Fahrt zum Bezirk", "Zweck")
    EndSwitch
    Next
    GUISetState()

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

    While True
    Sleep(100)
    WEnd

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

    Func _exit()
    Exit
    EndFunc

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

    Func _ReadData() ; Inhalt aus Datenfeldern auslesen und in Liste schreiben, bricht ab, wenn kein Eintrag bei km
    If GUICtrlRead($arCtrlID[1]) = "km" Then Return
    $str = ''
    For $i = 0 To UBound($arCtrlID) -1
    $str &= GUICtrlRead($arCtrlID[$i]) & "|"
    Next
    GUICtrlCreateListViewItem(StringTrimRight($str, 1), $hListView)
    EndFunc

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

    Func _Transfer()
    MsgBox(0, '', 'Noch nicht belegt')
    EndFunc

    [/autoit]
  • Exceldatenblatterstellung per GUI-Combo

    • BugFix
    • 1. Oktober 2008 um 10:31

    Hi,
    ich schaus mit mal kurz an und erstelle dir ein kleines Bsp., dass du dann erweitern kannst.
    (Muß grade eh warten, dass mein Backup durchläuft ;) )

  • Name einer Array-Variablen zusammen setzen

    • BugFix
    • 1. Oktober 2008 um 10:14

    Nix einfacher als das:

    [autoit]

    Global $array[9][3] = [ _
    [1,2,3], _
    [4,5,6], _
    [7,8,9], _
    [10,12,13], _
    [14,15,16], _
    [17,18,19], _
    [21,22,23], _
    [24,25,26], _
    [27,28,29]]

    [/autoit]
  • GUICtrlSetOnEvent vs. GUIGetMsg

    • BugFix
    • 1. Oktober 2008 um 10:04

    Ich bevorzuge OnEventMode.
    Zum Einen empfinde ich es (gerade bei großen Skripten mit mehreren GUI) als wesentlich übersichtlicher und zum Anderen hast du im OnEventMode nützliche Makros, die es unter GUIGetMsg nicht gibt (@GUI_CtrlId, @GUI_CtrlHandle, @GUI_WinHandle).
    Sicher kann man alles, was man unter OnEvent erstellt auch unter GUIGetMsg erstellen. Aber teilweise nur mit erheblichen Verrenkungen.

  • Button mit Bild

    • BugFix
    • 30. September 2008 um 09:03

    Erstell dir von deinem Picture 2 Versionen: Ansicht OFF und Ansicht ON mit den entsprechenden Schattierungen, die das sichtbar machen.
    Über die Abfrage:
    - Maus über Picture UND Event = $GUI_EVENT_PRIMARYDOWN
    löst du das "Drücken" des Button, also den Wechsel der Ansicht, aus.
    und startest gleichzeitig die Abfrage:
    - Maus hat Picture verlassen ODER Event = $GUI_EVENT_PRIMARYUP
    um wieder die Ansicht auf OFF-Status zu setzen.
    Falls zwischen Down und Up ein zu kleiner Zeitraum liegt wird der Effekt nicht sichtbar. Also parallel eine Zeitabfrage, sodass eine der vorab genannten Bedingungen erfüllt sein muß - aber mindestens gewartet wird bis Zeit x abgelaufen (so etwa 150 - 300 ms).

  • GUIrand selber erstellen / designen?

    • BugFix
    • 29. September 2008 um 22:25

    AHK läßt sich nicht (bzw. nur in kleinen Teilen) auf AutoIt übertragen. Ist eine andere Richtung, die dort gewählt wurde. Somit werden dort auch Funktionen verwendet, für die es keinen adäquaten Ersatz in AutoIt gibt.

  • GUIrand selber erstellen / designen?

    • BugFix
    • 29. September 2008 um 22:16

    Interessant, dein letztes Posting. :whistling:
    Was willst du uns damit sagen? ;(

  • GUI dynamisch erstellen

    • BugFix
    • 29. September 2008 um 21:47

    Du hast die Anzahl der Einträge mit .._GetItemCount()
    Also gehst du in einer Schleife alle Einträge durch (Achtung: Eintrag 1 hat Index 0!) und prüfst ob gecheckt. Wenn ja führst du das Programm aus, aber mit RunWait() oder ShellexecuteWait().

  • Windows Titel ist unterschiedlich

    • BugFix
    • 29. September 2008 um 16:45
    [autoit]

    Opt("WinTitleMatchMode", 2)

    [/autoit]
    Zitat von AutoIt Hilfe

    Alters the method that is used to match window titles during search operations.
    1 = Match the title from the start (default)
    2 = Match any substring in the title
    3 = Exact title match
    4 = Advanced mode, see Window Titles & Text (Advanced)
    -1 to -4 = force lower case match according to other type of match.

  • Pixel färben?

    • BugFix
    • 29. September 2008 um 09:41

    Es gibt auch eine ganz simple Lösung: GUI 1x1 Pixel groß. ;)
    Oder halt in der gewünschten Größe, denn 1x1 ist eh kaum zu sehen. Du kannst die GUI auch noch TOPMOST setzen, damit es auf jeden Fall "oben" ist.

    [autoit]

    Dim $color = 0xFF0000
    HotKeySet("^!e", "_exit")

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

    $GUI_Pixel = GUICreate('', 1, 1, 0, 0, $WS_POPUP)
    GUISetBkColor($color)

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

    Dim $pos[2] = [500,400] ; hier statisch erstellt - im Prog dann: Dim $pos = PixelSearch(...)
    WinMove($GUI_Pixel, "", $pos[0], $pos[1])
    GUISetState(@SW_SHOW, $GUI_Pixel)

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

    While True
    Sleep(100)
    WEnd

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]
  • GUIrand selber erstellen / designen?

    • BugFix
    • 28. September 2008 um 18:12

    Du kannst die Ränder zeichnen:

    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $hGUI = GUICreate('', 600, 400, -1, -1, $WS_POPUP)
    GUISetBkColor(0xFF6F45)
    $exit = GUICtrlCreateButton('Exit', 525, 365, 60, 20)
    $hWnd = WinGetHandle($hGUI)
    GUISetState()
    _GDIPlus_Startup ()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hWnd)
    $hBrush = _GDIPlus_BrushCreateSolid(0xFF1195FF)
    _GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 4, 400, $hBrush) ; links
    _GDIPlus_GraphicsFillRect($hGraphic, 596, 0, 4, 400, $hBrush) ; rechts
    _GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 600, 4, $hBrush) ; oben
    _GDIPlus_GraphicsFillRect($hGraphic, 0, 396, 600, 4, $hBrush) ; unten
    Do
    Until GUIGetMsg() = $exit
    _GDIPlus_GraphicsDispose ($hGraphic)
    _GDIPlus_BrushDispose ($hBrush)
    _GDIPlus_Shutdown ()

    [/autoit]

    Die Farbe für $hBrush wird angegeben: 0xAlpha R G B - setze für Alpha einfach FF und dahinter ganz normal der Hexfarbcode.

  • GUIrand selber erstellen / designen?

    • BugFix
    • 28. September 2008 um 17:40

    Grrrr, die Idee war gut.... aber: habe nicht bedacht, dass das Parent-Window keinen Popup-Style haben darf. :evil:
    Mal überlegen, vielleicht fällt mir noch was ein.

  • GUI dynamisch erstellen

    • BugFix
    • 28. September 2008 um 16:37

    @ zemkedesign: Das nützt ihm wenig, da es eine zusätzliche Verwaltung des GUI-Aufbaus erfordert. Er kann ja auf einer fix definierten Fläche keine variable Anzahl an Objekten erstellen. Beliebig vergrößern ließe sich das auch nicht, es müßte evtl. mit Tabs gearbeitet werden.
    Daher mein Tipp mit dem ListView. Fixe Größe und alles paßt rein ;)

  • GUIrand selber erstellen / designen?

    • BugFix
    • 28. September 2008 um 16:33

    Nimm eine Konstruktion aus Parent- und Child-Window.
    Damit du frei gestalten kannst, bekommen beide POPUP-Style. Dann gestaltest du das Parent frei nach Bedarf und bettest das Child ein, sodass vom Parent nur die gewollten Bereiche sichtbar sind. Somit kannst du dort völlig frei eigene grafische Elemente, Ränder etc. platzieren.

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™