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

  • Exceldatenblatterstellung per GUI-Combo

    • BugFix
    • 2. Oktober 2008 um 09:37

    Hi,
    zum Sortieren brauchst du keinen Extra-Button. Das kannst du per Klick auf den Spaltenkopf lösen.
    Ich habe mal das Bsp. aus der Hilfe "entschlackt":

    Spoiler anzeigen
    [autoit]

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

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

    Global $hListView

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

    GUICreate("ListView SimpleSort", 400, 300)
    $hListView = GUICtrlCreateListView("col1|col2|col3", 2, 2, 394, 268)
    GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    GUICtrlCreateListViewItem("line4|5|more_a", $hListView)
    GUICtrlCreateListViewItem("line5|4.50 |more_c", $hListView)
    GUICtrlCreateListViewItem("line5|4.0 |more_c", $hListView)
    GUICtrlCreateListViewItem("line3|23|more_e", $hListView)
    GUICtrlCreateListViewItem("line2|0.34560 |more_d", $hListView)
    GUICtrlCreateListViewItem("line1|1.0 |more_b", $hListView)
    GUICtrlCreateListViewItem("line1|0.1 |more_b", $hListView)
    GUICtrlCreateListViewItem("line1|10|more_b", $hListView)
    _GUICtrlListView_SetColumnWidth($hListView, 0, 75)
    _GUICtrlListView_SetColumnWidth($hListView, 1, 75)
    _GUICtrlListView_SetColumnWidth($hListView, 2, 75)
    GUISetState()

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

    ; die 2 Folgezeilen in dein Skript einfügen und die Func WM_NOTIFY
    ; dann kannst du per Klick auf den Spaltenkopf sortieren (auf/absteigend)
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($hListView)]

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $LVN_COLUMNCLICK
    $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    _GUICtrlListView_SimpleSort($hWndListView, $B_DESCENDING, DllStructGetData($tInfo, "SubItem"))
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]

    Edit
    Und nun habe ich eine Anregung für dich :D
    Bau das ganze etwas um unter Einbeziehung dieses Postings: IntelliSenseBox
    Verwende statt der Datums-/Textfelder und Combos nur Inputfelder als IntellisenseBox.
    Ich vermute, du machst deine Abrechnung monatlich. Somit kannst du beim Start die möglichen Datumseinträge als Liste hinterlegen und mit max. 2 eingegebenen Ziffern hast du das richtige Datum (geht schneller als Mausklickerei). In den Combos geht das ja auch jetzt schon - könnte man aber auch ersetzen wegen der Optik ;) .
    Für die Zeit könntest du ein formatiertes Input erstellen, das dir den : automatisch setzt, sodass du einfach die Zeit 4-stellig hintereinander eingibst. Zum Formatieren findest du Infos im Forum.
    Wenn du das alles verwendest, brauchst du nicht mehr zur Maus greifen und schaffst dein Formular in 2 Minuten :D

  • hilfe bei endlos schleife

    • BugFix
    • 1. Oktober 2008 um 23:36

    Quäle mal die Hilfe, genau denselben Fall hatten wir schon mal.

  • Silkroad Process Manager

    • BugFix
    • 1. Oktober 2008 um 23:34
    Zitat von r1fLeX

    Ja , aber wie kann ich das Programm "wissen" lassen welcher Client grade angewählt ist und welcher Pid dieser Client hat?
    Ich enschudlige mich für den Spamm!

    Indem du PID und zugehörigen Titel in einem Array verwaltest. Lies den Titel aus der Liste, suche im Array nach der PID für diese Liste.

  • Silkroad Process Manager

    • BugFix
    • 1. Oktober 2008 um 23:15

    Verwende ProcessClose() zum Schließen. Die PID bekommst du doch von der Prozessliste sowieso.

  • 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]

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™