Da will ich mich, bevor der Tag zur Neige geht, noch schnell der Gratulantenschar anschließen ![]()
Also: Happy Birthday!
Beiträge von BugFix
-
-
Hi,
habe ein kleines Problem. Ich habe im Taskplaner einen Job erstellt für tägliches Backup. Jedoch startet der Job nicht. Im Job steht nur: Task konnte nicht gestartet werden.
Laut Diensteübersicht ist der Taskplanerdienst aktiv. Warum also wird der Task nicht ausgeführt?
Ich habe mir erst mal so beholfen, dass ich per AutoIt-Skript das Backup starte. Prinzipiell kann das auch so bleiben, ich könnte das Skript ja auch als Dienst laufen lassen.
Aber mich interessiert schon, weshalb der Task nicht ausgeführt wird.
Irgendwer 'ne Idee? -
Hallo Pee,
auch von mir die Herzlichsten Glückwünsche.
Auf dass all Deine Wünsche in Erfüllung gehen mögen (naja, zumindest die nicht zu großen
).
Feiere schön. -
Da bin ich ja baff

Dann können wir ja gleich alle Namespaces über den Haufen werfen
Aber ich kann Oscar zustimmen, in älteren Versionen war es nicht möglich.
Ich bin mir jetzt nur nicht sicher, ob mich dass freuen oder ärgern soll.
-
am Anfang alles LOCAL deklariere gelten die Variablen dann ja in allen Funktionen etc.
Das ist ein Irrtum. Lokale Variablen des Mainprogrammes sind nur von diesem lesbar. Sollen auch im Skript erstellte Funktionen auf die Variablen zugreifen, müssen sie mit Dim oder Global deklariert werden. Da Dim eine nicht eindeutige Position einnimmt, verwende ich lieber Global mit eindeutigen Variablennamen, die mit großer Wahrscheinlichkeit von anderen laufenden Programmen nicht genutzt werden. -
wie gesagt wollte es nur etwas verschönern^^
Das ist auch ehrenwert. Doch es ist nicht so glücklich, Code zu posten, von dem man weiß, dass er verbugt ist. -
Guckst du:
Spoiler anzeigen
[autoit]#include <WindowsConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
Local $INI = @ScriptDir & "\Patienten.ini"; nur zum Testen:
[/autoit] [autoit][/autoit] [autoit]
If Not FileExists($INI) Then
IniWrite($INI, "Patienten", 10000, "Peter|Lustig|11.11.1956|12345 Grüner-Wald|Bauwagen 1")
IniWrite($INI, "Patienten", 10001, "Marion|Rosenbaum|08.12.1987|33445 Irgendwo|Am Feld 35")
IniWrite($INI, "Patienten", 10002, "Max|Mustermann|12.12.1978|44556 Musterdorf|Mustergasse 17")
IniWrite($INI, "Numbers", "last", 10002)
EndIf
; Ende Test-INIGlobal $aPatienten = IniReadSection($INI, "Patienten")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Local $lastNum = IniRead($INI, "Numbers", "last", 9999)#Region ### START Koda GUI section ### Form=
[/autoit] [autoit][/autoit] [autoit]
$Form1 = GUICreate("Form1", 1017, 736,0,0)
$PageControl1 = GUICtrlCreateTab(8, 56, 1007, 707)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
$TabSheet1 = GUICtrlCreateTabItem("Patienten")
$Listview1 = GUICtrlCreateListView("Nr |Vorname|Nachname|Geburtsdatum|PLZ / Wohnort| Straße", 24, 152, 969, 552)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
; ### hier Kontextmenü für ListView einfügen:
$mnu = GUICtrlCreateContextMenu($Listview1)
$mnu_del = GUICtrlCreateMenuItem('Patient Löschen', $mnu)
; ### Ende Kontextmenü
$TabSheet2 = GUICtrlCreateTabItem("Neuer Patient")
$Label1 = GUICtrlCreateLabel("Vorname:", 28, 105, 73, 24)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Label2 = GUICtrlCreateLabel("Nachname:", 28, 137, 85, 24)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Input1 = GUICtrlCreateInput("", 110, 105, 161, 22)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Input2 = GUICtrlCreateInput("", 110, 137, 161, 22)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Label3 = GUICtrlCreateLabel("Geburtsdatum:", 28, 169, 111, 24)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Input3 = GUICtrlCreateInput("DD.MM.YYYY", 110, 169, 161, 22)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Label4 = GUICtrlCreateLabel("PLZ / Wohnort:", 28, 201, 106, 24)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Input4 = GUICtrlCreateInput("", 110, 201, 161, 22)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Label5 = GUICtrlCreateLabel("Straße:", 28, 233, 57, 24)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Input5 = GUICtrlCreateInput("", 110, 233, 161, 22)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Button1 = GUICtrlCreateButton("Neuen Patienten speichern", 110, 272, 161, 30, 0)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$TabSheet3 = GUICtrlCreateTabItem("Termine")
GUICtrlCreateTabItem("")
#EndRegion ### START Koda GUI section ### Form=#Region ### START Koda GUI section ### Form=
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$Form2 = GUICreate("Form2", 1018, 737,0,0)
$Edit1 = GUICtrlCreateEdit("", 16, 80, 985, 569)
$Label6 = GUICtrlCreateLabel("Nr.:", 16, 32, 21, 17)
$Label7 = GUICtrlCreateLabel("Vorname:", 88, 32, 49, 17)
$Label8 = GUICtrlCreateLabel("Nachname:", 272, 32, 59, 17)
$Label9 = GUICtrlCreateLabel("Geburtsdatum:", 464, 32, 73, 17)
$Label10 = GUICtrlCreateLabel("PLZ / Wohnort:", 616, 32, 79, 17)
$Label11 = GUICtrlCreateLabel("Straße:", 840, 32, 38, 17)
$Input6 = GUICtrlCreateInput("", 40, 32, 41, 21)
$Input7 = GUICtrlCreateInput("", 144, 32, 121, 21)
$Input8 = GUICtrlCreateInput("", 336, 32, 121, 21)
$Input9 = GUICtrlCreateInput("", 544, 32, 65, 21)
$Input10 = GUICtrlCreateInput("", 696, 32, 137, 21)
$Input11 = GUICtrlCreateInput("", 880, 32, 121, 21)
$Button2 = GUICtrlCreateButton("Neuer Eintrag", 16, 664, 121, 57, 0)
$Button3 = GUICtrlCreateButton("Daten speichern", 144, 664, 121, 57, 0)
GUISetState(@SW_HIDE)
#EndRegion ### END Koda GUI section ###_FillListView()
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW, $Form1)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg(1)
Switch $nMsg[1] ; Window-Handle
Case $Form1
Switch $nMsg[0] ; Event
Case $GUI_EVENT_CLOSE
Exit
Case $PageControl1
If GUICtrlRead($PageControl1) = 0 ThenElseIf GUICtrlRead($PageControl1) = 1 Then
[/autoit] [autoit][/autoit] [autoit]ElseIf GUICtrlRead($PageControl1) = 2 Then
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]
Case $Button1
$lastNum += 1
$Vorname = GUICtrlRead($Input1)
$Nachname = GUICtrlRead($Input2)
$Geburtsdatum = GUICtrlRead($Input3)
$PLZWohnort = GUICtrlRead($Input4)
$Strasse = GUICtrlRead($Input5)
IniWrite($INI, "Numbers", "last", $lastNum)
IniWrite($INI, "Patienten", $lastNum, $Vorname & '|' & $Nachname & '|' & $Geburtsdatum & '|' & $PLZWohnort & '|' & $Strasse)
GUICtrlSetData($Input1, "")
GUICtrlSetData($Input2, "")
GUICtrlSetData($Input3, "DD.MM.YYYY")
GUICtrlSetData($Input4, "")
GUICtrlSetData($Input5, "")
; Array mit Patienten-Daten neu einlesen
$aPatienten = IniReadSection($INI, "Patienten")
_FillListView()
Case $mnu_del
; Eintrag aus INI löschen:
$index = _GUICtrlListView_GetSelectedIndices($Listview1)
$del_Key = _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listview1), $index, 0)
IniDelete($INI, "Patienten", $del_key)
; Array mit Patienten-Daten neu einlesen
$aPatienten = IniReadSection($INI, "Patienten")
; entfernt Eintrag aus Liste:
_GUICtrlListView_DeleteItemsSelected($Listview1)
EndSwitch
Case $Form2
Switch $nMsg[0] ; Event
Case $GUI_EVENT_CLOSE
GUISetState(@SW_HIDE, $Form2)
;~ Case ....
EndSwitch
EndSwitch
WEndFunc _FillListView()
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlListView_DeleteAllItems($Listview1)
If $lastNum = 9999 Then Return
For $i = 1 To UBound($aPatienten) -1
GUICtrlCreateListViewItem($aPatienten[$i][0] & '|' & $aPatienten[$i][1], $Listview1)
Next
EndFuncFunc _LeftDblClick($Info) ; Inhalt der angeklickten Zeile (alle Spalten) wird in GUI gezeigt
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetData($Input6 , _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listview1), $Info[3], 0))
GUICtrlSetData($Input7 , _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listview1), $Info[3], 1))
GUICtrlSetData($Input8 , _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listview1), $Info[3], 2))
GUICtrlSetData($Input9 , _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listview1), $Info[3], 3))
GUICtrlSetData($Input10 , _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listview1), $Info[3], 4))
GUICtrlSetData($Input11 , _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listview1), $Info[3], 5))
GUISetState(@SW_SHOW, $Form2)
EndFuncFunc WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit] [autoit][/autoit] [autoit]
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $ListView1
If Not IsHWnd($ListView1) Then $hWndListView = GUICtrlGetHandle($ListView1)$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
[/autoit]
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $aInfo[12] = [$hWndFrom, _
$iIDFrom, _
$iCode, _
DllStructGetData($tInfo, "Index"), _
DllStructGetData($tInfo, "SubItem"), _
DllStructGetData($tInfo, "NewState"), _
DllStructGetData($tInfo, "OldState"), _
DllStructGetData($tInfo, "Changed"), _
DllStructGetData($tInfo, "ActionX"), _
DllStructGetData($tInfo, "ActionY"), _
DllStructGetData($tInfo, "lParam"), _
DllStructGetData($tInfo, "KeyFlags")]
_LeftDblClick($aInfo)
Case $NM_RCLICK ; Sent by a list-view control when the user clicks an item with the right mouse button
Return $GUI_RUNDEFMSG ; allow the default processing
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY -
Darf ich einige Functionen aus deinem Script in mein Script übernehmen ?
Darfst du gerne nutzen.
Mit den dynamischen Menüeinträgen habe ich auch eine Weile probiert, bis ich eine funktionelle Lösung hatte. -
Mit "Handle" verhält es sich, wie mit dem Wort "Computer". Es sind Wörter, die keine direkte deutsche Entsprechung haben und in der englischen Form eingedeutscht wurden.
Man kann es sicher mit verschiedenen anderen Worten umschreiben, aber den Kern der Sache wird man damit nicht treffen - ergo bleiben wir beim Original. Somit stellt sich die Frage der grammatikalischen Behandlung nur noch für die Präpositionen, und das ist m.E. eindeutig:
to = zu / from = von. -
Wenn im Listview nur eine Spalte ist, habe ich Items - OK. Bei mehreren Spalten gibt es DAS Item aber nicht mehr (genau wie ein 2D-Array dann nicht DAS Element[Index] hat), sondern NUR noch SubItem und das bei Index 0 beginnend. Denn der Begriff SubItem implementiert ja eindeutig eine Unterordnung zu Item - demzufolge müßte Item die SubItems enthalten, was ja nicht der Fall ist, da alle gleichberechtigt nebeneinander existieren. Aber ich glaube, das ist eine Grundsatzfrage.

-
Hi,
im EN-Forum war heute eine Fragestellung zur Ermittlung des Radikals eines Integerwertes (Das Radikal einer ganzen Zahl ist das Produkt ihrer unterschiedlichen Primfaktoren). Ich habe dafür eine Autoit-Lösung erstellt (Quelle s.u.), die ich auch hier posten möchte.
Da es auf Primfaktorzerlegung basiert, habe ich auch die Funktion dazu beigefügt.Spoiler anzeigen
[autoit]ConsoleWrite( _GetPrimeFactors(504) & @CRLF)
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite( _Rad(504) & @CRLF)Func _GetPrimeFactors($n)
[/autoit] [autoit][/autoit] [autoit]
Local $F = ObjCreate("System.Collections.ArrayList")
While Mod($n,2) == 0
$F.add(2)
$n = $n/2
WEnd
While Mod($n,3) == 0
$F.add(3)
$n = $n/3
WEnd
Local $t = 5
Local $diff = 2
While $t*$t <= $n
While Mod($n,$t) == 0
$F.add($t)
$n = $n/$t
WEnd
$t = $t + $diff
$diff = 6 - $diff
WEnd
If $n > 1 Then $F.add($n)
Local $out = ''
For $element In $F
$out &= $element & ','
Next
Return StringTrimRight($out, 1)
EndFuncFunc _Radical($n)
[/autoit]
Local $F = ObjCreate("System.Collections.ArrayList")
While Mod($n,2) == 0
If Not $F.Contains(2) Then $F.add(2)
$n = $n/2
WEnd
While Mod($n,3) == 0
If Not $F.Contains(3) Then $F.add(3)
$n = $n/3
WEnd
Local $t = 5
Local $diff = 2
While $t*$t <= $n
While Mod($n,$t) == 0
If Not $F.Contains($t) Then $F.add($t)
$n = $n/$t
WEnd
$t += $diff
$diff = 6 - $diff
WEnd
If $n > 1 And Not $F.Contains($n) Then $F.add($n)
Local $out = 1
For $element In $F
$out *= $element
Next
Return $out
EndFuncEdit:
Wen es interessiert, hier mal der Algorithmus zur Primfaktorzerlegung:Für eine Primzahl $p sind 2 Fälle möglich:
1.Fall: 3 ist Element von $p+1 oder
2.Fall: 3 ist nicht Element von p+1.
Für den 1.Fall könnte $p+2 eine Primzahl sein, da sie ungerade und nicht durch 3 teilbar ist. $p+4 = $p+1 +3 ist aber wieder durch 3 teilbar, sodass die nächste Primzahl $p+6 wäre.
In Fall 2 muss $p+2 durch 3 teilbar sein, weil $p und $p+1 es nicht waren. Also ist $p+4 zu untersuchen. $p+5 ist aber wieder durch 3 teilbar, sodass $p+6 es nicht ist. $p+6 kommt als Primzahl-Kandidat in Frage.
Im ersten Fall sollte man also $p+2 und dann $p+6, im zweiten Fall $p+4 und dann $p+6 untersuchen. Die Primzahlkandidaten haben also abwechselnd eine Differenz von 2 und 4.
(Quelle: Klaus Merkert, Hohenstaufen-Gymnasium Kaiserslautern, http://www.hsg-kl.de) -
2 Schleifen nebeneinander geht nicht. Du kannst z.B. mit AdlibEnable() arbeiten oder innerhalb einer Schleife mit TimerInit/Timerdiff die Zeiten abfragen und entsprechend Aktion A oder B ausführen. Sleep dann nicht verwenden, das pausiert dein Skript.
-
Warum so kompliziert?
[autoit]
$data_raum = IniReadSectionNames($config)
[/autoit]
For $i = 1 To $data_raum[0]
If $data_raum[$i] = 'global' Then ContinueLoop
GUICtrlSetData($cmb_raum, $data_raum[$i], "")
Next -
Wenn du alle Einträge der jeweiligen Zeile ausgeben möchtest, verwende statt einem Label z.B. ein Edit in der Anzeige-GUI.
Ich habe das mal angepaßt (auch die Änderung mit Return $GUI_RUNDEFMSG)Spoiler anzeigen
[autoit]#include <WindowsConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
Local $INI = @ScriptDir & "\Patienten.ini"; nur zum Testen:
[/autoit] [autoit][/autoit] [autoit]
If Not FileExists($INI) Then
IniWrite($INI, "Patienten", 10000, "Peter|Lustig|11.11.1956|12345 Grüner-Wald|Bauwagen 1")
IniWrite($INI, "Patienten", 10001, "Marion|Rosenbaum|08.12.1987|33445 Irgendwo|Am Feld 35")
IniWrite($INI, "Patienten", 10002, "Max|Mustermann|12.12.1978|44556 Musterdorf|Mustergasse 17")
IniWrite($INI, "Numbers", "last", 10002)
EndIf
; Ende Test-INIGlobal $aPatienten = IniReadSection($INI, "Patienten")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Local $lastNum = IniRead($INI, "Numbers", "last", 9999)#Region ### START Koda GUI section ### Form=
[/autoit] [autoit][/autoit] [autoit]
$Form1 = GUICreate("Form1", 1017, 736, 267, 139)
$PageControl1 = GUICtrlCreateTab(8, 56, 1007, 707)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
$TabSheet1 = GUICtrlCreateTabItem("Patienten")
$Listview1 = GUICtrlCreateListView("Nr|Vorname|Nachname|Geburtsdatum|PLZ / Wohnort| Straße", 24, 152, 969, 552)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
; ### hier Kontextmenü für ListView einfügen:
$mnu = GUICtrlCreateContextMenu($Listview1)
$mnu_del = GUICtrlCreateMenuItem('Patient Löschen', $mnu)
; ### Ende Kontextmenü
$TabSheet2 = GUICtrlCreateTabItem("Neuer Patient")
$Label1 = GUICtrlCreateLabel("Vorname:", 28, 105, 73, 24)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Label2 = GUICtrlCreateLabel("Nachname:", 28, 137, 85, 24)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Input1 = GUICtrlCreateInput("", 110, 105, 161, 22)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Input2 = GUICtrlCreateInput("", 110, 137, 161, 22)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Label3 = GUICtrlCreateLabel("Geburtsdatum:", 28, 169, 111, 24)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Input3 = GUICtrlCreateInput("DD.MM.YYYY", 110, 169, 161, 22)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Label4 = GUICtrlCreateLabel("PLZ / Wohnort:", 28, 201, 106, 24)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Input4 = GUICtrlCreateInput("", 110, 201, 161, 22)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Label5 = GUICtrlCreateLabel("Straße:", 28, 233, 57, 24)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Input5 = GUICtrlCreateInput("", 110, 233, 161, 22)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Button1 = GUICtrlCreateButton("Neuen Patienten speichern", 110, 272, 161, 30, 0)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$TabSheet3 = GUICtrlCreateTabItem("Termine")
GUICtrlCreateTabItem("")
#EndRegion ### START Koda GUI section ### Form=$Form2 = GUICreate('Form2')
[/autoit] [autoit][/autoit] [autoit]
$edit_Patient = GUICtrlCreateEdit('', 20, 20, 250, 200)_FillListView()
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW, $Form1)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg(1)
Switch $nMsg[1] ; Window-Handle
Case $Form1
Switch $nMsg[0] ; Event
Case $GUI_EVENT_CLOSE
Exit
Case $PageControl1
If GUICtrlRead($PageControl1) = 0 ThenElseIf GUICtrlRead($PageControl1) = 1 Then
[/autoit] [autoit][/autoit] [autoit]ElseIf GUICtrlRead($PageControl1) = 2 Then
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]
Case $Button1
$lastNum += 1
$Vorname = GUICtrlRead($Input1)
$Nachname = GUICtrlRead($Input2)
$Geburtsdatum = GUICtrlRead($Input3)
$PLZWohnort = GUICtrlRead($Input4)
$Strasse = GUICtrlRead($Input5)
IniWrite($INI, "Numbers", "last", $lastNum)
IniWrite($INI, "Patienten", $lastNum, $Vorname & '|' & $Nachname & '|' & $Geburtsdatum & '|' & $PLZWohnort & '|' & $Strasse)
GUICtrlSetData($Input1, "")
GUICtrlSetData($Input2, "")
GUICtrlSetData($Input3, "DD.MM.YYYY")
GUICtrlSetData($Input4, "")
GUICtrlSetData($Input5, "")
; Array mit Patienten-Daten neu einlesen
$aPatienten = IniReadSection($INI, "Patienten")
_FillListView()
Case $mnu_del
; Eintrag aus INI löschen:
$index = _GUICtrlListView_GetSelectedIndices($Listview1)
$del_Key = _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listview1), $index, 0)
IniDelete($INI, "Patienten", $del_key)
; Array mit Patienten-Daten neu einlesen
$aPatienten = IniReadSection($INI, "Patienten")
; entfernt Eintrag aus Liste:
_GUICtrlListView_DeleteItemsSelected($Listview1)
EndSwitch
Case $Form2
Switch $nMsg[0] ; Event
Case $GUI_EVENT_CLOSE
GUISetState(@SW_HIDE, $Form2)
;~ Case ....
EndSwitch
EndSwitch
WEndFunc _FillListView()
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlListView_DeleteAllItems($Listview1)
If $lastNum = 9999 Then Return
For $i = 1 To UBound($aPatienten) -1
GUICtrlCreateListViewItem($aPatienten[$i][0] & '|' & $aPatienten[$i][1], $Listview1)
Next
EndFuncFunc _LeftDblClick($Info) ; Inhalt der angeklickten Zeile (alle Spalten) wird in GUI gezeigt
[/autoit] [autoit][/autoit] [autoit]
Local $indx_Item = $Info[3], $sShow = ''
For $i = 0 To 4
$sShow &= _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listview1), $indx_Item, $i) & @CRLF
Next
GUICtrlSetData($edit_Patient, $sShow)
GUISetState(@SW_SHOW, $Form2)
EndFuncFunc WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit] [autoit][/autoit] [autoit]
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $ListView1
If Not IsHWnd($ListView1) Then $hWndListView = GUICtrlGetHandle($ListView1)$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
[/autoit]
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $LVN_COLUMNCLICK ; A column was clicked
Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
Local $aInfo[11] = [$hWndFrom, _
$iIDFrom, _
$iCode, _
DllStructGetData($tInfo, "Index"), _
DllStructGetData($tInfo, "SubItem"), _
DllStructGetData($tInfo, "NewState"), _
DllStructGetData($tInfo, "OldState"), _
DllStructGetData($tInfo, "Changed"), _
DllStructGetData($tInfo, "ActionX"), _
DllStructGetData($tInfo, "ActionY"), _
DllStructGetData($tInfo, "Param")]
;~ _ColumnClick($aInfo)
Case $LVN_DELETEITEM ; An item is about to be deleted
Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
Local $aInfo[11] = [$hWndFrom, _
$iIDFrom, _
$iCode, _
DllStructGetData($tInfo, "Index"), _
DllStructGetData($tInfo, "SubItem"), _
DllStructGetData($tInfo, "NewState"), _
DllStructGetData($tInfo, "OldState"), _
DllStructGetData($tInfo, "Changed"), _
DllStructGetData($tInfo, "ActionX"), _
DllStructGetData($tInfo, "ActionY"), _
DllStructGetData($tInfo, "Param")]
;~ _ItemDeleted($aInfo)
Case $LVN_HOTTRACK ; Sent by a list-view control when the user moves the mouse over an item
Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
Local $aInfo[11] = [$hWndFrom, _
$iIDFrom, _
$iCode, _
DllStructGetData($tInfo, "Index"), _
DllStructGetData($tInfo, "SubItem"), _
DllStructGetData($tInfo, "NewState"), _
DllStructGetData($tInfo, "OldState"), _
DllStructGetData($tInfo, "Changed"), _
DllStructGetData($tInfo, "ActionX"), _
DllStructGetData($tInfo, "ActionY"), _
DllStructGetData($tInfo, "Param")]
Return 0 ; allow the list view to perform its normal track select processing.
;Return 1 ; the item will not be selected.
;~ _HottTrackItem($aInfo)
Case $LVN_KEYDOWN ; A key has been pressed
Local $tInfo = DllStructCreate($tagNMLVKEYDOWN, $ilParam)
Local $aInfo[5] = [$hWndFrom, _
$iIDFrom, _
$iCode, _
DllStructGetData($tInfo, "VKey"), _
DllStructGetData($tInfo, "KeyFlags")]
;~ _KeyDown($aInfo)
Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $aInfo[12] = [$hWndFrom, _
$iIDFrom, _
$iCode, _
DllStructGetData($tInfo, "Index"), _
DllStructGetData($tInfo, "SubItem"), _
DllStructGetData($tInfo, "NewState"), _
DllStructGetData($tInfo, "OldState"), _
DllStructGetData($tInfo, "Changed"), _
DllStructGetData($tInfo, "ActionX"), _
DllStructGetData($tInfo, "ActionY"), _
DllStructGetData($tInfo, "lParam"), _
DllStructGetData($tInfo, "KeyFlags")]
;~ _LeftClick($aInfo)
Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $aInfo[12] = [$hWndFrom, _
$iIDFrom, _
$iCode, _
DllStructGetData($tInfo, "Index"), _
DllStructGetData($tInfo, "SubItem"), _
DllStructGetData($tInfo, "NewState"), _
DllStructGetData($tInfo, "OldState"), _
DllStructGetData($tInfo, "Changed"), _
DllStructGetData($tInfo, "ActionX"), _
DllStructGetData($tInfo, "ActionY"), _
DllStructGetData($tInfo, "lParam"), _
DllStructGetData($tInfo, "KeyFlags")]
_LeftDblClick($aInfo)
Case $NM_KILLFOCUS ; The control has lost the input focus
Local $aInfo[3] = [$hWndFrom, _
$iIDFrom, _
$iCode]
;~ _LostFocus($aInfo)
Case $NM_RCLICK ; Sent by a list-view control when the user clicks an item with the right mouse button
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $aInfo[12] = [$hWndFrom, _
$iIDFrom, _
$iCode, _
DllStructGetData($tInfo, "Index"), _
DllStructGetData($tInfo, "SubItem"), _
DllStructGetData($tInfo, "NewState"), _
DllStructGetData($tInfo, "OldState"), _
DllStructGetData($tInfo, "Changed"), _
DllStructGetData($tInfo, "ActionX"), _
DllStructGetData($tInfo, "ActionY"), _
DllStructGetData($tInfo, "lParam"), _
DllStructGetData($tInfo, "KeyFlags")]
; Return 1 ; not to allow the default processing
Return $GUI_RUNDEFMSG ; allow the default processing
;~ _RightClick($aInfo)
Case $NM_RDBLCLK ; Sent by a list-view control when the user double-clicks an item with the right mouse button
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $aInfo[12] = [$hWndFrom, _
$iIDFrom, _
$iCode, _
DllStructGetData($tInfo, "Index"), _
DllStructGetData($tInfo, "SubItem"), _
DllStructGetData($tInfo, "NewState"), _
DllStructGetData($tInfo, "OldState"), _
DllStructGetData($tInfo, "Changed"), _
DllStructGetData($tInfo, "ActionX"), _
DllStructGetData($tInfo, "ActionY"), _
DllStructGetData($tInfo, "lParam"), _
DllStructGetData($tInfo, "KeyFlags")]
;~ _RightDblClick($aInfo)
Case $NM_RETURN ; The control has the input focus and that the user has pressed the ENTER key
Local $aInfo[3] = [$hWndFrom, _
$iIDFrom, _
$iCode]
;~ _InputFocusReturn($aInfo)
Case $NM_SETFOCUS ; The control has received the input focus
Local $aInfo[3] = [$hWndFrom, _
$iIDFrom, _
$iCode]
;~ _SetFocus($aInfo)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY -
Hi,
Auszug aus der Hilfe zu _GUICtrlListView_GetItemText()ZitatRetrieves the text of an item or subitem
Parameters
$hWnd Handle to the control
$iIndex Zero based index of the item
$iSubItem One based sub item indexRemarks
To retrieve the item text, set iSubItem to zero. To retrieve the text of a subitem, set iSubItem to the one based subitem's index.Das ist schlicht und einfach quatsch
Selbstverständlich ist auch der Sub-Index Null-basiert!Zumindest sehe ich das so. Denn es macht meiner Meinung nach wenig Sinn, den ersten Eintrag als "Item" zu behandeln und die weiteren in derselben Zeile als "SubItems". Also für mich ist das eine Array-ähnliche Konstruktion und ich verwende auch nur die SubItemabfrage Nullbasiert.
Oder wie seht ihr das?
-
Ich hab dir das mal eingebaut. Kannst du nach deinen Wünschen ausbauen.
Ich habe alle Ereignisse, die du mit WM_NOTIFY auswerten kannst, mal in der Funktion belassen. Kannst du natürlich entfernen, was du nicht brauchst.Spoiler anzeigen
[autoit]#include <WindowsConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
Local $INI = @ScriptDir & "\Patienten.ini"; nur zum Testen:
[/autoit] [autoit][/autoit] [autoit]
If Not FileExists($INI) Then
IniWrite($INI, "Patienten", 10000, "Peter|Lustig|11.11.1956|12345 Grüner-Wald|Bauwagen 1")
IniWrite($INI, "Patienten", 10001, "Marion|Rosenbaum|08.12.1987|33445 Irgendwo|Am Feld 35")
IniWrite($INI, "Patienten", 10002, "Max|Mustermann|12.12.1978|44556 Musterdorf|Mustergasse 17")
IniWrite($INI, "Numbers", "last", 10002)
EndIf
; Ende Test-INIGlobal $aPatienten = IniReadSection($INI, "Patienten")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Local $lastNum = IniRead($INI, "Numbers", "last", 9999)#Region ### START Koda GUI section ### Form=
[/autoit] [autoit][/autoit] [autoit]
$Form1 = GUICreate("Form1", 1017, 736, 267, 139)
$PageControl1 = GUICtrlCreateTab(8, 56, 1007, 707)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
$TabSheet1 = GUICtrlCreateTabItem("Patienten")
$Listview1 = GUICtrlCreateListView("Nr|Vorname|Nachname|Geburtsdatum|PLZ / Wohnort| Straße", 24, 152, 969, 552)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
; ### hier Kontextmenü für ListView einfügen:
$mnu = GUICtrlCreateContextMenu($Listview1)
$mnu_del = GUICtrlCreateMenuItem('Patient Löschen', $mnu)
; ### Ende Kontextmenü
$TabSheet2 = GUICtrlCreateTabItem("Neuer Patient")
$Label1 = GUICtrlCreateLabel("Vorname:", 28, 105, 73, 24)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Label2 = GUICtrlCreateLabel("Nachname:", 28, 137, 85, 24)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Input1 = GUICtrlCreateInput("", 110, 105, 161, 22)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Input2 = GUICtrlCreateInput("", 110, 137, 161, 22)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Label3 = GUICtrlCreateLabel("Geburtsdatum:", 28, 169, 111, 24)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Input3 = GUICtrlCreateInput("DD.MM.YYYY", 110, 169, 161, 22)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Label4 = GUICtrlCreateLabel("PLZ / Wohnort:", 28, 201, 106, 24)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Input4 = GUICtrlCreateInput("", 110, 201, 161, 22)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Label5 = GUICtrlCreateLabel("Straße:", 28, 233, 57, 24)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Input5 = GUICtrlCreateInput("", 110, 233, 161, 22)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Button1 = GUICtrlCreateButton("Neuen Patienten speichern", 110, 272, 161, 30, 0)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$TabSheet3 = GUICtrlCreateTabItem("Termine")
GUICtrlCreateTabItem("")
#EndRegion ### START Koda GUI section ### Form=$Form2 = GUICreate('Form2')
[/autoit] [autoit][/autoit] [autoit]
$lb_Patient = GUICtrlCreateLabel('', 20, 20, 250, 17)_FillListView()
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW, $Form1)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg(1)
Switch $nMsg[1] ; Window-Handle
Case $Form1
Switch $nMsg[0] ; Event
Case $GUI_EVENT_CLOSE
Exit
Case $PageControl1
If GUICtrlRead($PageControl1) = 0 ThenElseIf GUICtrlRead($PageControl1) = 1 Then
[/autoit] [autoit][/autoit] [autoit]ElseIf GUICtrlRead($PageControl1) = 2 Then
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]
Case $Button1
$lastNum += 1
$Vorname = GUICtrlRead($Input1)
$Nachname = GUICtrlRead($Input2)
$Geburtsdatum = GUICtrlRead($Input3)
$PLZWohnort = GUICtrlRead($Input4)
$Strasse = GUICtrlRead($Input5)
IniWrite($INI, "Numbers", "last", $lastNum)
IniWrite($INI, "Patienten", $lastNum, $Vorname & '|' & $Nachname & '|' & $Geburtsdatum & '|' & $PLZWohnort & '|' & $Strasse)
GUICtrlSetData($Input1, "")
GUICtrlSetData($Input2, "")
GUICtrlSetData($Input3, "DD.MM.YYYY")
GUICtrlSetData($Input4, "")
GUICtrlSetData($Input5, "")
; Array mit Patienten-Daten neu einlesen
$aPatienten = IniReadSection($INI, "Patienten")
_FillListView()
Case $mnu_del
; Eintrag aus INI löschen:
$index = _GUICtrlListView_GetSelectedIndices($Listview1)
$del_Key = _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listview1), $index, 0)
IniDelete($INI, "Patienten", $del_key)
; Array mit Patienten-Daten neu einlesen
$aPatienten = IniReadSection($INI, "Patienten")
; entfernt Eintrag aus Liste:
_GUICtrlListView_DeleteItemsSelected($Listview1)
EndSwitch
Case $Form2
Switch $nMsg[0] ; Event
Case $GUI_EVENT_CLOSE
GUISetState(@SW_HIDE, $Form2)
;~ Case ....
EndSwitch
EndSwitch
WEndFunc _FillListView()
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlListView_DeleteAllItems($Listview1)
If $lastNum = 9999 Then Return
For $i = 1 To UBound($aPatienten) -1
GUICtrlCreateListViewItem($aPatienten[$i][0] & '|' & $aPatienten[$i][1], $Listview1)
Next
EndFuncFunc _LeftDblClick($Info) ; Inhalt der angeklickten Spalte wird in GUI gezeigt
[/autoit] [autoit][/autoit] [autoit]
Local $indx_Item = $Info[3], $indx_Sub = $Info[4]
GUICtrlSetData($lb_Patient, _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listview1), $indx_Item, $indx_Sub))
GUISetState(@SW_SHOW, $Form2)
EndFuncFunc WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit] [autoit][/autoit] [autoit]
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $ListView1
If Not IsHWnd($ListView1) Then $hWndListView = GUICtrlGetHandle($ListView1)$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
[/autoit] [autoit][/autoit] [autoit][/autoit]
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $LVN_COLUMNCLICK ; A column was clicked
Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
Local $aInfo[11] = [$hWndFrom, _
$iIDFrom, _
$iCode, _
DllStructGetData($tInfo, "Index"), _
DllStructGetData($tInfo, "SubItem"), _
DllStructGetData($tInfo, "NewState"), _
DllStructGetData($tInfo, "OldState"), _
DllStructGetData($tInfo, "Changed"), _
DllStructGetData($tInfo, "ActionX"), _
DllStructGetData($tInfo, "ActionY"), _
DllStructGetData($tInfo, "Param")]
;~ _ColumnClick($aInfo)
Case $LVN_DELETEITEM ; An item is about to be deleted
Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
Local $aInfo[11] = [$hWndFrom, _
$iIDFrom, _
$iCode, _
DllStructGetData($tInfo, "Index"), _
DllStructGetData($tInfo, "SubItem"), _
DllStructGetData($tInfo, "NewState"), _
DllStructGetData($tInfo, "OldState"), _
DllStructGetData($tInfo, "Changed"), _
DllStructGetData($tInfo, "ActionX"), _
DllStructGetData($tInfo, "ActionY"), _
DllStructGetData($tInfo, "Param")]
;~ _ItemDeleted($aInfo)
Case $LVN_HOTTRACK ; Sent by a list-view control when the user moves the mouse over an item
Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
Local $aInfo[11] = [$hWndFrom, _
$iIDFrom, _
$iCode, _
DllStructGetData($tInfo, "Index"), _
DllStructGetData($tInfo, "SubItem"), _
DllStructGetData($tInfo, "NewState"), _
DllStructGetData($tInfo, "OldState"), _
DllStructGetData($tInfo, "Changed"), _
DllStructGetData($tInfo, "ActionX"), _
DllStructGetData($tInfo, "ActionY"), _
DllStructGetData($tInfo, "Param")]
Return 0 ; allow the list view to perform its normal track select processing.
;Return 1 ; the item will not be selected.
;~ _HottTrackItem($aInfo)
Case $LVN_KEYDOWN ; A key has been pressed
Local $tInfo = DllStructCreate($tagNMLVKEYDOWN, $ilParam)
Local $aInfo[5] = [$hWndFrom, _
$iIDFrom, _
$iCode, _
DllStructGetData($tInfo, "VKey"), _
DllStructGetData($tInfo, "KeyFlags")]
;~ _KeyDown($aInfo)
Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $aInfo[12] = [$hWndFrom, _
$iIDFrom, _
$iCode, _
DllStructGetData($tInfo, "Index"), _
DllStructGetData($tInfo, "SubItem"), _
DllStructGetData($tInfo, "NewState"), _
DllStructGetData($tInfo, "OldState"), _
DllStructGetData($tInfo, "Changed"), _
DllStructGetData($tInfo, "ActionX"), _
DllStructGetData($tInfo, "ActionY"), _
DllStructGetData($tInfo, "lParam"), _
DllStructGetData($tInfo, "KeyFlags")]
;~ _LeftClick($aInfo)
Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $aInfo[12] = [$hWndFrom, _
$iIDFrom, _
$iCode, _
DllStructGetData($tInfo, "Index"), _
DllStructGetData($tInfo, "SubItem"), _
DllStructGetData($tInfo, "NewState"), _
DllStructGetData($tInfo, "OldState"), _
DllStructGetData($tInfo, "Changed"), _
DllStructGetData($tInfo, "ActionX"), _
DllStructGetData($tInfo, "ActionY"), _
DllStructGetData($tInfo, "lParam"), _
DllStructGetData($tInfo, "KeyFlags")]
_LeftDblClick($aInfo)
Case $NM_KILLFOCUS ; The control has lost the input focus
Local $aInfo[3] = [$hWndFrom, _
$iIDFrom, _
$iCode]
;~ _LostFocus($aInfo)
Case $NM_RCLICK ; Sent by a list-view control when the user clicks an item with the right mouse button
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $aInfo[12] = [$hWndFrom, _
$iIDFrom, _
$iCode, _
DllStructGetData($tInfo, "Index"), _
DllStructGetData($tInfo, "SubItem"), _
DllStructGetData($tInfo, "NewState"), _
DllStructGetData($tInfo, "OldState"), _
DllStructGetData($tInfo, "Changed"), _
DllStructGetData($tInfo, "ActionX"), _
DllStructGetData($tInfo, "ActionY"), _
DllStructGetData($tInfo, "lParam"), _
DllStructGetData($tInfo, "KeyFlags")]
; Return 1 ; not to allow the default processing
Return 0 ; allow the default processing
;~ _RightClick($aInfo)
Case $NM_RDBLCLK ; Sent by a list-view control when the user double-clicks an item with the right mouse button
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $aInfo[12] = [$hWndFrom, _
$iIDFrom, _
$iCode, _
DllStructGetData($tInfo, "Index"), _
DllStructGetData($tInfo, "SubItem"), _
DllStructGetData($tInfo, "NewState"), _
DllStructGetData($tInfo, "OldState"), _
DllStructGetData($tInfo, "Changed"), _
DllStructGetData($tInfo, "ActionX"), _
DllStructGetData($tInfo, "ActionY"), _
DllStructGetData($tInfo, "lParam"), _
DllStructGetData($tInfo, "KeyFlags")]
;~ _RightDblClick($aInfo)
Case $NM_RETURN ; The control has the input focus and that the user has pressed the ENTER key
Local $aInfo[3] = [$hWndFrom, _
$iIDFrom, _
$iCode]
;~ _InputFocusReturn($aInfo)
Case $NM_SETFOCUS ; The control has received the input focus
Local $aInfo[3] = [$hWndFrom, _
$iIDFrom, _
$iCode]
;~ _SetFocus($aInfo)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY -
Was ist den am besten für eine Datenbank?
Sehr gut geeignet ist SQLite.
Ich hab deinen Code mal umgestellt (und dabei deutlich gekürzt) auf die von mir empfohlene Verwendung der INI. Wenn dort nur ein paar Plüschtiere verwaltet werden
, sollte das ausreichen.Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiListView.au3>
Local $INI = @ScriptDir & "\Patienten.ini"; nur zum Testen:
[/autoit] [autoit][/autoit] [autoit]
If Not FileExists($INI) Then
IniWrite($INI, "Patienten", 10000, "Peter|Lustig|11.11.1956|12345 Grüner-Wald|Bauwagen 1")
IniWrite($INI, "Patienten", 10001, "Marion|Rosenbaum|08.12.1987|33445 Irgendwo|Am Feld 35")
IniWrite($INI, "Patienten", 10002, "Max|Mustermann|12.12.1978|44556 Musterdorf|Mustergasse 17")
IniWrite($INI, "Numbers", "last", 10002)
EndIf
; Ende Test-INIGlobal $aPatienten = IniReadSection($INI, "Patienten")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Local $lastNum = IniRead($INI, "Numbers", "last", 9999)#Region ### START Koda GUI section ### Form=
[/autoit] [autoit][/autoit] [autoit]
$Form1 = GUICreate("Form1", 1017, 736, 267, 139)
$PageControl1 = GUICtrlCreateTab(8, 56, 1007, 707)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
$TabSheet1 = GUICtrlCreateTabItem("Patienten")
$Listview1 = GUICtrlCreateListView("Nr|Vorname|Nachname|Geburtsdatum|PLZ / Wohnort| Straße", 24, 152, 969, 552)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
; ### hier Kontextmenü für ListView einfügen:
$mnu = GUICtrlCreateContextMenu($Listview1)
$mnu_del = GUICtrlCreateMenuItem('Patient Löschen', $mnu)
; ### Ende Kontextmenü
$TabSheet2 = GUICtrlCreateTabItem("Neuer Patient")
$Label1 = GUICtrlCreateLabel("Vorname:", 28, 105, 73, 24)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Label2 = GUICtrlCreateLabel("Nachname:", 28, 137, 85, 24)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Input1 = GUICtrlCreateInput("", 110, 105, 161, 22)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Input2 = GUICtrlCreateInput("", 110, 137, 161, 22)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Label3 = GUICtrlCreateLabel("Geburtsdatum:", 28, 169, 111, 24)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Input3 = GUICtrlCreateInput("DD.MM.YYYY", 110, 169, 161, 22)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Label4 = GUICtrlCreateLabel("PLZ / Wohnort:", 28, 201, 106, 24)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Input4 = GUICtrlCreateInput("", 110, 201, 161, 22)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Label5 = GUICtrlCreateLabel("Straße:", 28, 233, 57, 24)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Input5 = GUICtrlCreateInput("", 110, 233, 161, 22)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$Button1 = GUICtrlCreateButton("Neuen Patienten speichern", 110, 272, 161, 30, 0)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$TabSheet3 = GUICtrlCreateTabItem("Termine")
GUICtrlCreateTabItem("")
#EndRegion ### START Koda GUI section ### Form=_FillListView()
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $PageControl1
If GUICtrlRead($PageControl1) = 0 ThenElseIf GUICtrlRead($PageControl1) = 1 Then
[/autoit] [autoit][/autoit] [autoit]ElseIf GUICtrlRead($PageControl1) = 2 Then
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]
Case $Button1
$lastNum += 1
$Vorname = GUICtrlRead($Input1)
$Nachname = GUICtrlRead($Input2)
$Geburtsdatum = GUICtrlRead($Input3)
$PLZWohnort = GUICtrlRead($Input4)
$Strasse = GUICtrlRead($Input5)
IniWrite($INI, "Numbers", "last", $lastNum)
IniWrite($INI, "Patienten", $lastNum, $Vorname & '|' & $Nachname & '|' & $Geburtsdatum & '|' & $PLZWohnort & '|' & $Strasse)
GUICtrlSetData($Input1, "")
GUICtrlSetData($Input2, "")
GUICtrlSetData($Input3, "DD.MM.YYYY")
GUICtrlSetData($Input4, "")
GUICtrlSetData($Input5, "")
; Array mit Patienten-Daten neu einlesen
$aPatienten = IniReadSection($INI, "Patienten")
_FillListView()
Case $mnu_del
; Eintrag aus INI löschen:
$index = _GUICtrlListView_GetSelectedIndices($Listview1)
$del_Key = _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listview1), $index, 0)
IniDelete($INI, "Patienten", $del_key)
; Array mit Patienten-Daten neu einlesen
$aPatienten = IniReadSection($INI, "Patienten")
; entfernt Eintrag aus Liste:
_GUICtrlListView_DeleteItemsSelected($Listview1)
EndSwitch
WEndFunc _FillListView()
[/autoit]
_GUICtrlListView_DeleteAllItems($Listview1)
If $lastNum = 9999 Then Return
For $i = 1 To UBound($aPatienten) -1
GUICtrlCreateListViewItem($aPatienten[$i][0] & '|' & $aPatienten[$i][1], $Listview1)
Next
EndFuncEdit: Achja - falls du es nicht gleich siehst: Löschen per Kontextmenü im ListView.

-
Einen markierten Eintrag löschst du mit:
[autoit]_GUICtrlListView_DeleteItemsSelected($Listview1)
[/autoit]
Dann ist er nicht mehr in der Liste - aber noch in der INI, dort mußt du also auch noch den Eintrag löschen.
Die INI ist sowieso nicht besonders geeignet als Datenbank. Aber wenn du sie benutzen möchtest, ist es besser nur eine Sektion "Patienten" zu erstellen und jedem Patienten einen eindeutigen Schlüssel zuzuordnen. Sonst läßt er sich nämlich nicht löschen, da alle Patientendaten mehrfach auftreten können.
Denkbar wäre: -
aber mir fällt einfach kein Anwendungsgebiet dafür ein. Jedenfalls keins, das man nicht anders einfacher lösen kann.
Sehe ich ebenso. Aber ich kann mir schon denken, warum darauf zurückgegriffen wird. Mein erstes Autoit-Skript (Ewiger Feiertagskalender), war auch mit Assign/Eval-Konstrukten versehen, einfach aus dem Grund, dass ich damals mit Arrays noch nicht vertraut war (ja, das gabs wirklich
) und deshalb den Weg über "lesbare" Variablennamen gewählt hatte. -
Also ich denke, es gibt nicht DEN Anbieter.
Du kannst reden mit wem du willst - du wirst immer sowohl Topmeinungen als auch vernichtende Urteile zu einem Anbieter bekommen.
Ich habe z.B. noch nie Probleme mit 1&1 gehabt, bin da schon ca. 5 Jahre. Ich kenne aber Leute die ähnliche Probleme, wie im vorigen Post geschildert, hatten. Da scheint aber auch ein regionaler Unterschied zu sein.
Der beste Weg ist sicher, einen Anbieter mit kurzer Laufzeit zuwählen. Sind keine Probleme, bleibt man - ansonsten auf zum nächsten.