1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BugFix

Beiträge von BugFix

  • Popup Menü auf Listvieweintrag

    • BugFix
    • 30. November 2008 um 14:04
    Zitat von ari

    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.

  • "Arzt" Programm

    • BugFix
    • 30. November 2008 um 13:46
    Zitat von Sirocool

    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.

  • "Arzt" Programm

    • BugFix
    • 30. November 2008 um 13:07

    Guckst du:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    Local $INI = @ScriptDir & "\Patienten.ini"

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

    ; nur zum Testen:
    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-INI

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

    Global $aPatienten = IniReadSection($INI, "Patienten")
    Local $lastNum = IniRead($INI, "Numbers", "last", 9999)

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

    #Region ### START Koda GUI section ### Form=
    $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=

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

    #Region ### START Koda GUI section ### Form=
    $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 ###

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

    _FillListView()
    GUISetState(@SW_SHOW, $Form1)
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    While 1
    $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 Then

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

    ElseIf GUICtrlRead($PageControl1) = 1 Then

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

    ElseIf GUICtrlRead($PageControl1) = 2 Then

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

    EndIf
    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
    WEnd

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

    Func _FillListView()
    _GUICtrlListView_DeleteAllItems($Listview1)
    If $lastNum = 9999 Then Return
    For $i = 1 To UBound($aPatienten) -1
    GUICtrlCreateListViewItem($aPatienten[$i][0] & '|' & $aPatienten[$i][1], $Listview1)
    Next
    EndFunc

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

    Func _LeftDblClick($Info) ; Inhalt der angeklickten Zeile (alle Spalten) wird in GUI gezeigt
    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)
    EndFunc

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $ListView1
    If Not IsHWnd($ListView1) Then $hWndListView = GUICtrlGetHandle($ListView1)

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $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

    [/autoit]
  • 'Fenster' - Auflistung in Menüleiste

    • BugFix
    • 30. November 2008 um 12:45
    Zitat von Raupi

    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.

  • [erledigt] Halb-OT: Handle to ...

    • BugFix
    • 30. November 2008 um 02:03

    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.

  • Fehler in Hilfe zu _GUICtrlListView_GetItemText()

    • BugFix
    • 30. November 2008 um 01:49

    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. ;)

  • Primfaktorzerlegung, Radikal eines Integer

    • BugFix
    • 30. November 2008 um 00:44

    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)
    ConsoleWrite( _Rad(504) & @CRLF)

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

    Func _GetPrimeFactors($n)
    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)
    EndFunc

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

    Func _Radical($n)
    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
    EndFunc

    [/autoit]

    Edit:
    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 While Schleifen

    • BugFix
    • 29. November 2008 um 21:20

    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.

  • IniReadSectionNames und StringRegExpReplace?

    • BugFix
    • 29. November 2008 um 21:01

    Warum so kompliziert? ;)

    [autoit]

    $data_raum = IniReadSectionNames($config)
    For $i = 1 To $data_raum[0]
    If $data_raum[$i] = 'global' Then ContinueLoop
    GUICtrlSetData($cmb_raum, $data_raum[$i], "")
    Next

    [/autoit]
  • "Arzt" Programm

    • BugFix
    • 29. November 2008 um 20:23

    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>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    Local $INI = @ScriptDir & "\Patienten.ini"

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

    ; nur zum Testen:
    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-INI

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

    Global $aPatienten = IniReadSection($INI, "Patienten")
    Local $lastNum = IniRead($INI, "Numbers", "last", 9999)

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

    #Region ### START Koda GUI section ### Form=
    $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=

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

    $Form2 = GUICreate('Form2')
    $edit_Patient = GUICtrlCreateEdit('', 20, 20, 250, 200)

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

    _FillListView()
    GUISetState(@SW_SHOW, $Form1)
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    While 1
    $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 Then

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

    ElseIf GUICtrlRead($PageControl1) = 1 Then

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

    ElseIf GUICtrlRead($PageControl1) = 2 Then

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

    EndIf
    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
    WEnd

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

    Func _FillListView()
    _GUICtrlListView_DeleteAllItems($Listview1)
    If $lastNum = 9999 Then Return
    For $i = 1 To UBound($aPatienten) -1
    GUICtrlCreateListViewItem($aPatienten[$i][0] & '|' & $aPatienten[$i][1], $Listview1)
    Next
    EndFunc

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

    Func _LeftDblClick($Info) ; Inhalt der angeklickten Zeile (alle Spalten) wird in GUI gezeigt
    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)
    EndFunc

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $ListView1
    If Not IsHWnd($ListView1) Then $hWndListView = GUICtrlGetHandle($ListView1)

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $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

    [/autoit]
  • Fehler in Hilfe zu _GUICtrlListView_GetItemText()

    • BugFix
    • 29. November 2008 um 18:59

    Hi,
    Auszug aus der Hilfe zu _GUICtrlListView_GetItemText()

    Zitat

    Retrieves 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 index

    Remarks
    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 :thumbdown:
    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?

  • "Arzt" Programm

    • BugFix
    • 29. November 2008 um 18:40

    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>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    Local $INI = @ScriptDir & "\Patienten.ini"

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

    ; nur zum Testen:
    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-INI

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

    Global $aPatienten = IniReadSection($INI, "Patienten")
    Local $lastNum = IniRead($INI, "Numbers", "last", 9999)

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

    #Region ### START Koda GUI section ### Form=
    $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=

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

    $Form2 = GUICreate('Form2')
    $lb_Patient = GUICtrlCreateLabel('', 20, 20, 250, 17)

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

    _FillListView()
    GUISetState(@SW_SHOW, $Form1)
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    While 1
    $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 Then

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

    ElseIf GUICtrlRead($PageControl1) = 1 Then

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

    ElseIf GUICtrlRead($PageControl1) = 2 Then

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

    EndIf
    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
    WEnd

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

    Func _FillListView()
    _GUICtrlListView_DeleteAllItems($Listview1)
    If $lastNum = 9999 Then Return
    For $i = 1 To UBound($aPatienten) -1
    GUICtrlCreateListViewItem($aPatienten[$i][0] & '|' & $aPatienten[$i][1], $Listview1)
    Next
    EndFunc

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

    Func _LeftDblClick($Info) ; Inhalt der angeklickten Spalte wird in GUI gezeigt
    Local $indx_Item = $Info[3], $indx_Sub = $Info[4]
    GUICtrlSetData($lb_Patient, _GUICtrlListView_GetItemText(GUICtrlGetHandle($Listview1), $indx_Item, $indx_Sub))
    GUISetState(@SW_SHOW, $Form2)
    EndFunc

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $ListView1
    If Not IsHWnd($ListView1) Then $hWndListView = GUICtrlGetHandle($ListView1)

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $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

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • "Arzt" Programm

    • BugFix
    • 29. November 2008 um 13:27
    Zitat von Greek

    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>
    #include <GuiListView.au3>
    Local $INI = @ScriptDir & "\Patienten.ini"

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

    ; nur zum Testen:
    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-INI

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

    Global $aPatienten = IniReadSection($INI, "Patienten")
    Local $lastNum = IniRead($INI, "Numbers", "last", 9999)

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

    #Region ### START Koda GUI section ### Form=
    $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=

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

    _FillListView()

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $PageControl1
    If GUICtrlRead($PageControl1) = 0 Then

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

    ElseIf GUICtrlRead($PageControl1) = 1 Then

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

    ElseIf GUICtrlRead($PageControl1) = 2 Then

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

    EndIf
    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
    WEnd

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

    Func _FillListView()
    _GUICtrlListView_DeleteAllItems($Listview1)
    If $lastNum = 9999 Then Return
    For $i = 1 To UBound($aPatienten) -1
    GUICtrlCreateListViewItem($aPatienten[$i][0] & '|' & $aPatienten[$i][1], $Listview1)
    Next
    EndFunc

    [/autoit]

    Edit: Achja - falls du es nicht gleich siehst: Löschen per Kontextmenü im ListView. ;)

  • "Arzt" Programm

    • BugFix
    • 29. November 2008 um 12:45

    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:

    Code
    [Patienten]
    10000=Meier|Hans|12.12.1990|Mustergasse 77|12345 Teststadt
    10001=Müller|Ilse|09.08.1965|Blumenweg 3a|67890 Schönhausen
  • Variable mit fortlaufender Zahl

    • BugFix
    • 29. November 2008 um 09:29
    Zitat von Oscar

    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 :P ) und deshalb den Weg über "lesbare" Variablennamen gewählt hatte.

  • Freenet - Ja oder Nein?

    • BugFix
    • 28. November 2008 um 21:55

    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. ;)

  • Variable mit fortlaufender Zahl

    • BugFix
    • 28. November 2008 um 21:48

    Lies die Sektion mit IniReadSection() ein. Dann hast du alles in einem Array.

  • Frage zu Functionen

    • BugFix
    • 28. November 2008 um 21:46
    Zitat von Observer

    Was ist daran falsch ?

    Hast du $oIE auch als Global deklariert?

  • _GUICtrlListView_Add(Sub)Item -> GuiListView.au3

    • BugFix
    • 28. November 2008 um 19:28

    Mit _GUICtrlListView_AddSubItem kannst du immer nur EIN Subitem einfügen. Schau dir das Bsp. zu dem Befehl in der Hilfe an - ist eindeutig.

  • Der_Doc

    • BugFix
    • 28. November 2008 um 16:53

    Hi Doc,

    na dann auch von mir Alles erdenklich Gute. Allem voran natürlich der Sechser +Zusatzzahl. :D

    Wir könnten ja glatt zusammen feiern, wenn wir schon am selben Tag Geburtstag haben. Du wohnst lumpige 45 Autominuten von mir entfernt. 8o

    Also genieße den Tag und den (Schmuse-) Kater am Morgen. :whistling:

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™