Verwende:
[autoit]Opt("WinTitleMatchMode", 2)
[/autoit]
Dann sollte das passen. Achja - Titel und Text aufpassen, dasss das stimmt.
Verwende:
[autoit]Opt("WinTitleMatchMode", 2)
[/autoit]
Dann sollte das passen. Achja - Titel und Text aufpassen, dasss das stimmt.
Unter diesem Baum tanzt der Koalabär. ![]()
Schau dir mal WinSetTitle() an.
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.
Hi,
hier das Ganze mit Transfer an Excel-Datei.
#include <DateTimeConstants.au3>
#Include <GuiListView.au3>
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1)
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
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()
While True
Sleep(100)
WEnd
Func _exit()
Exit
EndFunc
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
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
;==================================================================================================
; 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
;===============================================================================
;
; 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
;===============================================================================
;
; 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
;===============================================================================
;
; 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
;===============================================================================
;
; 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
;===============================================================================
;
; 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
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:
; 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
Hi,
so - ich habe dein Skript erst mal etwas ( gewaltig
) optimiert. Da schreibst du dich ja tot bei.
Ich brauche mal noch die Struktur deiner Excel-Tabelle, um die Daten dort einzutragen. Im Bsp. lese ich einfach in die Console aus.
#include <DateTimeConstants.au3>
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1)
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)"]]
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()
While True
Sleep(100)
WEnd
Func _exit()
Exit
EndFunc
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
Edit:
Hier mal noch eine Variante mit ListView, finde ich ansprechender als 1000 Controls ![]()
#include <DateTimeConstants.au3>
#Include <GuiListView.au3>
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1)
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()
While True
Sleep(100)
WEnd
Func _exit()
Exit
EndFunc
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
Func _Transfer()
MsgBox(0, '', 'Noch nicht belegt')
EndFunc
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
)
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]]
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.
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).
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.
Interessant, dein letztes Posting.
Was willst du uns damit sagen? ![]()
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().
Opt("WinTitleMatchMode", 2)
[/autoit] Zitat von AutoIt HilfeAlters 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.
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.
Dim $color = 0xFF0000
HotKeySet("^!e", "_exit")
$GUI_Pixel = GUICreate('', 1, 1, 0, 0, $WS_POPUP)
GUISetBkColor($color)
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)
While True
Sleep(100)
WEnd
Func _exit()
Exit
EndFunc
Du kannst die Ränder zeichnen:
[autoit]#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$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 ()
Die Farbe für $hBrush wird angegeben: 0xAlpha R G B - setze für Alpha einfach FF und dahinter ganz normal der Hexfarbcode.
Grrrr, die Idee war gut.... aber: habe nicht bedacht, dass das Parent-Window keinen Popup-Style haben darf.
Mal überlegen, vielleicht fällt mir noch was ein.
@ 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 ![]()
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.