Es wäre viel hilfreicher, wenn Du so eine Textdatei mal als Anhang mitposten würdest.
Sonst kann man nämlich schlecht nachvollziehen, wo der Fehler steckt. ![]()
Beiträge von Oscar
-
-
Eine Funktion kannst Du mit "Return" vorzeitig verlassen.
-
Herzlichen Glückwunsch zum Geburtstag, Schnuffel!
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. -
Das ist auch kein Problem. Nur ein paar kleine Änderungen. Hab's oben bearbeitet.
-
$BS_ICON funktioniert im klassischen Style nicht.
Da Du aber sowieso keine Icons in den Buttons verwendest, kannst Du das doch auch weglassen. -
Schön, dass Dir das Beispiel gefällt. Ich habe meinen Post nochmal bearbeitet: Kommentare hinzugefügt und Hintergrundfarbe ändern anhand der Suchtreffer.
P.S.: Falls das Thema gelöst ist, bitte entsprechend Post #1 bearbeiten und Präfix auf "gelöst" setzen.
-
Das wurde schonmal gefragt, deshalb hatte ich mein Listview-Datenbank-Beispiel dahingehend erweitert:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>Global $sHeader = "Artikelnummer|Art|Nummer|Baureihe|Name" ; Die Überschriften für das Listview und für das "Neuer Eintrag"-Fenster
[/autoit] [autoit][/autoit] [autoit]
Global $sDBFile = @ScriptDir & "\datenbank.txt" ; Pfad und Name der Datenbank-Datei
Global $iEdit = -1 ; Wert auf -1 setzen, weil _GUICtrlListView_GetSelectionMark() einen Nullbasierten Wert liefert#region Hauptfenster
[/autoit] [autoit][/autoit] [autoit]
Global $hGui = GUICreate("Listview-Datenbank-Beispiel", 600, 480) ; Hauptfenster erstellen
GUISetBkColor(0xCCCCCC)Global $hListView = GUICtrlCreateListView($sHeader, 0, 0, 600, 400, $LVS_SHOWSELALWAYS) ; Listview erstellen
[/autoit] [autoit][/autoit] [autoit]Global $hLVHandle = GUICtrlGetHandle($hListView) ; das Handle vom Listview wird für die UDF-Listview-Funktionen benötigt
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlListView_SetColumn($hLVHandle, 0, "Artikelnummer", 120, 1) ; 1. Spalte = 120 Px breit, rechts ausgerichtet
_GUICtrlListView_SetColumn($hLVHandle, 1, "Art", 60, 0) ; 2. Spalte = 60 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hLVHandle, 2, "Nummer", 90, 0) ; 3. Spalte = 90 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hLVHandle, 3, "Baureihe", 100, 0) ; 4. Spalte = 100 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hLVHandle, 4, "Name", 120, 0) ; 5. Spalte = 120 Px breit, links ausgerichtetGlobal $hSearchListView = GUICtrlCreateListView($sHeader, 0, 0, 600, 400, $LVS_SHOWSELALWAYS) ; Listview für die Suche erstellen
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState(-1, $GUI_HIDE)
Global $hSearchLVHandle = GUICtrlGetHandle($hSearchListView) ; das Handle vom Listview wird für die UDF-Listview-Funktionen benötigt
_GUICtrlListView_SetColumn($hSearchLVHandle, 0, "Artikelnummer", 120, 1) ; 1. Spalte = 120 Px breit, rechts ausgerichtet
_GUICtrlListView_SetColumn($hSearchLVHandle, 1, "Art", 60, 0) ; 2. Spalte = 60 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hSearchLVHandle, 2, "Nummer", 90, 0) ; 3. Spalte = 90 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hSearchLVHandle, 3, "Baureihe", 100, 0) ; 4. Spalte = 100 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hSearchLVHandle, 4, "Name", 120, 0) ; 5. Spalte = 120 Px breit, links ausgerichtetGUICtrlCreateLabel("Suchbegriff:", 10, 412, 90, 20)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetFont(-1, 11)
Global $hSearch = GUICtrlCreateInput("", 100, 410, 390, 20) ; Suchbegriff-Input erstellen
GUICtrlSetFont(-1, 11)
Global $hSearchStart = GUICtrlCreateButton("Suche...", 500, 410, 60, 20, $BS_DEFPUSHBUTTON) ; Dieser Button ist der Default-Push-Button (wenn der User [Enter] drückt)
GUICtrlSetFont(-1, 9)
Global $hSearchReset = GUICtrlCreateButton("<-", 562, 410, 28, 20) ; Reset-Button erstellen
GUICtrlSetFont(-1, 8, 600, 0, "Verdana")
GUICtrlSetState(-1, $GUI_DISABLE) ; den Reset-Button deaktivierenGlobal $hNew = GUICtrlCreateButton("Neuer Eintrag", 5, 440, 80, 35)
[/autoit] [autoit][/autoit] [autoit]
Global $hEdit = GUICtrlCreateButton("Markierten Eintrag bearbeiten", 95, 440, 110, 35, $BS_MULTILINE) ; $BS_Multiline für mehrzeiligen Button
Global $hLoad = GUICtrlCreateButton("Laden", 230, 440, 70, 35)
Global $hSave = GUICtrlCreateButton("Speichern", 310, 440, 70, 35)
Global $hDel = GUICtrlCreateButton("Markierte Einträge löschen", 400, 440, 90, 35, $BS_MULTILINE)
Global $hDelAll = GUICtrlCreateButton("Alle Einträge löschen", 500, 440, 90, 35, $BS_MULTILINE)Global $hCM = GUICtrlCreateContextMenu($hListView) ; ein Kontextmenü für das Listview erstellen
[/autoit] [autoit][/autoit] [autoit]
Global $hCMNew = GUICtrlCreateMenuItem("Neuer Eintrag", $hCM) ; der 1. Kontextmenüeintrag
Global $hCMEdit = GUICtrlCreateMenuItem("Eintrag bearbeiten", $hCM) ; der 2. Kontextmenüeintrag
Global $hCMDel = GUICtrlCreateMenuItem("Markierte Einträge löschen", $hCM) ; der 3. Kontextmenüeintrag
#endregion Hauptfenster#region Fenster für neuen Eintrag
[/autoit] [autoit][/autoit] [autoit]
Global $hGuiNew = GUICreate("Neuer Eintrag", 632, 140, -1, -1, $WS_SYSMENU) ; das Fenster "Neuer Eintrag" erstellen
Global $aHeader = StringSplit($sHeader, '|') ; Überschriften-Array
Global $aNew[$aHeader[0]] ; Array für die Input-IDs
For $i = 1 To $aHeader[0]
GUICtrlCreateLabel($aHeader[$i], 4 + ($i - 1) * 125, 15, 110, 20) ; Überschriften-Label erstellen
GUICtrlSetFont(-1, 8, 400, 0, 'Verdana') ; Schriftgröße und -art der Überschriften festlegen
$aNew[$i - 1] = GUICtrlCreateInput("", 2 + ($i - 1) * 125, 30, 120, 20, Default, $WS_EX_STATICEDGE) ; Eingabefelder erstellen
GUICtrlSetFont(-1, 10, 600, 0, 'Verdana') ; Schriftgröße und -art der Eingabefelder festlegen
Next
Global $hCreate = GUICtrlCreateButton("Eintrag speichern", 254, 65, 120, 25, $BS_DEFPUSHBUTTON) ; Button zum speichern
#endregion Fenster für neuen Eintrag_GUICtrlListView_RegisterSortCallBack($hLVHandle) ; damit man das Listview (mit Klick auf die Spaltenüberschrift) sortieren kann
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlListView_RegisterSortCallBack($hSearchLVHandle) ; damit man das Suche-Listview (mit Klick auf die Spaltenüberschrift) sortieren kannGUISetState(@SW_SHOW, $hGui) ; Hauptfenster sichtbar machen
[/autoit] [autoit][/autoit] [autoit]If FileExists($sDBFile) Then Load() ; wenn Datenbank-Datei existiert, dann Datenbank laden
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg(1) ; Message-Event holen (1) = erweiterter Modus
Switch $nMsg[0] ; anhand der Control-ID das entsprechende Case aufrufen
Case $hSearchListView ; User hat auf eine Spaltenüberschrift geklickt
_GUICtrlListView_SortItems($hSearchLVHandle, GUICtrlGetState($hSearchListView)) ; Einträge entsprechend sortieren
Case $hListView ; User hat auf eine Spaltenüberschrift geklickt
_GUICtrlListView_SortItems($hLVHandle, GUICtrlGetState($hListView)) ; Einträge entsprechend sortieren
Case $hSearchStart ; Benutzer hat auf "Suche..." geklickt
GUICtrlSetState($hSearchStart, $GUI_DISABLE) ; Button deaktivieren
_GUICtrlListView_DeleteAllItems($hSearchLVHandle) ; alle Einträge aus dem Suche-Listview entfernen
Dim $sSearch = GUICtrlRead($hSearch), $sItem
For $i = 0 To _GUICtrlListView_GetItemCount($hLVHandle) - 1 ; In einer Schleife alle Listview-Einträge durchsuchen
$sItem = _GUICtrlListView_GetItemTextString($hLVHandle, $i) ; die entsprechende Zeile auslesen
If StringInStr($sItem, $sSearch) Then GUICtrlCreateListViewItem($sItem, $hSearchListView) ; und falls das Suchwort darin vorkommt, einen neuen Eintrag im Suche-Listview erstellen
Next
If _GUICtrlListView_GetItemCount($hSearchLVHandle) = 0 Then ; wenn kein Suchtreffer, dann...
GUICtrlSetBkColor($hSearchListView, 0xFF8888) ; Hintergrundfarbe in Rot ändern
Else
GUICtrlSetBkColor($hSearchListView, 0x88FF88) ; ansonsten Hintergrundfarbe in grün ändern
EndIf
GUICtrlSetState($hListView, $GUI_HIDE) ; das normale Listview verstecken
GUICtrlSetState($hSearchListView, $GUI_SHOW) ; und das Suche-Listview anzeigen
GUICtrlSetState($hSearchReset, $GUI_ENABLE) ; den Reset-Button aktivieren, damit der Benutzer wieder auf das normale Listview umschalten kann
Case $hSearchReset ; Benutzer hat auf den Reset-Button geklickt
GUICtrlSetData($hSearch, "") ; das Suchbegriff-Input leeren
GUICtrlSetState($hSearchListView, $GUI_HIDE) ; das Suche-Listview verstecken
GUICtrlSetState($hListView, $GUI_SHOW) ; das normale Listview wieder anzeigen
GUICtrlSetState($hSearchStart, $GUI_ENABLE) ; den "Suche..."-Button wieder aktivieren
GUICtrlSetState($hSearchReset, $GUI_DISABLE) ; und den Reset-Button deaktivieren
Case $hNew, $hCMNew ; Benutzer hat auf "Neuer Eintrag" geklickt
WinSetTitle($hGuiNew, "", "Neuer Eintrag") ; den Titel des Fenster anpassen
GUISetState(@SW_SHOW, $hGuiNew) ; das Fenster "Neuer Eintrag" anzeigen
GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
Case $hEdit, $hCMEdit ; User hat auf "Eintrag bearbeiten" geklickt
WinSetTitle($hGuiNew, "", "Eintrag bearbeiten") ; den Titel des Fenster anpassen
GUISetState(@SW_SHOW, $hGuiNew) ; das Fenster "Neuer Eintrag" anzeigen
GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
Edit()
Case $hLoad ; Benutzer hat auf "Laden" geklickt
Load()
Case $hSave ; Benutzer hat auf "Speichern" geklickt
Save()
Case $hDel, $hCMDel ; Benutzer hat auf "Markierte Einträge löschen" geklickt
If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie die markierten Einträge wirklich löschen?") = 6 Then _GUICtrlListView_DeleteItemsSelected($hLVHandle)
Case $hDelAll ; User hat auf "Alle Einträge löschen" geklickt
If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie wirklich alle Einträge löschen?") = 6 Then _GUICtrlListView_DeleteAllItems($hLVHandle)
Case $hCreate ; Benutzer hat auf "Eintrag speichern" im Fenster "Neuer Eintrag" geklickt
NewItem()
Case $GUI_EVENT_CLOSE ; Benutzer hat auf das Schließen-Symbol geklickt (bzw. die ESC-Taste gedrückt)
Switch $nMsg[1] ; erweiterte Abfrage für welches Fenster
Case $hGui ; Benutzer will das Hauptfenster schließen
If MsgBox(32 + 4, "Beenden", "Wollen sie das Programm wirklich beenden?") = 6 Then End() ; wenn ja, dann End-Funktion aufrufen
Case $hGuiNew ; Benutzer will das "Neuer Eintrag"-Fenster schließen
$iEdit = -1
For $i = 0 To UBound($aNew) - 1
GUICtrlSetData($aNew[$i], "") ; Alle Eingabefelder leeren
Next
GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
WinActivate($hGui) ; und in den Vordergrund holen
EndSwitch
EndSwitch
WEndFunc End()
[/autoit] [autoit][/autoit] [autoit]
;~ Save() ; wenn der vordere Kommentar entfernt wird, dann werden vor dem beenden noch die Daten gespeichert
_GUICtrlListView_UnRegisterSortCallBack($hSearchLVHandle) ; Sortierroutine wieder de-registrieren
_GUICtrlListView_UnRegisterSortCallBack($hLVHandle) ; Sortierroutine wieder de-registrieren
Exit ; Programm beenden
EndFunc ;==>EndFunc NewItem() ; Funktion zum auslesen der Eingabefelder (Neuer Eintrag bzw. Eintrag bearbeiten)
[/autoit] [autoit][/autoit] [autoit]
Local $sItem = ""
For $i = 0 To UBound($aNew) - 1 ; Schleife, um alle Eingabefelder durchzugehen
If $iEdit > -1 Then ; wenn $iEdit > -1 (Eintrag bearbeiten), dann...
_GUICtrlListView_SetItemText($hLVHandle, $iEdit, GUICtrlRead($aNew[$i]), $i) ; den Eintrag aus dem Eingabefeld ins Listview schreiben
Else ; sonst $iEdit = -1 (neuer Eintrag)
$sItem &= GUICtrlRead($aNew[$i]) & "|" ; den Eintrag aus dem Eingabefeld erstmal in einer Variablen ($sItem) speichern
EndIf
GUICtrlSetData($aNew[$i], "") ; das entsprechende Eingabefeld leeren
Next
If $iEdit > -1 Then ; wenn $iEdit > -1 (Eintrag bearbeiten), dann...
$iEdit = -1
GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
Sleep(300)
WinActivate($hGui) ; und in den Vordergrund holen
Else ; sonst $iEdit = -1 (neuer Eintrag)
GUICtrlSetState($aNew[0], $GUI_FOCUS) ; den Focus wieder auf das erste Eingabefeld setzen, für weitere Eingaben
GUICtrlCreateListViewItem(StringTrimRight($sItem, 1), $hListView) ; mit den Werten aus $sItem einen neuen Listview-Eintrag hinzufügen
EndIf
EndFunc ;==>NewItemFunc Edit() ; Funktion zum bearbeiten eines Listview-Eintrags im "Eintrag bearbeiten"-Fenster
[/autoit] [autoit][/autoit] [autoit]
$iEdit = _GUICtrlListView_GetSelectionMark($hLVHandle) ; auslesen, welcher Listview-Eintrag markiert (bei mehreren, den obersten) ist
If $iEdit > -1 Then
Local $aItem = _GUICtrlListView_GetItemTextArray($hLVHandle, $iEdit) ; die Einträge aus dem Listview in ein Array holen
For $i = 1 To $aItem[0]
GUICtrlSetData($aNew[$i - 1], $aItem[$i]) ; und in die entsprechenden Eingabefelder schreiben
Next
EndIf
EndFunc ;==>EditFunc Load() ; Datenbank-Datei laden
[/autoit] [autoit][/autoit] [autoit]
Local $hFile, $sContent, $aNewItems
$hFile = FileOpen($sDBFile, 0) ; Datei zum lesen öffnen
If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
$sContent = FileRead($hFile) ; Datei komplett einlesen
FileClose($hFile) ; Datei schließen
$sContent = StringTrimRight($sContent, 2) ; das letzte @CRLF entfernen
$aNewItems = StringSplit($sContent, @CRLF, 1) ; Den Dateiinhalt am Zeilenende splitten
If Not IsArray($aNewItems) Then Return ; Wenn $aNewItems kein Array ist, dann Funktion verlassen
_GUICtrlListView_BeginUpdate($hLVHandle) ; Listview sperren
For $i = 1 To $aNewItems[0] ; Alle Einträge des Arrays durchgehen
GUICtrlCreateListViewItem($aNewItems[$i], $hListView) ; mit den eingelesenen Daten einen neuen Listview-Eintrag erstellen
Next
_GUICtrlListView_EndUpdate($hLVHandle) ; Listview wieder freigeben
EndIf
EndFunc ;==>LoadFunc Save() ; Datenbank-Datei speichern
[/autoit]
Local $sItem, $hFile, $iCount
$iCount = _GUICtrlListView_GetItemCount($hLVHandle) - 1 ; Anzahl der Listview-Einträge holen
If $iCount = -1 Then Return FileDelete($sDBFile) ; Wenn das Listview keine Einträge enthält, dann Datei löschen und Funktion verlassen
$hFile = FileOpen($sDBFile, 2) ; Datei zum speichern (überschreiben) öffnen
If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
For $i = 0 To $iCount ; Schleife, um alle Listview-Einträge durchzugehen
$sItem = _GUICtrlListView_GetItemTextString($hLVHandle, $i) ; die Werte aus dem Listview-Eintrag holen
FileWriteLine($hFile, $sItem) ; und in die Datei schreiben
Next
FileClose($hFile) ; Datei schließen
EndIf
EndFunc ;==>Save
Dort kannst Du einen Suchbegriff eingeben und das Ergebnis wird im zweiten (vorher versteckten) Listview angezeigt.Edit: Skript mit weiteren Kommentaren versehen und eine Änderung der Hintergrundfarbe (grün = Suchtreffer vorhanden, rot = kein Suchtreffer) eingebaut.
Edit2: Sortierung für das Suche-Listview hinzugefügt.
-
Du kannst es auch vor dem sortieren ersetzen lassen und hinterher wieder zurücksetzen:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GuiListView.au3>Const $programm = 'Test'
[/autoit] [autoit][/autoit] [autoit]Local $aLi
[/autoit] [autoit][/autoit] [autoit]GUICreate($programm, 500, 500)
[/autoit] [autoit][/autoit] [autoit]
$GuiBut_beenden = GUICtrlCreateButton('Beenden', 5, 5)
;$GuiList = GUICtrlCreateListView('Datei|Zuletzt Bearbeitet|Größe', 80, 20, 400, 200, 0x0001, BitOR(0x00000001, 0x00000020, 0x00010000))
$ListView1 = GUICtrlCreateListView("Nr|Spalte1|Spalte2|Spalte3", 24, 72, 400, 400)GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlListView_SetColumnWidth($ListView1, 0, 40)
_GUICtrlListView_SetColumnWidth($ListView1, 1, 75)
_GUICtrlListView_SetColumnWidth($ListView1, 2, 75)
_GUICtrlListView_SetColumnWidth($ListView1, 3, 75);GUICtrlCreateListViewItem('A|qwer|zuio', $ListView1)
[/autoit] [autoit][/autoit] [autoit]
;GUICtrlCreateListViewItem('B|asdf|hjkl', $ListView1)
;GUICtrlCreateListViewItem('C|yxcv|vbnm', $ListView1)
;_GUICtrlListView_SimpleSort($ListView1, $B_DESCENDING, 3)
#endregion ### END Koda GUI section ###
Global $hWndListView = GUICtrlGetHandle($ListView1)
_GUICtrlListView_RegisterSortCallBack($hWndListView)For $i = 1 To 30
[/autoit] [autoit][/autoit] [autoit]
$aLi = $i & ",20" & '|' & '|' & '|'
GUICtrlCreateListViewItem($aLi, $ListView1)
NextGUISetState()
[/autoit] [autoit][/autoit] [autoit]
Global $hWndListView = GUICtrlGetHandle($ListView1)
_GUICtrlListView_RegisterSortCallBack($hWndListView)
Do
$aktion = GUIGetMsg()
Switch $aktion
Case $ListView1
_SwitchKomma($ListView1, ',', '.')
_GUICtrlListView_SortItems($hWndListView, GUICtrlGetState($ListView1))
_SwitchKomma($ListView1, '.', ',')
Case $GuiBut_beenden
ContinueCase
Case -3
_GUICtrlListView_UnRegisterSortCallBack($hWndListView)
Exit
EndSwitch
Until 0Func _SwitchKomma($hListView, $sSearch, $sReplace)
[/autoit]
_GUICtrlListView_BeginUpdate($hListView)
For $i = 0 To _GUICtrlListView_GetItemCount($hListView) - 1
_GUICtrlListView_SetItemText($hListView, $i, StringReplace(_GUICtrlListView_GetItemText($hListView, $i), $sSearch, $sReplace))
Next
_GUICtrlListView_EndUpdate($hListView)
EndFunc ;==>_SwitchKomma -
Zu später Stunde, aber noch rechtzeitig: Alles Liebe und Gute zum Geburtstag!
Bleib uns auch in diesem Lebensjahr erhalten.
-
Du musst auch die Breite des Labels anpassen:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <Array.au3>
#include <GUIConstantsEx.au3>Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]$Gui = GUICreate("Namen", 701, 571, 208, 178)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, "_End")
$Pic1 = GUICtrlCreatePic("C:\Users\Ilse\Desktop\Backbild.jpg", -4, -4, 805, 629)
GUICtrlSetState(-1, $GUI_DISABLE)
$SelectAll = GUICtrlCreateButton("Select all", 568, 424, 75, 25)
GUICtrlSetOnEvent(-1, "_SelectAll")
;$Alle = GUICtrlCreateButton("Alle", 304, 232, 75, 25)Dim $var[19][2] = [[18,0],[1, 'Petra-Müller'],[2, 'Klaus Schmidt'],[3, 'Lissi'],[4, 'Norbert'],[5, 'Paul'],[6, 'Carla'],[7, 'Fritz'],[8, 'Tanja'],[9, 'Bert'], _
[/autoit] [autoit][/autoit] [autoit]
[10, 'Rosi'],[11, 'Peter'],[12, 'Lena'],[13, 'Ralf'],[14, 'Theo'],[15, 'Zora'],[16, 'Birgit'],[17, 'Sandra'],[18, 'Tom']];~ $var = IniReadSection(@ScriptDir & '\meine.ini', "Titel")
[/autoit] [autoit][/autoit] [autoit];~ If @error Then
[/autoit] [autoit][/autoit] [autoit]
;~ MsgBox(4096, "", "Error occurred, probably no INI file.")
;~ EndIf
_ArrayDelete($var, 0)
;Local $aktiv = True
Dim $arControl[UBound($var)][2], $arProgress[UBound($var)]Dim $Links = 50
[/autoit] [autoit][/autoit] [autoit]
Dim $Oben = 20
Dim $Zwischen = 25
Dim $Zeilen = 8 ; <- hier die Anzahl der Zeilen eintragen
Dim $Abstand = 220 ; <- hier den Abstand zwischen den Spalten eintragenFor $i = 0 To UBound($arControl) - 1
[/autoit] [autoit][/autoit] [autoit]
$arControl[$i][0] = GUICtrlCreateCheckbox('', $Links + Int($i / $Zeilen) * $Abstand, $Oben + Mod($i, $Zeilen) * $Zwischen, 20, 20)
GUICtrlSetFont(-1, 12, 500, 0, "Arial") ; hier habe ich die Schriftgröße geändert
$arControl[$i][1] = GUICtrlCreateLabel($var[$i][1], $Links + 20 + Int($i / $Zeilen) * $Abstand, $Oben + Mod($i, $Zeilen) * $Zwischen, 110, 20) ; <- hier die Breite (60) und Höhe (20) angeben.
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetOnEvent(-1, "_CheckboxSelect")
GUICtrlSetFont(-1, 12, 500, 0, "Arial") ; hier habe ich die Schriftgröße geändert
$arProgress[$i] = GUICtrlCreateProgress($Links + 130 + Int($i / $Zeilen) * $Abstand, $Oben + Mod($i, $Zeilen) * $Zwischen, 70, 20)
Next
GUISetState(@SW_SHOW)While Sleep(1000)
[/autoit] [autoit][/autoit] [autoit]
WEndFunc _End()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFunc ;==>_EndFunc _SelectAll()
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To UBound($arControl) - 1
GUICtrlSetState($arControl[$i][0], $gui_checked)
Next
EndFunc ;==>_SelectAllFunc _CheckboxSelect()
[/autoit]
Local $ID = @GUI_CtrlId - 1
If BitAND(GUICtrlRead($ID), $gui_checked) Then
GUICtrlSetState($ID, $gui_unchecked)
Else
GUICtrlSetState($ID, $gui_checked)
EndIf
EndFunc ;==>_CheckboxSelect -
Du musst die Variable $Abstand vergrößern, sodass die Progressbar weiter weg vom Label ist.
Außerdem ist es wohl ganz hilfreich beim Label die Breite und Höhe anzugeben (anpassen, siehe Kommentar).Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <Array.au3>
#include <GUIConstantsEx.au3>Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]$Gui = GUICreate("Namen", 701, 571, 208, 178)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, "_End")
$Pic1 = GUICtrlCreatePic("C:\Users\Ilse\Desktop\Backbild.jpg", -4, -4, 805, 629)
GUICtrlSetState(-1, $GUI_DISABLE)
$SelectAll = GUICtrlCreateButton("Select all", 568, 424, 75, 25)
GUICtrlSetOnEvent(-1, "_SelectAll")
;$Alle = GUICtrlCreateButton("Alle", 304, 232, 75, 25)Dim $var[19][2] = [[18,0],[1, 'Petra'],[2, 'Klaus'],[3, 'Lissi'],[4, 'Norbert'],[5, 'Paul'],[6, 'Carla'],[7, 'Fritz'],[8, 'Tanja'],[9, 'Bert'], _
[/autoit] [autoit][/autoit] [autoit]
[10, 'Rosi'],[11, 'Peter'],[12, 'Lena'],[13, 'Ralf'],[14, 'Theo'],[15, 'Zora'],[16, 'Birgit'],[17, 'Sandra'],[18, 'Tom']];~ $var = IniReadSection(@ScriptDir & '\meine.ini', "Titel")
[/autoit] [autoit][/autoit] [autoit];~ If @error Then
[/autoit] [autoit][/autoit] [autoit]
;~ MsgBox(4096, "", "Error occurred, probably no INI file.")
;~ EndIf
_ArrayDelete($var, 0)
;Local $aktiv = True
Dim $arControl[UBound($var)][2], $arProgress[UBound($var)]Dim $Links = 50
[/autoit] [autoit][/autoit] [autoit]
Dim $Oben = 20
Dim $Zwischen = 25
Dim $Zeilen = 8 ; <- hier die Anzahl der Zeilen eintragen
Dim $Abstand = 220 ; <- hier den Abstand zwischen den Spalten eintragenFor $i = 0 To UBound($arControl) - 1
[/autoit] [autoit][/autoit] [autoit]
$arControl[$i][0] = GUICtrlCreateCheckbox('', $Links + Int($i / $Zeilen) * $Abstand, $Oben + Mod($i, $Zeilen) * $Zwischen, 20, 20)
GUICtrlSetFont(-1, 12, 500, 0, "Arial") ; hier habe ich die Schriftgröße geändert
$arControl[$i][1] = GUICtrlCreateLabel($var[$i][1], $Links + 20 + Int($i / $Zeilen) * $Abstand, $Oben + Mod($i, $Zeilen) * $Zwischen, 60, 20) ; <- hier die Breite (60) und Höhe (20) angeben.
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetOnEvent(-1, "_CheckboxSelect")
GUICtrlSetFont(-1, 12, 500, 0, "Arial") ; hier habe ich die Schriftgröße geändert
$arProgress[$i] = GUICtrlCreateProgress($Links + 80 + Int($i / $Zeilen) * $Abstand, $Oben + Mod($i, $Zeilen) * $Zwischen, 70, 20)
Next
GUISetState(@SW_SHOW)While Sleep(1000)
[/autoit] [autoit][/autoit] [autoit]
WEndFunc _End()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFunc ;==>_EndFunc _SelectAll()
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To UBound($arControl) - 1
GUICtrlSetState($arControl[$i][0], $gui_checked)
Next
EndFunc ;==>_SelectAllFunc _CheckboxSelect()
[/autoit] [autoit][/autoit] [autoit][/autoit]
Local $ID = @GUI_CtrlId - 1
If BitAND(GUICtrlRead($ID), $gui_checked) Then
GUICtrlSetState($ID, $gui_unchecked)
Else
GUICtrlSetState($ID, $gui_checked)
EndIf
EndFunc ;==>_CheckboxSelect -
Die Anführungszeichen kennzeichnen den Anfang von einem String. Es fehlt also ein weiteres Anführungszeichen dahinter.
[autoit]
Wenn Du das Anführungszeichen selbst speichern willst, benutze die einfachen Anführungszeichen zum einschließen:FileWrite($file, "start" & $Input3 & '"')
[/autoit]
[autoit]
oder schreibe den ASCII-Code:FileWrite($file, "start" & $Input3 & Chr(34))
[/autoit] -
Da das ListView-Datenbank-Beispiel von mir ist, habe ich das Beispiel mal um eine Suchfunktion erweitert:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>Global $sHeader = "Artikelnummer|Art|Nummer|Baureihe|Name" ; Die Überschriften für das Listview und für das "Neuer Eintrag"-Fenster
[/autoit] [autoit][/autoit] [autoit]
Global $sDBFile = @ScriptDir & "\datenbank.txt" ; Pfad und Name der Datenbank-Datei
Global $iEdit = -1 ; Wert auf -1 setzen, weil _GUICtrlListView_GetSelectionMark() einen Nullbasierten Wert liefert#region Hauptfenster
[/autoit] [autoit][/autoit] [autoit]
Global $hGui = GUICreate("Listview-Datenbank-Beispiel", 600, 480) ; Hauptfenster erstellen
GUISetBkColor(0xCCCCCC)Global $hListView = GUICtrlCreateListView($sHeader, 0, 0, 600, 400, $LVS_SHOWSELALWAYS) ; Listview erstellen
[/autoit] [autoit][/autoit] [autoit]Global $hLVHandle = GUICtrlGetHandle($hListView) ; das Handle vom Listview wird für die UDF-Listview-Funktionen benötigt
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlListView_SetColumn($hLVHandle, 0, "Artikelnummer", 120, 1) ; 1. Spalte = 120 Px breit, rechts ausgerichtet
_GUICtrlListView_SetColumn($hLVHandle, 1, "Art", 60, 0) ; 2. Spalte = 60 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hLVHandle, 2, "Nummer", 90, 0) ; 3. Spalte = 90 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hLVHandle, 3, "Baureihe", 100, 0) ; 4. Spalte = 100 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hLVHandle, 4, "Name", 120, 0) ; 5. Spalte = 120 Px breit, links ausgerichtetGlobal $hSearchListView = GUICtrlCreateListView($sHeader, 0, 0, 600, 400, $LVS_SHOWSELALWAYS) ; Listview für die Suche erstellen
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState(-1, $GUI_HIDE)
Global $hSearchLVHandle = GUICtrlGetHandle($hSearchListView) ; das Handle vom Listview wird für die UDF-Listview-Funktionen benötigt
_GUICtrlListView_SetColumn($hSearchLVHandle, 0, "Artikelnummer", 120, 1) ; 1. Spalte = 120 Px breit, rechts ausgerichtet
_GUICtrlListView_SetColumn($hSearchLVHandle, 1, "Art", 60, 0) ; 2. Spalte = 60 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hSearchLVHandle, 2, "Nummer", 90, 0) ; 3. Spalte = 90 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hSearchLVHandle, 3, "Baureihe", 100, 0) ; 4. Spalte = 100 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hSearchLVHandle, 4, "Name", 120, 0) ; 5. Spalte = 120 Px breit, links ausgerichtetGUICtrlCreateLabel("Suchbegriff:", 10, 412, 90, 20)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetFont(-1, 11)
Global $hSearch = GUICtrlCreateInput("", 100, 410, 390, 20)
GUICtrlSetFont(-1, 11)
Global $hSearchStart = GUICtrlCreateButton("Suche...", 500, 410, 60, 20, $BS_DEFPUSHBUTTON) ; Dieser Button ist der Default-Push-Button (wenn der User [Enter] drückt)
GUICtrlSetFont(-1, 9)
Global $hSearchReset = GUICtrlCreateButton("<-", 562, 410, 28, 20)
GUICtrlSetFont(-1, 8, 600, 0, "Verdana")
GUICtrlSetState(-1, $GUI_DISABLE)Global $hNew = GUICtrlCreateButton("Neuer Eintrag", 5, 440, 80, 35)
[/autoit] [autoit][/autoit] [autoit]
Global $hEdit = GUICtrlCreateButton("Markierten Eintrag bearbeiten", 95, 440, 110, 35, $BS_MULTILINE) ; $BS_Multiline für mehrzeiligen Button
Global $hLoad = GUICtrlCreateButton("Laden", 230, 440, 70, 35)
Global $hSave = GUICtrlCreateButton("Speichern", 310, 440, 70, 35)
Global $hDel = GUICtrlCreateButton("Markierte Einträge löschen", 400, 440, 90, 35, $BS_MULTILINE)
Global $hDelAll = GUICtrlCreateButton("Alle Einträge löschen", 500, 440, 90, 35, $BS_MULTILINE)Global $hCM = GUICtrlCreateContextMenu($hListView) ; ein Kontextmenü für das Listview erstellen
[/autoit] [autoit][/autoit] [autoit]
Global $hCMNew = GUICtrlCreateMenuItem("Neuer Eintrag", $hCM) ; der 1. Kontextmenüeintrag
Global $hCMEdit = GUICtrlCreateMenuItem("Eintrag bearbeiten", $hCM) ; der 2. Kontextmenüeintrag
Global $hCMDel = GUICtrlCreateMenuItem("Markierte Einträge löschen", $hCM) ; der 3. Kontextmenüeintrag
#endregion Hauptfenster#region Fenster für neuen Eintrag
[/autoit] [autoit][/autoit] [autoit]
Global $hGuiNew = GUICreate("Neuer Eintrag", 632, 140, -1, -1, $WS_SYSMENU) ; das Fenster "Neuer Eintrag" erstellen
Global $aHeader = StringSplit($sHeader, '|') ; Überschriften-Array
Global $aNew[$aHeader[0]] ; Array für die Input-IDs
For $i = 1 To $aHeader[0]
GUICtrlCreateLabel($aHeader[$i], 4 + ($i - 1) * 125, 15, 110, 20) ; Überschriften-Label erstellen
GUICtrlSetFont(-1, 8, 400, 0, 'Verdana') ; Schriftgröße und -art der Überschriften festlegen
$aNew[$i - 1] = GUICtrlCreateInput("", 2 + ($i - 1) * 125, 30, 120, 20, Default, $WS_EX_STATICEDGE) ; Eingabefelder erstellen
GUICtrlSetFont(-1, 10, 600, 0, 'Verdana') ; Schriftgröße und -art der Eingabefelder festlegen
Next
Global $hCreate = GUICtrlCreateButton("Eintrag speichern", 254, 65, 120, 25, $BS_DEFPUSHBUTTON) ; Button zum speichern
#endregion Fenster für neuen Eintrag_GUICtrlListView_RegisterSortCallBack($hLVHandle) ; damit man das Listview (mit Klick auf die Spaltenüberschrift) sortieren kann
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW, $hGui) ; Hauptfenster sichtbar machen
[/autoit] [autoit][/autoit] [autoit]If FileExists($sDBFile) Then Load() ; wenn Datenbank-Datei existiert, dann Datenbank laden
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg(1) ; Message-Event holen (1) = erweiterter Modus
Switch $nMsg[0] ; anhand der Control-ID das entsprechende Case aufrufen
Case $hListView ; User hat auf eine Spaltenüberschrift geklickt
_GUICtrlListView_SortItems($hLVHandle, GUICtrlGetState($hListView)) ; Einträge entsprechend sortieren
Case $hSearchStart
GUICtrlSetState($hSearchStart, $GUI_DISABLE)
_GUICtrlListView_DeleteAllItems($hSearchLVHandle)
Dim $sSearch = GUICtrlRead($hSearch), $sItem
For $i = 0 To _GUICtrlListView_GetItemCount($hLVHandle) - 1
$sItem = _GUICtrlListView_GetItemTextString($hLVHandle, $i)
If StringInStr($sItem, $sSearch) Then GUICtrlCreateListViewItem($sItem, $hSearchListView)
Next
GUICtrlSetState($hListView, $GUI_HIDE)
GUICtrlSetState($hSearchListView, $GUI_SHOW)
GUICtrlSetState($hSearchReset, $GUI_ENABLE)
Case $hSearchReset
GUICtrlSetData($hSearch, "")
GUICtrlSetState($hSearchListView, $GUI_HIDE)
GUICtrlSetState($hListView, $GUI_SHOW)
GUICtrlSetState($hSearchStart, $GUI_ENABLE)
GUICtrlSetState($hSearchReset, $GUI_DISABLE)
Case $hNew, $hCMNew ; User hat auf "Neuer Eintrag" geklickt
WinSetTitle($hGuiNew, "", "Neuer Eintrag") ; den Titel des Fenster anpassen
GUISetState(@SW_SHOW, $hGuiNew) ; das Fenster "Neuer Eintrag" anzeigen
GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
Case $hEdit, $hCMEdit ; User hat auf "Eintrag bearbeiten" geklickt
WinSetTitle($hGuiNew, "", "Eintrag bearbeiten") ; den Titel des Fenster anpassen
GUISetState(@SW_SHOW, $hGuiNew) ; das Fenster "Neuer Eintrag" anzeigen
GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
Edit()
Case $hLoad ; User hat auf "Laden" geklickt
Load()
Case $hSave ; User hat auf "Laden" geklickt
Save()
Case $hDel, $hCMDel ; User hat auf "Markierte Einträge löschen" geklickt
If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie die markierten Einträge wirklich löschen?") = 6 Then _GUICtrlListView_DeleteItemsSelected($hLVHandle)
Case $hDelAll ; User hat auf "Alle Einträge löschen" geklickt
If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie wirklich alle Einträge löschen?") = 6 Then _GUICtrlListView_DeleteAllItems($hLVHandle)
Case $hCreate ; User hat auf "Eintrag speichern" im Fenster "Neuer Eintrag" geklickt
NewItem()
Case $GUI_EVENT_CLOSE ; User hat auf das Schließen-Symbol geklickt (bzw. die ESC-Taste gedrückt)
Switch $nMsg[1] ; erweiterte Abfrage für welches Fenster
Case $hGui ; User will das Hauptfenster schließen
If MsgBox(32 + 4, "Beenden", "Wollen sie das Programm wirklich beenden?") = 6 Then End() ; wenn ja, dann End-Funktion aufrufen
Case $hGuiNew ; User will das "Neuer Eintrag"-Fenster schließen
$iEdit = -1
For $i = 0 To UBound($aNew) - 1
GUICtrlSetData($aNew[$i], "") ; Alle Eingabefelder leeren
Next
GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
WinActivate($hGui) ; und in den Vordergrund holen
EndSwitch
EndSwitch
WEndFunc End()
[/autoit] [autoit][/autoit] [autoit]
;~ Save() ; wenn der vordere Kommentar entfernt wird, dann werden vor dem beenden noch die Daten gespeichert
_GUICtrlListView_UnRegisterSortCallBack($hLVHandle) ; Sortierroutine wieder de-registrieren
Exit ; Programm beenden
EndFunc ;==>EndFunc NewItem() ; Funktion zum auslesen der Eingabefelder (Neuer Eintrag bzw. Eintrag bearbeiten)
[/autoit] [autoit][/autoit] [autoit]
Local $sItem = ""
For $i = 0 To UBound($aNew) - 1 ; Schleife, um alle Eingabefelder durchzugehen
If $iEdit > -1 Then ; wenn $iEdit > -1 (Eintrag bearbeiten), dann...
_GUICtrlListView_SetItemText($hLVHandle, $iEdit, GUICtrlRead($aNew[$i]), $i) ; den Eintrag aus dem Eingabefeld ins Listview schreiben
Else ; sonst $iEdit = -1 (neuer Eintrag)
$sItem &= GUICtrlRead($aNew[$i]) & "|" ; den Eintrag aus dem Eingabefeld erstmal in einer Variablen ($sItem) speichern
EndIf
GUICtrlSetData($aNew[$i], "") ; das entsprechende Eingabefeld leeren
Next
If $iEdit > -1 Then ; wenn $iEdit > -1 (Eintrag bearbeiten), dann...
$iEdit = -1
GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
Sleep(300)
WinActivate($hGui) ; und in den Vordergrund holen
Else ; sonst $iEdit = -1 (neuer Eintrag)
GUICtrlSetState($aNew[0], $GUI_FOCUS) ; den Focus wieder auf das erste Eingabefeld setzen, für weitere Eingaben
GUICtrlCreateListViewItem(StringTrimRight($sItem, 1), $hListView) ; mit den Werten aus $sItem einen neuen Listview-Eintrag hinzufügen
EndIf
EndFunc ;==>NewItemFunc Edit() ; Funktion zum bearbeiten eines Listview-Eintrags im "Eintrag bearbeiten"-Fenster
[/autoit] [autoit][/autoit] [autoit]
$iEdit = _GUICtrlListView_GetSelectionMark($hLVHandle) ; auslesen, welcher Listview-Eintrag markiert (bei mehreren, den obersten) ist
If $iEdit > -1 Then
Local $aItem = _GUICtrlListView_GetItemTextArray($hLVHandle, $iEdit) ; die Einträge aus dem Listview in ein Array holen
For $i = 1 To $aItem[0]
GUICtrlSetData($aNew[$i - 1], $aItem[$i]) ; und in die entsprechenden Eingabefelder schreiben
Next
EndIf
EndFunc ;==>EditFunc Load() ; Datenbank-Datei laden
[/autoit] [autoit][/autoit] [autoit]
Local $hFile, $sContent, $aNewItems
$hFile = FileOpen($sDBFile, 0) ; Datei zum lesen öffnen
If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
$sContent = FileRead($hFile) ; Datei komplett einlesen
FileClose($hFile) ; Datei schließen
$sContent = StringTrimRight($sContent, 2) ; das letzte @CRLF entfernen
$aNewItems = StringSplit($sContent, @CRLF, 1) ; Den Dateiinhalt am Zeilenende splitten
If Not IsArray($aNewItems) Then Return ; Wenn $aNewItems kein Array ist, dann Funktion verlassen
_GUICtrlListView_BeginUpdate($hLVHandle) ; Listview sperren
For $i = 1 To $aNewItems[0] ; Alle Einträge des Arrays durchgehen
GUICtrlCreateListViewItem($aNewItems[$i], $hListView) ; mit den eingelesenen Daten einen neuen Listview-Eintrag erstellen
Next
_GUICtrlListView_EndUpdate($hLVHandle) ; Listview wieder freigeben
EndIf
EndFunc ;==>LoadFunc Save() ; Datenbank-Datei speichern
[/autoit]
Local $sItem, $hFile, $iCount
$iCount = _GUICtrlListView_GetItemCount($hLVHandle) - 1 ; Anzahl der Listview-Einträge holen
If $iCount = -1 Then Return FileDelete($sDBFile) ; Wenn das Listview keine Einträge enthält, dann Datei löschen und Funktion verlassen
$hFile = FileOpen($sDBFile, 2) ; Datei zum speichern (überschreiben) öffnen
If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
For $i = 0 To $iCount ; Schleife, um alle Listview-Einträge durchzugehen
$sItem = _GUICtrlListView_GetItemTextString($hLVHandle, $i) ; die Werte aus dem Listview-Eintrag holen
FileWriteLine($hFile, $sItem) ; und in die Datei schreiben
Next
FileClose($hFile) ; Datei schließen
EndIf
EndFunc ;==>Save -
Ich hab's mal in Variablen gepackt:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <Array.au3>
#include <GUIConstantsEx.au3>Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]$Gui = GUICreate("Namen", 701, 571, 208, 178)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, "_End")
$Pic1 = GUICtrlCreatePic("C:\Users\Ilse\Desktop\Backbild.jpg", -4, -4, 805, 629)
GUICtrlSetState(-1, $GUI_DISABLE)
$SelectAll = GUICtrlCreateButton("Select all", 568, 424, 75, 25)
GUICtrlSetOnEvent(-1, "_SelectAll")
;$Alle = GUICtrlCreateButton("Alle", 304, 232, 75, 25)Dim $var[19][2] = [[18,0],[1, 'Petra'],[2, 'Klaus'],[3, 'Lissi'],[4, 'Norbert'],[5, 'Paul'],[6, 'Carla'],[7, 'Fritz'],[8, 'Tanja'],[9, 'Bert'], _
[/autoit] [autoit][/autoit] [autoit]
[10, 'Rosi'],[11, 'Peter'],[12, 'Lena'],[13, 'Ralf'],[14, 'Theo'],[15, 'Zora'],[16, 'Birgit'],[17, 'Sandra'],[18, 'Tom']];~ $var = IniReadSection(@ScriptDir & '\meine.ini', "Titel")
[/autoit] [autoit][/autoit] [autoit];~ If @error Then
[/autoit] [autoit][/autoit] [autoit]
;~ MsgBox(4096, "", "Error occurred, probably no INI file.")
;~ EndIf
_ArrayDelete($var, 0)
;Local $aktiv = True
Dim $arControl[UBound($var)][2], $arProgress[UBound($var)]Dim $Links = 50
[/autoit] [autoit][/autoit] [autoit]
Dim $Oben = 20
Dim $Zwischen = 25
Dim $Zeilen = 8 ; <- hier die Anzahl der Zeilen eintragen
Dim $Abstand = 220 ; <- hier den Abstand zwischen den Spalten eintragenFor $i = 0 To UBound($arControl) - 1
[/autoit] [autoit][/autoit] [autoit]
$arControl[$i][0] = GUICtrlCreateCheckbox('', $Links + Int($i / $Zeilen) * $Abstand, $Oben + Mod($i, $Zeilen) * $Zwischen, 13, 13)
$arControl[$i][1] = GUICtrlCreateLabel($var[$i][1], $Links + 20 + Int($i / $Zeilen) * $Abstand, $Oben + Mod($i, $Zeilen) * $Zwischen)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetOnEvent(-1, "_CheckboxSelect")
$arProgress[$i] = GUICtrlCreateProgress($Links + 80 + Int($i / $Zeilen) * $Abstand, $Oben + Mod($i, $Zeilen) * $Zwischen, 70, 14)
Next
GUISetState(@SW_SHOW)While Sleep(1000)
[/autoit] [autoit][/autoit] [autoit]
WEndFunc _End()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFunc ;==>_EndFunc _SelectAll()
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To UBound($arControl) - 1
GUICtrlSetState($arControl[$i][0], $gui_checked)
Next
EndFunc ;==>_SelectAllFunc _CheckboxSelect()
[/autoit]
Local $ID = @GUI_CtrlId - 1
If BitAND(GUICtrlRead($ID), $gui_checked) Then
GUICtrlSetState($ID, $gui_unchecked)
Else
GUICtrlSetState($ID, $gui_checked)
EndIf
EndFunc ;==>_CheckboxSelect -
Ahh! IniReadSection gibt in $var[0][0] die Anzahl der Elemente zurück.
[autoit]
Füge einfach:_ArrayDelete($var, 0)
[/autoit]
nach IniReadSection ein.Und am Anfang:
[autoit]#include <Array.au3>
[/autoit]
nicht vergessen.
-
Achso!
Die Anzahl der Spalten ist abhängig von der Anzahl der benutzten Zeilen.
Ich habe das Beispiel mal etwas geändert, damit Du die Anzahl der Zeilen entsprechend anpassen kannst (siehe Kommentare):Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]$Gui = GUICreate("Namen", 701, 571, 208, 178)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, "_End")
$Pic1 = GUICtrlCreatePic("C:\Users\Ilse\Desktop\Backbild.jpg", -4, -4, 805, 629)
GUICtrlSetState(-1, $GUI_DISABLE)
$SelectAll = GUICtrlCreateButton("Select all", 568, 424, 75, 25)
GUICtrlSetOnEvent(-1, "_SelectAll")
;$Alle = GUICtrlCreateButton("Alle", 304, 232, 75, 25)Dim $var[18][2] = [[1, 'Petra'],[2, 'Klaus'],[3, 'Lissi'],[4, 'Norbert'],[5, 'Paul'],[6, 'Carla'],[7, 'Fritz'],[8, 'Tanja'],[9, 'Bert'], _
[/autoit] [autoit][/autoit] [autoit]
[10, 'Rosi'],[11, 'Peter'],[12, 'Lena'],[13, 'Ralf'],[14, 'Theo'],[15, 'Zora'],[16, 'Birgit'],[17, 'Sandra'],[18, 'Tom']];~ $var = IniReadSection(@ScriptDir & '\meine.ini', "Titel")
[/autoit] [autoit][/autoit] [autoit];~ If @error Then
[/autoit] [autoit][/autoit] [autoit]
;~ MsgBox(4096, "", "Error occurred, probably no INI file.")
;~ EndIf;Local $aktiv = True
[/autoit] [autoit][/autoit] [autoit]
Dim $arControl[UBound($var)][2], $arProgress[UBound($var)]Dim $Zeilen = 8 ; <- hier die Anzahl der Zeilen eintragen
[/autoit] [autoit][/autoit] [autoit]
Dim $Abstand = 220 ; <- hier den Abstand zwischen den Spalten eintragenFor $i = 0 To UBound($arControl) - 1
[/autoit] [autoit][/autoit] [autoit]
$arControl[$i][0] = GUICtrlCreateCheckbox('', 70 + Int($i / $Zeilen) * $Abstand, 50 + Mod($i, $Zeilen) * 25, 13, 13)
$arControl[$i][1] = GUICtrlCreateLabel($var[$i][1], 90 + Int($i / $Zeilen) * $Abstand, 50 + Mod($i, $Zeilen) * 25)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetOnEvent(-1, "_CheckboxSelect")
$arProgress[$i] = GUICtrlCreateProgress(150 + Int($i / $Zeilen) * $Abstand, 50 + Mod($i, $Zeilen) * 25, 70, 14)
Next
GUISetState(@SW_SHOW)While Sleep(1000)
[/autoit] [autoit][/autoit] [autoit]
WEndFunc _End()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFunc ;==>_EndFunc _SelectAll()
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To UBound($arControl) - 1
GUICtrlSetState($arControl[$i][0], $gui_checked)
Next
EndFunc ;==>_SelectAllFunc _CheckboxSelect()
[/autoit]
Local $ID = @GUI_CtrlId - 1
If BitAND(GUICtrlRead($ID), $gui_checked) Then
GUICtrlSetState($ID, $gui_unchecked)
Else
GUICtrlSetState($ID, $gui_checked)
EndIf
EndFunc ;==>_CheckboxSelect -
Was funktioniert denn nicht?
Kannst Du mal so eine Ini posten? -
Checkboxen lassen sich nicht transparent darstellen. Da muss man etwas tricksen (leere Checkbox und ein Label dahinter). Damit man aber trotzdem auf das Label klicken kann (zum Haken setzen), ist der OnEventMode besser geeignet.
Damit man die Progressbars sieht solltest Du GUISetState erst benutzen nachdem alle GUI-Elemente erstellt wurden. Anderenfalls musst Du sie einzeln nach vorn holen.
Für mehrere Spalten braucht man die Position lediglich errechnen, dann funktioniert es auch in einer Schleife. Hier mal ein Beispiel, wo das beschriebene eingebaut ist:Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]$Gui = GUICreate("Namen", 701, 571, 208, 178)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, "_End")
$Pic1 = GUICtrlCreatePic("C:\Users\Ilse\Desktop\Backbild.jpg", -4, -4, 805, 629)
GUICtrlSetState(-1, $GUI_DISABLE)
$SelectAll = GUICtrlCreateButton("Select all", 568, 424, 75, 25)
GUICtrlSetOnEvent(-1, "_SelectAll")
;$Alle = GUICtrlCreateButton("Alle", 304, 232, 75, 25)Dim $var[8][2] = [[1, 'Petra'], [2, 'Klaus'], [3, 'Lissi'], [4, 'Norbert'], [5, 'Paul'], [6, 'Carla'], [7, 'Fritz'], [8, 'Tanja']]
[/autoit] [autoit][/autoit] [autoit];~ $var = IniReadSection(@ScriptDir & '\meine.ini', "Titel")
[/autoit] [autoit][/autoit] [autoit];~ If @error Then
[/autoit] [autoit][/autoit] [autoit]
;~ MsgBox(4096, "", "Error occurred, probably no INI file.")
;~ EndIf;Local $aktiv = True
[/autoit] [autoit][/autoit] [autoit]
Local $arControl[UBound($var)][2], $arProgress[UBound($var)]For $i = 0 To UBound($arControl) - 1
[/autoit] [autoit][/autoit] [autoit]
$arControl[$i][0] = GUICtrlCreateCheckbox('', 70 + Int($i/4) * 300, 50 + Mod($i, 4) * 25, 13, 13)
$arControl[$i][1] = GUICtrlCreateLabel($var[$i][1], 90 + Int($i/4) * 300, 50 + Mod($i, 4) * 25)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetOnEvent(-1, "_CheckboxSelect")
$arProgress[$i] = GUICtrlCreateProgress(170 + Int($i/4) * 300, 50 + Mod($i, 4) * 25, 70, 14)
Next
GUISetState(@SW_SHOW)While Sleep(1000)
[/autoit] [autoit][/autoit] [autoit]
WEndFunc _End()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFuncFunc _SelectAll()
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To UBound($arControl) - 1
GUICtrlSetState($arControl[$i][0], $gui_checked)
Next
EndFuncFunc _CheckboxSelect()
[/autoit]
Local $ID = @GUI_CtrlId - 1
If BitAND(GUICtrlRead($ID), $gui_checked) Then
GUICtrlSetState($ID, $gui_unchecked)
Else
GUICtrlSetState($ID, $gui_checked)
EndIf
EndFuncP.S.: Verwende für Deinen Quelltext bitte Spoiler.
-
Außerdem erstellst Du zu viele Checkboxen (mehr als in der Inidatei vorhanden). Das führt zu einem Abbruch des Skripts, weil das Array $var gar nicht so viele Einträge besitzt.
Besser ist es, wenn Du beim erstellen UBound verwendest:Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>$Gui = GUICreate("Namen", 701, 571, 208, 178)
[/autoit] [autoit][/autoit] [autoit]
$SelectAll = GUICtrlCreateButton("Select all", 568, 424, 75, 25)
;$Alle = GUICtrlCreateButton("Alle", 304, 232, 75, 25)
GUISetState(@SW_SHOW)Dim $var[4][2] = [[1, 'Petra'], [2, 'Klaus'], [3, 'Lissi'], [4, 'Norbert']]
[/autoit] [autoit][/autoit] [autoit];~ $var = IniReadSection(@ScriptDir & '\meine.ini', "Titel")
[/autoit] [autoit][/autoit] [autoit];~ If @error Then
[/autoit] [autoit][/autoit] [autoit]
;~ MsgBox(4096, "", "Error occurred, probably no INI file.")
;~ EndIf;Local $aktiv = True
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Local $arControl[UBound($var)][2]
#region Ausrichtung Controls
$Startoben = 50
$Startlinks = 70
$progbarLinks = 170
$oben = $Startoben
$ctrlLinks = $Startlinks
#endregion Ausrichtung Controls
For $i = 0 To UBound($arControl) - 1
$oben += "25"
$arControl[$i][0] = GUICtrlCreateCheckbox($var[$i][1], $ctrlLinks, $oben)
$arControl[$i][1] = GUICtrlCreateProgress($progbarLinks, $oben, 70, 20)
NextWhile 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ExitCase $SelectAll
[/autoit]
For $i = 0 To UBound($arControl) - 1
;$Test = Guictrlread($arControl[$i])
GUICtrlSetState($arControl[$i][0], $gui_checked)
;MsgBox(0,$i,$arControl[$i])
Next
EndSwitch
WEnd -
Versuch's mal damit:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <Array.au3>
#include <WinAPI.au3>
$aRes = _GetDesktopResolution()
_ArrayDisplay($aRes)Func _GetDesktopResolution()
[/autoit]
Local $aRes[4], $hWindow, $stRET
$hWindow = _WinAPI_GetDesktopWindow()
$stRET = _WinAPI_GetWindowPlacement($hWindow)
If Not @error Then
$aRes[0] = DllStructGetData($stRET, 'rcNormalPosition', 1) ; left
$aRes[1] = DllStructGetData($stRET, 'rcNormalPosition', 2) ; top
$aRes[2] = DllStructGetData($stRET, 'rcNormalPosition', 3) ; right
$aRes[3] = DllStructGetData($stRET, 'rcNormalPosition', 4) ; bottom
$stRET = 0
Return $aRes
Else
Return SetError(1, 0, 0)
EndIf
EndFunc ;==>_GetDesktopResolution