Koordinaten einer InputBox auslesen

  • Liebe Profis,
    nach nunmehr zwei Tagen RTFM und Google und Experimenten erbitte ich Eure Hilfe!

    Folgendes Problem:
    Ich möchte es dem Anwender gestatten, die GUI per Maus umzugestalten.
    Nach Anwahl des entsprechenden Menüpunktes können InputBoxen per Drag & Drop verschoben werden.

    Egal was ich anstelle: Ich hadere ich immer wieder mit einem der beiden folgenden Probleme:

    1) Entweder bekomme ich es gebacken, dass eine Listbox der Mausbewegung folgt. Dann aber nur so lange sich die Maus innerhalb des Rechtecks dieser InputBox befindet.
    Ganz doof: Hoovert die Maus während dessen über einer anderen ListBox, so fühlt diese sich angesprochen und klebt plötzlich am Mauszeiger.

    2) Oder: Um obiges Problem zu vermeiden, führte ich die Variable $iDoItOnlyOnce ein, die dafür sorgen soll, dass das jeweilige GUI-Element (hier also die InputBox) nur einmalig, beim Klicken der linken Maustaste, ermittelt wird.
    Dann aber, folgt die gewählte InputBox der Maus nicht mehr flüssig, sondern sie springt bei jedem Klick.
    Derzeit ist diese Option deaktiviert, durch Auskommentieren der Zeilen 893 (If ... Then) und 906 (EndIf)

    Die fehlerhaft Funktion heißt "GUI_Redesign()" (ab Zeile 887).
    Mit beteiligt ist die Funktion Optionen(), die sich direkt darüber befindet.
    Weiterhin mit beteilig ist in der Hauptschleife der Bereich zwischen Zeile 664 und 677.

    Offensichtlichen Schwachsinn treibe ich in der Zeile 898, wo ich ermittle, über welchem GUI-Element die Maus hoovert.
    Dort lese ich die Koordinaten aus, mit denen zu Anfang die GUI aufgebaut wurde.
    Ich müsste aber eigentlich die Parameter auslesen, wo sich die gewünschte InputBox derzeit befindet, denn immerhin kann die ja verschoben werden!
    Doch ich bekomme es trotz ausuferndem RTFM und reichlich Forensuche nicht hin, die gegenwärtigen Koordinaten einer InputBox auszulesen.
    Koordinaten zu verändern klappt, aber nicht das Auslesen. Und den Workarround über Hilfsvariablen möchte ich vermeiden.

    Übrigens vermute ich ganz stark, dass es einen wesentlich eleganteren Weg gibt, zu ermitteln, über welchem Element der Mauszeiger hoovert (und welches Element gerade angeklickt wird), als das, was ich in der Funktion "GUI_Redesign()" treibe.
    Das berühmte UDF GUICtrl_SetOnHover möchte ich aber nicht verwenden (zu buggy).

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    ; output.code.page=65001 ;Deutsche Umlaute ermöglichen. Klappt dennoch nur manchmal ...
    #Region Header #################################################################################################################\
    ; Erstellt mit AutoIt-Version v3.3.14.2

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

    Global Const $sProgrammname = "Reparaturverwaltung"
    Global Const $sVersion = "0.26"
    Global Const $sRevisionsdatum = "07.06.2016"
    Global Const $sAutor = "EDV-Dompteur, Stefan Denk"
    Global Const $sWebsite = "http://www.EDV-Dompteur.de"

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

    ; --- P r o g r a m m b e s c h r e i b u n g -----------------------------------------------------------------------------\
    Global Const $sAbout = "Programmname: " & $sProgrammname & @CRLF & "Version: " & $sVersion & @CRLF & "Autor: " & $sAutor & @CRLF & "Website: " & $sWebsite & @CRLF _
    & @CRLF & "P r o g r a m m b e s c h r e i b u n g" _
    & @CRLF & "---------------------------------------" _
    & @CRLF & "Die hier vorliegende Software ist Freeware, also zur kostenlosen Nutzung freigegeben!" _
    & @CRLF & "Das Programm dient kleinen Reparaturbetrieben dazu, den Überblick über ihre ausgeführten Arbeiten zu behalten." _
    & @CRLF & "Die Details einer jeden Reparatur werden in einem eigenen Datensatz einer SQLite-Datenbank gespeichert." _
    & @CRLF & "Eine Übersicht, in Form einer frei sortierbaren Liste, ermöglicht es rasch nach Datum, Kunde, Gerät etc. zu sortieren."
    ; --- P r o g r a m m b e s c h r e i b u n g -----------------------------------------------------------------------------/

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

    ; --- History -------------------------------------------------------------------------------------------------------------\
    Global Const $sHistory = "" _
    & @CRLF & "D a n k s a g u n g:" _
    & @CRLF & "----------------------" _
    & @CRLF & "Die Code-Vorlage, auf der dieses Programm aufbaut, stammt vom User ""RR04"", aus dem großartigen Forum https://autoit.de/www.AutoIt.de" _
    & @CRLF & "Hier der Foren-Thread mit der Ursprungsversion:" _
    & @CRLF & "https://autoit.de/index.php/Thread/83862-Alinas-SQLite-BuchVw/" _
    & @CRLF & "Vielen Dank an ""RR04"", für die tolle Vorarbeit, die mir sicherlich mehrere Tage Arbeit erspart hat!" _
    & @CRLF _
    & @CRLF & "Weiterhin enthält das Programm einzelne Routinen von ""BugFix"" ([email='bugfix@autoit.de'][/email])" _
    & @CRLF & "Vielen Dank daher auch an ""BugFix""!" _
    & @CRLF & "" _
    & @CRLF & "Ab hier beginnen nun die Änderngen und Erweiterungen durch Fa. EDV-Dompteur, Stefan Denk:" _
    & @CRLF _
    & @CRLF & "H i s t or y:" _
    & @CRLF & "-------------" _
    & @CRLF & "V0.01 vom 28.05.2016:" _
    & @CRLF & "- Programm umbenannt und erste Umgestaltungen der Quelltext-Vorlage von RR04." _
    & @CRLF & "- Programmbeschreibung und History im Quelltext-Header implementiert; derart, dass auch eine Ausgabe dieser Texte möglich wird." _
    & @CRLF & "- Die Tabelle wird nun bei Programmstart automatisch mit Datensätzen gefüllt (wenn DB noch nicht vorhanden, wird sie zuvor erzeugt)." _
    & @CRLF _
    & @CRLF & "V0.06 vom 29.05.2016:" _
    & @CRLF & "- Der ListView-Header ist nun eine Variable, zwecks späterer Möglichkeit zum Einlesen aus einer ini-Datei." _
    & @CRLF & "- Die Beispiel-Datensätze der usprünglichen Reparaturverwaltung umgestrickt auf die Belange einer Reparaturverwaltung." _
    & @CRLF & "- Die Feldbezeichner der SQL-Datenbank verallgemeinert, zwecks leichterer Modifizierbarkeit." _
    & @CRLF & "- Neue Datenfelder definiert: Projektordner, Gesprächsnotiz, Reparaturbericht." _
    & @CRLF & "- Bugfix: Nach dem letzten Quelltext-Umbau wurden Datensätze nicht mehr aktualisiert, nach entsprechender Button-Betätigung." _
    & @CRLF & "- Programmbeschreibung und History werden jetzt mit Zeilenumbrüchen formatiert ausgegeben." _
    & @CRLF & "- Bugfix: Datenfeld 20 wurde nicht mit aktualisiert, nach dem Editieren eines Datensatzes." _
    & @CRLF & "- Menüleiste hinzugefügt. Funktionen: Exit, Programminfo, History (der Menüzweig ""Einstellungen"" ist noch ohne Funktion)." _
    & @CRLF & "- Listview: Spaltenbreiten und Textausrichtung eingestellt. Erste Vorbereitung für späteres Laden der Werte aus ini-Datei." _
    & @CRLF _
    & @CRLF & "V0.07 vom 30.05.2016:" _
    & @CRLF & "- Harmloser Bugfix: Die Einstellmöglichkeit für die Breite von ListView-Spalte 20 fehlte im Quellcode." _
    & @CRLF & "- Anzahl der Datenfelder von 20 auf 30 erhöht. Dadurch GUI-Erscheinungsbild derzeit desolat" _
    & @CRLF _
    & @CRLF & "V0.08 vom 31.05.2016:" _
    & @CRLF & "- Momentan überflüssige Felder auskommentiert und Befehl zum Verstecken von ListView-Spalten implementiert." _
    & @CRLF & "- Vorbereitungen für späteres Laden der GUI-Parameter aus einer Datei." _
    & @CRLF _
    & @CRLF & "V0.09 vom 31.05.2016:" _
    & @CRLF & "- Elegantere Methode zur GUI-Gestaltung implementiert, für späteres Laden aus Datei." _
    & @CRLF _
    & @CRLF & "V0.10 vom 31.05.2016:" _
    & @CRLF & "- Alle InBoxen sind nun bequem Parametrierbar, voll vorbereitet für späteres Laden aus CSV-Datei." _
    & @CRLF & "- Zu jeder Inputbox gehört nun ein Label, deren Ausrichtung ebenfalls bequem einstellbar ist." _
    & @CRLF _
    & @CRLF & "V0.20 vom 04.06.2016:" _
    & @CRLF & "- Die Maus-Koordinaten werden jetzt erfasst und links in der Fußzeile angezeigt." _
    & @CRLF _
    & @CRLF & "V0.21 vom 04.06.2016:" _
    & @CRLF & "- Auch das Suchfeld kann nun einfach parametriert werden." _
    & @CRLF & "- Experimentell eine Groupbox hinzugefügt." _
    & @CRLF _
    & @CRLF & "V0.22 vom 04.06.2016:" _
    & @CRLF & "- Auch Groupboxen können nun einfach parametriert werden." _
    & @CRLF _
    & @CRLF & "V0.23 vom 04.06.2016:" _
    & @CRLF & "- Statusleiste am unteren Fensterrand debugt und erweitert. Jetzt perfekt." _
    & @CRLF & "- Inputboxen lassen sich jetzt erstmals anstazweise per Maus verschieben (noch reichlich buggy)." _
    & @CRLF _
    & @CRLF & "V0.24 vom 06.06.2016:" _
    & @CRLF & "- Fehler beseitigt bei den Koordinaten der Objekt-Label. Nun auch bei Editbox in Ordnung." _
    & @CRLF & "Absturzfehler beseitigt (trat auf bei Klick außerhalb des Fensters): Mauspositionen werden nun durch MouseGetPos ermittelt, statt durch GUIGetCursorInfo." _
    & @CRLF & "Hintergrundbild für das Hauptfenster implementiert." _
    & @CRLF _
    & @CRLF & "V0.25 vom 07.06.2016:" _
    & @CRLF & "- Der Modus zum Umgestalten des GUI kann nun per Menü aktiviert/deaktiviert werden." _
    & @CRLF & "- Bug bemerkt: Inputboxen und ListView nicht betretbar, wenn Hintergrundbild geladen." _
    & @CRLF _
    & @CRLF & "V0.26 vom 07.06.2016:" _
    & @CRLF & "- "
    ; --- History -------------------------------------------------------------------------------------------------------------/

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

    ; --- Aktuelle Aufgaben ---------------------------------------------------------------------------------------------------\
    Global Const $sProgrammieraufgaben = "" _
    & @CRLF & "Folgende drei Darstellungsmodi implementieren: Kombi (Tabelle und Datensatz, wie gehabt), Tabelle (volle Größe), Datensatz (ohne Tabelle)" _
    & @CRLF & "Positionen und Parameter der GUI-Elemente aus ini-Datei laden." _
    & @CRLF & "Bug: Inputboxen und ListView nicht betretbar, wenn Hintergrundbild geladen."
    ; --- Aktuelle Aufgaben ---------------------------------------------------------------------------------------------------/

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

    #include <Date.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <GuiStatusBar.au3>
    #include <GUIConstantsEx.au3>
    #include <ComboConstants.au3>
    #include <GuiListView.au3>
    #include <String.au3>
    #include <SQLite.au3>
    #include <sqlite3101_dll.au3>
    #include <StaticConstants.au3> ;Erweiterte Einstellungen für Labels
    #include <EditConstants.au3> ;Test
    #include <Array.au3> ;Test

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

    #include <GDIPlus.au3>
    #include <EditConstants.au3>
    #include <WindowsConstants.au3>
    #Include <Misc.au3>

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

    #include <WindowsConstants.au3>
    #include <WinAPI.au3>

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

    _GDIPlus_Startup()
    #EndRegion Header ##############################################################################################################/

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

    #Region Constanten & Variablen deklarieren und belegen #########################################################################\
    ; --- Globale Constanten deklarieren --------------------------------------------------------------------------------------\
    Global Const $asWDAYger[7] = ["Sonntag, ", "Montag, ", "Dienstag, ", "Mittwoch, ", "Donnerstag, ", "Freitag, ", "Samstag, "]
    ; --- Globale Constanten deklarieren --------------------------------------------------------------------------------------/

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

    ; --- Globale Variablen deklarieren ---------------------------------------------------------------------------------------\
    Opt("MustDeclareVars", 1) ;Zwingt den Programmierer, Variablen ordentlich zu deklarieren, vor der ersten Benutzung.
    Global $cboSerch, $iptSerch, $FormKombiansicht, $Label, $ListView, $ContextMenu, $MenuItem, $btnUpdate, $btnDelete, $iptSearch
    Global $cboSearch, $btnSearch, $btnDBladen, $btnClear, $lblBottomLine, $btnSave, $btnBackUp, $Result, $sDatenbankVollpfad
    Global $sTmp, $sText, $i
    Global $sListViewHeader, $iDBFeldanzahl
    Global $hGUI, $hImage1, $hImage2, $aMousePos
    Global $sUserMessageOld, $sUserMessageNew
    Global $bGUIRedesign
    Global $iDoItOnlyOnce = 0

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

    Opt("MouseCoordMode", 0)
    Global $iPressed = 0, $iLastCtrlID = -1
    ; --- Globale Variablen deklarieren ---------------------------------------------------------------------------------------/

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

    ; ---Globale Variablen mit Werten belegen ---------------------------------------------------------------------------------\
    $sDatenbankVollpfad = @ScriptDir & "\Reparaturverwaltung.rr04"
    $iDBFeldanzahl = 30 ;So viele Felder gibt es in der Datenbank
    ; ---Globale Variablen mit Werten belegen ---------------------------------------------------------------------------------/
    #EndRegion Constanten & Variablen deklarieren und belegen ######################################################################/

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

    #Region Bedienoberfläche zeichnen ##############################################################################################\
    ; --- Fenster & Menü erzeugen-----------------------------------------------------------\
    Global $FormKombiansicht = GUICreate($sProgrammname, 1200, 768, 10, 10) ;Das Hauptfenster erzeugen.
    GUICtrlCreatePic(@ScriptDir & '\Example Images\background.jpg', 0, 0, 1200, 768)

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

    ; --- Menüzweig 1 ------------------------------------------------------------\
    Global $MenuA = GUICtrlCreateMenu("Datei")
    Global $MenuItemAExit = GUICtrlCreateMenuItem("Schließen", $MenuA)
    ; --- Menüzweig 1 ------------------------------------------------------------/

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

    ; --- Menüzweig 2 ------------------------------------------------------------\
    Global $MenuB = GUICtrlCreateMenu("Einstellungen")
    Global $MenuItemOptionen = GUICtrlCreateMenuItem("Maske umgestalten", $MenuB)
    ; --- Menüzweig 2 ------------------------------------------------------------/

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

    ; --- Menüzweig 3 ------------------------------------------------------------\
    Global $MenuC = GUICtrlCreateMenu("?")
    Global $MenuItemCProgramminfo = GUICtrlCreateMenuItem("Programminfo", $MenuC)
    Global $MenuItemCHistory = GUICtrlCreateMenuItem("History && Danksagung", $MenuC)
    ; --- Menüzweig 3 ------------------------------------------------------------/
    GUISetState(@SW_SHOW) ;??? Was macht dieser Befehl?
    ; --- Fenster & Menü erzeugen-----------------------------------------------------------/

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

    ; --- Programmname darstellen ----------------------------------------------------------\
    ;$Label = GUICtrlCreateLabel("~ ~ ~ " & $sProgrammname & " Version: " & $sVersion & " ~ ~ ~", 0, 8, 1125, 28, 0x01) ; $SS_CENTER=0x01
    ;GUICtrlSetFont(-1, 16, 800, 0, "Arial")
    ;GUICtrlSetColor(-1, 0x0000FF)
    ; --- Programmname darstellen ----------------------------------------------------------/

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

    ; --- Liestview aufbauen --------------------------------------------------------------------------------------------------\
    ; ---- Headerzeile der ListView --------------------------------------------------------\
    $sListViewHeader= "" _
    & "ID" _
    & "|Annahme" _
    & "|Abholung" _
    & "|Gerät" _
    & "|Schadenskürzel" _
    & "|Firma" _
    & "|Vorname" _
    & "|Nachname" _
    & "|Endpreis" _
    & "|Re-Nr." _
    & "|Anzahl." _
    & "|Leihteile" _
    & "|Voranschlag" _
    & "|Rekla" _
    & "|Projektordner" _
    & "|Gesprächsnotiz" _
    & "|Reparaturbericht" _
    & "|17" _
    & "|18" _
    & "|19" _
    & "|20" _
    & "|21" _
    & "|22" _
    & "|23" _
    & "|24" _
    & "|25" _
    & "|26" _
    & "|27" _
    & "|28" _
    & "|29" _
    & "|30"
    ; ---- Headerzeile der ListView --------------------------------------------------------/

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

    ; --- Listwiew erzeugen ----------------------------------------------------------------\
    Global $aHeader = StringSplit($sListViewHeader, '|')
    $ListView = GUICtrlCreateListView($sListViewHeader, 0, 40, 1125, 260)
    GUICtrlSetBkColor(-1, 0xFFFFFF) ; Color weiß
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE)
    GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    ; --- Listwiew erzeugen ----------------------------------------------------------------/

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

    ; --- Spaltenbreiten und Textausrichtung der Listview-Spalten festlegen ----------------\
    Global $GetHandleLV = GUICtrlGetHandle($ListView)
    _GUICtrlListView_SetColumn($GetHandleLV, 0, $aHeader[1], 40, 1) ;ID
    _GUICtrlListView_SetColumn($GetHandleLV, 1, $aHeader[2], 80, 0) ;Annahmedatum
    _GUICtrlListView_SetColumn($GetHandleLV, 2, $aHeader[3], 70, 0) ;Abholdatum
    _GUICtrlListView_SetColumn($GetHandleLV, 3, $aHeader[4], 120, 0) ;Gerät
    _GUICtrlListView_SetColumn($GetHandleLV, 4, $aHeader[5], 100, 0) ;Schadenskürzel
    _GUICtrlListView_SetColumn($GetHandleLV, 5, $aHeader[6], 110, 0) ;Firma
    _GUICtrlListView_SetColumn($GetHandleLV, 6, $aHeader[7], 110, 1) ;Vorname
    _GUICtrlListView_SetColumn($GetHandleLV, 7, $aHeader[8], 110, 0) ;Nachname
    _GUICtrlListView_SetColumn($GetHandleLV, 8, $aHeader[9], 60, 1) ;Endpreis
    _GUICtrlListView_SetColumn($GetHandleLV, 9, $aHeader[10], 60, 1) ;Rechnungsnummer
    _GUICtrlListView_SetColumn($GetHandleLV, 10, $aHeader[11], 60, 1) ;Anzahlung
    _GUICtrlListView_SetColumn($GetHandleLV, 11, $aHeader[12], 150, 0) ;Leihteile
    _GUICtrlListView_SetColumn($GetHandleLV, 12, $aHeader[13], 60, 1) ;Voranschlag
    _GUICtrlListView_SetColumn($GetHandleLV, 13, $aHeader[14], 70, 0) ;Reklamation (Verknüpfung auf neuen Datensatz)
    _GUICtrlListView_SetColumn($GetHandleLV, 14, $aHeader[15], 100, 0) ;Projektordner
    _GUICtrlListView_SetColumn($GetHandleLV, 15, $aHeader[16], 100, 0) ;Gesprächsnotiz
    _GUICtrlListView_SetColumn($GetHandleLV, 16, $aHeader[17], 100, 0) ;Reparaturbericht
    _GUICtrlListView_SetColumn($GetHandleLV, 17, $aHeader[18], 40, 0) ;Festnetz
    _GUICtrlListView_SetColumn($GetHandleLV, 18, $aHeader[19], 40, 0) ;Mobil
    _GUICtrlListView_SetColumn($GetHandleLV, 19, $aHeader[20], 40, 0) ;E-Mail
    _GUICtrlListView_SetColumn($GetHandleLV, 20, $aHeader[21], 80, 0) ;Status (In Arbeit / Abholbereit / Abgeholt)
    _GUICtrlListView_SetColumn($GetHandleLV, 21, $aHeader[22], 40, 0) ;
    _GUICtrlListView_SetColumn($GetHandleLV, 22, $aHeader[23], 40, 0) ;
    _GUICtrlListView_SetColumn($GetHandleLV, 23, $aHeader[24], 40, 0) ;
    _GUICtrlListView_SetColumn($GetHandleLV, 24, $aHeader[25], 40, 0) ;
    _GUICtrlListView_SetColumn($GetHandleLV, 25, $aHeader[26], 40, 0) ;
    _GUICtrlListView_SetColumn($GetHandleLV, 26, $aHeader[27], 40, 0) ;
    _GUICtrlListView_SetColumn($GetHandleLV, 27, $aHeader[28], 40, 0) ;
    _GUICtrlListView_SetColumn($GetHandleLV, 28, $aHeader[29], 40, 0) ;
    _GUICtrlListView_SetColumn($GetHandleLV, 29, $aHeader[30], 40, 0) ;
    _GUICtrlListView_SetColumn($GetHandleLV, 30, $aHeader[31], 40, 0) ;
    ; --- Spaltenbreiten und Textausrichtung der Listview-Spalten festlegen ----------------/

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

    $ContextMenu = GUICtrlCreateContextMenu($ListView)
    $MenuItem = GUICtrlCreateMenuItem("Datensatz bearbeiten", $ContextMenu)
    ; --- Liestview aufbauen --------------------------------------------------------------------------------------------------/

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

    ; --- Main Area -----------------------------------------------------------------------------------------------------------\
    ; --- Buttons, Labels und Inputfelder erzeugen -----------------------------------------------------------------------\
    Global $aCtrlLabel[$iDBFeldanzahl + 1], $aHandleGUIElement[$iDBFeldanzahl + 1]
    Global $asGUI_Element[24] ;Array mit 30 elementen - so viele GUI-Elemente gibt es.
    Global $iYSchrittweite = 35

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

    ; --- GUI-Parameter der Input-Boxen und deren Labels ------------------------------------------------------------\
    ; 1 2 3 4 5 6 7 8 9 10 11 12 1314 1516 17
    $asGUI_Element[0] = "Inputbox| 15|320|100| 22|L|0x0000|0|Zeile 0 |U| 0| 0|110| 22|L|0x0000|0|Datensatz-ID"
    $asGUI_Element[1] = "Inputbox|150|375|100| 22|L|0x0000|0|Zeile 1 |R| -5| 0|110| 22|L|0x0000|0|Annahmedatum"
    $asGUI_Element[2] = "Inputbox|150|400|100| 22|L|0x0000|0|Zeile 2 |R| -5| 0|110| 22|R|0x0000|0|Abholdatum"
    $asGUI_Element[3] = "Inputbox|390|375|200| 22|L|0x0000|0|Zeile 3 |O| -5| 0|110| 22|R|0x0000|0|Gerät"
    $asGUI_Element[4] = "Inputbox|390|400|200| 22|L|0x0000|0|Zeile 4 |U| 0| 0|110| 22|R|0x0000|0|Schadenskürzel"
    $asGUI_Element[5] = "Inputbox|150|495|100| 22|L|0x0000|0|Zeile 5 |L| -5| 0|110| 22|R|0x0000|0|Firma"
    $asGUI_Element[6] = "Inputbox|150|520|100| 22|L|0x0000|0|Zeile 6 |L| -5| 0|110| 22|R|0x0000|0|Vorname"
    $asGUI_Element[7] = "Inputbox|150|545|100| 22|L|0x0000|0|Zeile 7 |L| -5| 0|110| 22|R|0x0000|0|Nachname"
    $asGUI_Element[8] = "Inputbox|450|550|100| 22|R|0x0000|0|Zeile 8 |L| -5| 0|110| 22|R|0x0000|0|Endpreis"
    $asGUI_Element[9] = "Inputbox|450|575|100| 22|R|0x0000|0|Zeile 9 |L| -5| 0|110| 22|R|0x0000|0|Re-Nr."
    $asGUI_Element[10] = "Inputbox|450|450|100| 22|R|0x0000|0|Zeile 10 |L| -5| 0|110| 22|R|0x0000|0|Anzahlung"
    $asGUI_Element[11] = "Inputbox|450|475|100| 22|L|0x0000|0|Zeile 11 |L| -5| 0|110| 22|R|0x0000|0|Leihteile"
    $asGUI_Element[12] = "Inputbox|450|500|100| 22|R|0x0000|0|Zeile 12 |L| -5| 0|110| 22|R|0x0000|0|Voranschlag"
    $asGUI_Element[13] = "Inputbox|140|320|100| 22|L|0x0000|0|Zeile 13 |U| 0| 0| 85| 22|L|0x0000|0|Rekla"
    $asGUI_Element[14] = "Inputbox|270|320|500| 22|L|0x0000|0|Zeile 14 |U| 0| 0|130| 22|L|0x0000|0|Projektordner"
    $asGUI_Element[15] = "Inputbox|750|475|100| 22|L|0x0000|0|Zeile 15 |L| -5| 0|110| 22|R|0x0000|0|Gesprächsnotiz"
    $asGUI_Element[16] = "Inputbox|750|350|100| 22|L|0x0000|0|Zeile 16 |L| -5| 0|120| 22|R|0x0000|0|Reparaturbericht"
    $asGUI_Element[17] = "Inputbox|750|375|100| 22|L|0x0000|0|Zeile 17 |L| -5| 0|110| 22|R|0x0000|0|Festnetz"
    $asGUI_Element[18] = "Inputbox|750|400|100| 22|L|0x0000|0|Zeile 18 |L| -5| 0|110| 22|R|0x0000|0|Mobil-Nr."
    $asGUI_Element[19] = "Inputbox|750|425|100| 22|L|0x0000|0|Zeile 19 |L| -5| 0|110| 22|R|0x0000|0|E-Mail"
    $asGUI_Element[20] = "Inputbox|750|450|100| 22|L|0x0000|0|Zeile 20 |L| -5| 0|110| 22|R|0x0000|0|Status"
    $asGUI_Element[21] = "Inputbox|270| 10|250| 22|L|0x0000|0|Zeile 21 |L| 0| 0| 70| 22|R|0x0000|0|Suche:"
    $asGUI_Element[22] = "Groupbox| 20|310|500|300|L|0x0000|0|Adressdaten|R| 0| 0| 70| 22|L|0x0000|0|Adresse"
    $asGUI_Element[23] = "Editbox |895|400|217|160|L|0x0000|0|Memo |U| -5| 0| 70| 22|L|0x0000|0|Gesprächsnotiz"
    ; --- GUI-Parameter der Input-Boxen und deren Labels ------------------------------------------------------------/

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

    ;_ArrayDisplay($asGUI_Element, "Array-Inhalt") ; Debugausgabe (besserer Ersatz für MsgBox, um ein ganzes Array auf einen Schlag anzeigen zu lassen).

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

    ; --- Input-Boxen (und Labels) für Datenbankfelder --------------------------------------------------------------\
    Global $avGUI_Parameter[19] ;Anzahl der Parameter eines Parametersatzes.
    Global $sF_Obj
    Global $iX_Obj, $iY_Obj, $iW_Obj, $iH_Obj, $hE_Obj, $sT_Obj
    Global $sA_Lbl, $sA_LblTxt
    Global $iX_Lbl, $iY_Lbl, $iW_Lbl, $iH_Lbl, $hE_Lbl, $sT_Lbl
    Global $iStrgW

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

    For $iGUI_ElementNr = 0 to Ubound($asGUI_Element)-1 ;30 Zeilen
    ; --- Pro Schleifendurchlauf die Parameter je eines GUI-Elements auslesen --------------------------------\
    $avGUI_Parameter=Stringsplit($asGUI_Element[$iGUI_ElementNr], "|") ;Aufgesplittete Parameter
    ;MsgBox(0,"",$avGUI_Parametersatz[2])

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

    $sF_Obj = StringStripWS ($avGUI_Parameter[1], 3) ;Funktion des Objektes (von Leerzeichen links und Rechts befreit)

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

    $iX_Obj = $avGUI_Parameter[2] ;X-Position des Objektes
    $iY_Obj = $avGUI_Parameter[3] ;Y-Position des Objektes
    $iW_Obj = $avGUI_Parameter[4] ;Weite des Objektes
    $iH_Obj = $avGUI_Parameter[5] ;Höhe des Objektes
    $hE_Obj = $avGUI_Parameter[6] ;Erweiterte Parameter, siehe AutoIt Help: GUICtrlCreateLabel, bzw. GUI Control Styles
    $sT_Obj = $avGUI_Parameter[9] ;Textvorbelegung (wenn Inputbox)

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

    $sA_Lbl = $avGUI_Parameter[10] ;Positionsangabe, bezogen auf das Objekt: "L"=Links / "U"=Unten / "R"=Rechts / "O"=Oben.

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

    $iX_Lbl = $avGUI_Parameter[11] ; + $iX_Obj ;X-Position des Labels
    $iY_Lbl = $avGUI_Parameter[12] ;+ $iY_Obj ;Y-Position des Labels
    $iW_Lbl = $avGUI_Parameter[13] ;Weite des Labels
    $iH_Lbl = $avGUI_Parameter[14] ;Höhe des Labels
    $sA_LblTxt= $avGUI_Parameter[15] ;Ausrichtung des Labeltextes (linksbündig/rechtsbündig)
    $hE_Lbl = $avGUI_Parameter[16] ;Erweiterte Parameter, siehe AutoIt Help: GUICtrlCreateLabel, bzw. GUI Control Styles
    $sT_Lbl = $avGUI_Parameter[18] ;Text des Labels

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

    $iStrgW=Stringbreite($sT_Lbl) ;Breite des vordefinierten Label-Strings in Pixeln.
    ; --- Pro Schleifendurchlauf die Parameter je eines GUI-Elements auslesen --------------------------------/

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

    ; --- Positionen der Labels (in Bezug auf deren Inputboxen), sowie deren Textausrichtung festlegen -------\
    Select ;Label-Position (L/U/R/O) und Textausrichtung (L/R) des Labels
    Case $sA_Lbl="L" and $sA_LblTxt="L" ;LL - Labelposition (L)inks, Textausrichtung (L)inksbündig
    $iX_Lbl = $iX_Obj + $iX_Lbl - $iW_Lbl
    $iY_Lbl = $iY_Obj + $iY_Lbl

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

    Case $sA_Lbl="L" and $sA_LblTxt="R" ;LR - Labelposition (L)inks, Textausrichtung (R)echtsbündig
    $iX_Lbl = $iX_Obj + $iX_Lbl - $iW_Lbl ; + $iStrgW
    $hE_Lbl=BitOR($hE_Lbl, 0x0002)
    $iY_Lbl = $iY_Obj + $iY_Lbl

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

    Case $sA_Lbl="U" and $sA_LblTxt="L" ;UL - Labelposition (U)nten, Textausrichtung (L)inksbündig
    $iX_Lbl = $iX_Obj + $iX_Lbl
    $iY_Lbl = $iY_Obj + $iY_Lbl + $iH_Obj

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

    Case $sA_Lbl="U" and $sA_LblTxt="R" ;UR - Labelposition (U)nten, Textausrichtung (R)echtsbündig
    $iX_Lbl = $iX_Obj + $iX_Lbl + $iW_Obj - $iW_Lbl
    $hE_Lbl=BitOR($hE_Lbl, 0x0002)
    $iY_Lbl = $iY_Obj + $iY_Lbl + $iH_Lbl

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

    Case $sA_Lbl="R" and $sA_LblTxt="L" ;RL - Labelposition (R)echts, Textausrichtung (L)inksbündig
    $iX_Lbl = $iX_Obj + $iX_Lbl + $iW_Obj
    $iY_Lbl = $iY_Obj + $iY_Lbl

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

    Case $sA_Lbl="R" and $sA_LblTxt="R" ;RR - Labelposition (R)echts, Textausrichtung (R)echtsbündig
    $iX_Lbl = $iX_Obj + $iX_Lbl + $iW_Obj ;- $iW_Lbl
    $hE_Lbl=BitOR($hE_Lbl, 0x0002)
    $iY_Lbl = $iY_Obj + $iY_Lbl

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

    Case $sA_Lbl="O" and $sA_LblTxt="L" ;OL - Labelposition (O)ben, Textausrichtung (L)inksbündig
    $iX_Lbl = $iX_Obj + $iX_Lbl
    $iY_Lbl = $iY_Obj + $iY_Lbl - $iH_Lbl

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

    Case $sA_Lbl="O" and $sA_LblTxt="R" ;OR - Labelposition (O)ben, Textausrichtung (R)echtsbündig
    $iX_Lbl = $iX_Obj + $iX_Lbl ;+ $iW_Lbl
    $hE_Lbl=BitOR($hE_Lbl, 0x0002)
    $iY_Lbl = $iY_Obj + $iY_Lbl - $iH_Obj

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

    EndSelect
    ; --- Positionen der Labels (in Bezug auf deren Inputboxen), sowie deren Textausrichtung festlegen -------/

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

    if $sF_Obj="Inputbox" then
    ;if $GUIElement_Nr=1 Then ;Die erste Inputbox enthält die ID des Datensatzes. Daher auf nicht editierbar schalten.
    ;BitXOR $ES_READONLY
    ;EndIf
    $aHandleGUIElement[$iGUI_ElementNr] = GUICtrlCreateInput($sT_Obj, $iX_Obj, $iY_Obj, $iW_Obj, $iH_Obj, $hE_Obj, 0) ;Inputbox
    EndIf

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

    if $sF_Obj="Groupbox" then
    $aHandleGUIElement[$iGUI_ElementNr] = GUICtrlCreateGroup($sT_Obj, $iX_Obj, $iY_Obj, $iW_Obj, $iH_Obj)
    EndIf

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

    if $sF_Obj="Editbox" then
    $aHandleGUIElement[$iGUI_ElementNr] = GUICtrlCreateEdit($sT_Obj, $iX_Obj, $iY_Obj, $iW_Obj, $iH_Obj)
    EndIf

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

    ; --- Label erzeugen -----------------------------------------------------------------------------\
    $aCtrlLabel[$iGUI_ElementNr] = GUICtrlCreateLabel($sT_Lbl, $iX_Lbl, $iY_Lbl, $iW_Lbl, $iH_Lbl, $hE_Lbl, 0) ;Label, zugehörig zu obiger Inputbox.
    GUICtrlSetFont($aCtrlLabel[$iGUI_ElementNr], 12, 400, 0, "Arial")
    GUICtrlSetFont($aHandleGUIElement[$iGUI_ElementNr], 12, 400, 0, "Arial")
    ; --- Label erzeugen -----------------------------------------------------------------------------/

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

    Next
    ; --- Input-Boxen (und Labels) für Datenbankfelder --------------------------------------------------------------/
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")

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

    ; --- Information
    ;$aHandleGUIElement[$iDBFeldanzahl] = GUICtrlCreateEdit("Gesprächsnotiz", 895, 400, 217, 160)
    ;$aCtrlLabel[$iDBFeldanzahl] = GUICtrlCreateLabel($aHeader[$iDBFeldanzahl + 1], 895, 372, 100, 22)

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

    ; --- Button "Datensatz Update"
    $btnUpdate = GUICtrlCreateButton("DS Update", 895, 583, 105, 28)
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")

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

    ; --- Button "Datensatz löschen"
    $btnDelete = GUICtrlCreateButton("DS Löschen", 1010, 583, 105, 28)
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")

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

    ; --- Suche
    $cboSearch = GUICtrlCreateCombo("Suche im Feld:", 50, 8, 150, 25, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST))
    GUICtrlSetData(-1, $sListViewHeader)
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")

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

    $btnSearch = GUICtrlCreateButton("Suche starten", 570, 8, 110, 25)
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")

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

    ; --- Button "Datenbank laden"
    $btnDBladen = GUICtrlCreateButton("Suche beenden", 700, 8, 130, 25)
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")

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

    ; --- Button "Eingabefelder leeren"
    $btnClear = GUICtrlCreateButton("Eingabefelder leeren", 620, 583, 241, 28)
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")
    ; --- Buttons, Labels und Inputfelder erzeugen -----------------------------------------------------------------------/
    ; --- Main Area -----------------------------------------------------------------------------------------------------------/

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

    ; --- Horizontale, gestrichelte Linie erzeugen -------------------------------\
    Const $trR = _StringRepeat("-", 368)
    $lblBottomLine = GUICtrlCreateLabel($trR, 10, 615, 1110, 8)
    ; --- Horizontale, gestrichelte Linie erzeugen -------------------------------/

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

    ; --- Bottom Area ---------------------------------------------------------------------------------------------------------\
    ; --- Untere Inputfelder erzeugen --------------------------------------------\
    Global $aCtrllbl[3], $aCtrlipt[3], $aLblTxt[3] = ["Auftragsanzahl:", "Ges. Seitenzahl:", "Ges. Buch NP:"]
    For $l = 0 To 2
    $aCtrllbl[$l] = GUICtrlCreateLabel($aLblTxt[$l], 10 + ($l) * 260, 640, 120, 22)
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")
    $aCtrlipt[$l] = GUICtrlCreateInput($l, 140 + ($l) * 260, 638, 120, 26, 0x0002) ; $ES_RIGHT=0x0002
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")
    Next
    ; --- Untere Inputfelder erzeugen --------------------------------------------/

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

    ; --- Button "Datensatz kopieren" erzeugen -----------------------------------\
    $btnSave = GUICtrlCreateButton("DS kopieren", 1010, 635, 105, 28)
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")
    ; --- Button "Datensatz kopieren" erzeugen -----------------------------------/

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

    ; --- Button "Datenbank-Backup" erzeugen -------------------------------------\
    $btnBackUp = GUICtrlCreateButton("DB BackUp", 895, 635, 105, 28)
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")
    ; --- Button "Datenbank-Backup" erzeugen -------------------------------------/
    ; --- Bottom Area ---------------------------------------------------------------------------------------------------------/

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

    #EndRegion Bedienoberfläche zeichnen ###########################################################################################/

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

    #Region SQL starten & Datenbank in Listview laden (DB gegebenenfalls zuerst erzeugen) ##########################################\
    _SQLite_Startup(@ScriptDir & "\sqlite3.dll", False, 1) ; BugFix Idee, da DLL ja nicht mehr mitgeliefert wird
    If @error Then
    $sTmp = "SQLite.dll konnte nicht geladen werden!"
    MsgBox($MB_SYSTEMMODAL, "SQLite Error", $sTmp)
    Exit -1
    EndIf

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

    Local $bTabelleErzeugen = 0
    If Not FileExists($sDatenbankVollpfad) Then
    $bTabelleErzeugen = True
    EndIf

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

    Global $g_db_Database = _SQLite_Open($sDatenbankVollpfad) ;Datenbank öffnen. Falls noch nicht vorhanden, dann erzeugen & öffnen.
    If @error Then
    $sTmp = "Die Datenbank:" & @CRLF & $sDatenbankVollpfad & @CRLF & "konnte nicht geöffnet werden!"
    MsgBox($MB_SYSTEMMODAL, "SQLite Error", $sTmp)
    Exit -1
    EndIf

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

    If $bTabelleErzeugen = True Then
    ; --- Datenbank-Tabelle erzeugen-----------------------------------------------------------------------------------------\
    Global $sDBHeader = "CREATE TABLE IF NOT EXISTS Reparaturverwaltung(ID INTEGER PRIMARY KEY AUTOINCREMENT," _
    & "F01," _ ;Annahme
    & "F02," _ ;Abholung
    & "F03," _ ;Gerät
    & "F04," _ ;Schadenskürzel
    & "F05," _ ;Firma
    & "F06," _ ;Vorname
    & "F07," _ ;Nachname
    & "F08," _ ;Endpreis
    & "F09," _ ;Rechnungsnummer
    & "F10," _ ;Anzahlung
    & "F11," _ ;Leihteile
    & "F12," _ ;Voranschlag
    & "F13," _ ;Reklamationsdatum
    & "F14," _ ;Projektordner
    & "F15," _ ;Gesprächsnotiz
    & "F16," _ ;Reparaturbericht
    & "F17," _
    & "F18," _
    & "F19," _
    & "F20," _
    & "F21," _
    & "F22," _
    & "F23," _
    & "F24," _
    & "F25," _
    & "F26," _
    & "F27," _
    & "F28," _
    & "F29," _
    & "F30);"
    ; --- Datenbank-Tabelle erzeugen ----------------------------------------------------------------------------------------/

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

    ; --- Mehrere Beispiel-Datensätze erzeugen ------------------------------------------------------------------------------\
    _SQLite_Exec($g_db_Database, $sDBHeader)
    _SQLite_Exec(-1, "INSERT INTO Reparaturverwaltung VALUES(NULL,'16-03-22 11','16-03-22 18','Medion Akoya 731','Buchse defekt','','Herbert','Mustermann','100,00','576','20.00','USB-HDD-Gehäuse','100.00','','','','','','','','','','','','','','','','','','');")
    _SQLite_Exec(-1, "INSERT INTO Reparaturverwaltung VALUES(NULL,'16-03-21 12','16-03-22 11','HP dv7','Buchse defekt','RA Rechtsverdreh','Ede','Knastmann','100,00','1039','','','100.00','','','','','','','','','','','','','','','','','','');")
    _SQLite_Exec(-1, "INSERT INTO Reparaturverwaltung VALUES(NULL,'16-03-27 16','16-03-28 11','Lenovo 730','Scharnier lose','','Cornelia','Turteltaub','120,00','1038','100.00','','100.00','','','','','','','','','','','','','','','','','','');")
    _SQLite_Exec(-1, "INSERT INTO Reparaturverwaltung VALUES(NULL,'16-04-22 09','16-04-27 11','Lenovo 1100','Einschaltproblem','','Waltrude','von der Weide','80,00','1040','10.00','','100.00','','','','','','','','','','','','','','','','','','');")
    _SQLite_Exec(-1, "INSERT INTO Reparaturverwaltung VALUES(NULL,'16-06-22 15','16-06-29 11','Toshiba Satellite 50','Stabilitätsproblem','Schokofabrik ABC','Ali','Bahbah','47,50','413','10.00','Leihgerät 4','-','','','','','','','','','','','','','','','','','','');")
    _SQLite_Exec(-1, "INSERT INTO Reparaturverwaltung VALUES(NULL,'16-07-22 13','16-07-22 17','Sony Vaio MG3000','Grafikfehler','','','Megenstadter','22,50','-','22.50','','-','','','','','','','','','','','','','','','','','','');")
    _SQLite_Exec(-1, "INSERT INTO Reparaturverwaltung VALUES(NULL,'16-03-22 11','16-03-28 15','Lenovo AS200','Sturzschaden','Druckerei Müller','Willybald','Mustermann','100,00','-','','','100.00','','','','','','','','','','','','','','','','','','');")
    _SQLite_Exec(-1, "INSERT INTO Reparaturverwaltung VALUES(NULL,'16-01-22 12','16-03-23 15','Toshiba Satellite X20','Flüssigkeitsschaden','','Fridolin','Kaiserschmarrn','90,00','1041','','','100.00','','','','','','','','','','','','','','','','','','');")
    _SQLite_Exec(-1, "INSERT INTO Reparaturverwaltung VALUES(NULL,'15-03-22 11','15-04-01 12','MSI XC70S','Buchse defekt','???','','Maienbaum','0,00','-','','','0.00','','','','','','','','','','','','','','','','','','');")
    _SQLite_Exec(-1, "INSERT INTO Reparaturverwaltung VALUES(NULL,'16-03-22 16','16-03-23 10','HP HDX18','Flüssigkeitsschaden','Werbeagentur DeLuxe','Veronika','Glitterstrass','1050,79','1042','500.00','','1000.00','','','','','','','','','','','','','','','','','','');")
    _SQLite_Exec(-1, "INSERT INTO Reparaturverwaltung VALUES(NULL,'16-05-27 16','','Asus X738','Einschaltproblem','Druckerei Müller','Willybald','Mustermann','','','','','100,00','','','','','','','','','','','','','','','','','','');")
    ; --- Mehrere Beispiel-Datensätze erzeugen ------------------------------------------------------------------------------/
    EndIf

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

    _SQLite_CountRows('Reparaturverwaltung')
    #EndRegion SQL starten & Datenbank in Listview laden (DB gegebenenfalls zuerst erzeugen) #######################################/

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

    ; --- Statusbar am untersten Fensterrand ----------------------------------------------------------------------------------\
    Global $idStatusbar = _GUICtrlStatusBar_Create($FormKombiansicht)

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

    GUISetState(@SW_SHOW)
    ;_timeStatus() ; Funktion aufrufen sofortige einmalige Ausführung nach Programmstart
    AdlibRegister('_timeStatus', 1000) ; Start alle 1000 milisec.

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

    Global $idStatusbar_PartsWidth[4]
    $idStatusbar_PartsWidth[0]=700
    $idStatusbar_PartsWidth[1]=$idStatusbar_PartsWidth[0]+180
    $idStatusbar_PartsWidth[2]=$idStatusbar_PartsWidth[1]+150
    $idStatusbar_PartsWidth[3]=-1 ;$idStatusbar_PartsWidth[2]+200

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

    _GUICtrlStatusBar_SetParts($idStatusbar, $idStatusbar_PartsWidth) ;200, 400, 700, -1) ;$idStatusbar_PartsWidth)
    Global $sMausXY
    _GUICtrlStatusBar_SetText($idStatusbar, $sMausXY, 0)
    _GUICtrlStatusBar_SetText($idStatusbar, " _SQLite_LibVersion = " & _SQLite_LibVersion(), 1)

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

    _GUICtrlStatusBar_SetMinHeight($idStatusbar, 20) ;!!!
    ; --- Statusbar am untersten Fensterrand ----------------------------------------------------------------------------------/
    #Region Listview Füllen und Darstellungs-Einstellungen vornehmen ###############################################################\
    _ListViewFill() ;Listview füllen, mit den Datensätzen der (nun garantiert vorhandenen und geöffneten) Datenbank-Datei.

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

    _GUICtrlListView_HideColumn($Listview, 17)
    _GUICtrlListView_HideColumn($Listview, 18)
    _GUICtrlListView_HideColumn($Listview, 19)
    _GUICtrlListView_HideColumn($Listview, 20)
    _GUICtrlListView_HideColumn($Listview, 21)
    _GUICtrlListView_HideColumn($Listview, 22)
    _GUICtrlListView_HideColumn($Listview, 23)
    _GUICtrlListView_HideColumn($Listview, 24)
    _GUICtrlListView_HideColumn($Listview, 25)
    _GUICtrlListView_HideColumn($Listview, 26)
    _GUICtrlListView_HideColumn($Listview, 27)
    _GUICtrlListView_HideColumn($Listview, 28)
    _GUICtrlListView_HideColumn($Listview, 29)
    _GUICtrlListView_HideColumn($Listview, 30)
    #EndRegion Listview Füllen und Darstellungs-Einstellungen vornehmen ############################################################/

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

    #Region Hauptschleife ##########################################################################################################\
    $hGUI = $FormKombiansicht ;GUICreate('Drag & Drop Images Example', 541, 340, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_CLIPCHILDREN))
    Global Const $SC_DRAGMOVE = 0xF012
    Global $iMouseButtonLeft
    Global $aRect[4]
    AutoItSetOption ("MouseCoordMode", 2 ) ;Mauskoordinaten sollen sich auf den Bereich unterhalb der Menüleiste beziehen.

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

    ;do
    While True

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

    ; --- Mauskoordinaten erfassen und darstellen -------------------------------------\
    $sMausXY=MouseGetPos() ;GUIGetCursorInfo() ;Die Verwendung von MouseGetPos, statt GUIGetCursorInfo vermeidet Absturz wenn außerhalb des Fensters geklickt wird.
    _GUICtrlStatusBar_SetText($idStatusbar, $sMausXY[0] & " / " & $sMausXY[1], 0) ;!!!!!!!! Verursacht Absturz wenn Fenster Fokus verliert !!!!!!!
    ;_GUICtrlStatusBar_SetText($idStatusbar, "lala", 0) ;$sMausXY[0] & " / " & $sMausXY[1], 0) ;!!!!!!!! Verursacht den obigen Absturz nicht !!!!!!!
    ; --- Mauskoordinaten erfassen und darstellen -------------------------------------/

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

    Switch GUIGetMsg()

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

    Case -3
    _Exit()

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

    Case $ListView
    _GUICtrlListView_RegisterSortCallBack($ListView, false)
    _GUICtrlListView_SortItems($ListView, GUICtrlGetState($ListView))

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

    Case $btnSave
    _DsInsert()
    _ListViewFill()
    _iptClear()
    _SQLite_CountRows('Reparaturverwaltung')

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

    Case $btnDelete
    _DsDelete()
    _ListViewFill()
    _SQLite_CountRows('Reparaturverwaltung')

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

    Case $btnUpdate
    _DsUpdate()
    _ListViewFill()

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

    Case $btnSearch
    _ListViewFill("SELECT ROWID,* From Reparaturverwaltung WHERE " & GUICtrlRead($cboSearch) & " LIKE '" & GUICtrlRead($iptSearch) & "';")
    ; --- Obiges funktioniert derzeit nicht mehr, weil: -------------------------------\
    ; --> Query: SELECT ROWID,* From Reparaturverwaltung WHERE Annahme LIKE '0';
    ; --> Error: no such column: Annahme
    ; Problem sind die inzwischen abweichenden Namen der ListView Rows von den Datensatzfeldern
    ; --- Obiges funktioniert derzeit nicht mehr, weil: -------------------------------/

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

    Case $btnDBladen
    _ListViewFill()

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

    Case $btnClear
    _iptClear()

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

    Case $btnBackUp
    _DB_BackUp()

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

    Case $MenuItem
    _iptClear()
    _ListView2ipt()

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

    Case $MenuItemAExit
    _Exit()

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

    Case $MenuItemCProgramminfo
    msgbox(0, "", $sAbout)

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

    Case $MenuItemCHistory
    msgbox(0, "", $sHistory)

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

    Case $MenuItemOptionen
    Optionen()

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

    Case $GUI_EVENT_PRIMARYDOWN ;Test
    ;_SendMessage($aHandleGUIElement[4], $WM_SYSCOMMAND, $SC_DRAGMOVE, 0) ;Test
    ConsoleWrite("Linker Mausbutton gedrückt" & @CRLF)
    $iMouseButtonLeft = 1

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

    Case $GUI_EVENT_PRIMARYUP ;Test
    ;_SendMessage($aHandleGUIElement[4], $WM_SYSCOMMAND, $SC_DRAGMOVE, 0) ;Test
    ConsoleWrite("Linker Mausbutton losgel." & @CRLF)
    $iMouseButtonLeft = 0

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

    Case $GUI_EVENT_SECONDARYDOWN ;Test
    ;_SendMessage($aHandleGUIElement[4], $WM_SYSCOMMAND, $SC_DRAGMOVE, 0) ;Test
    ConsoleWrite("Rechtsklick" & @CRLF)

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

    EndSwitch

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

    ; --- Verhindern, dass sich während des Verschiebens ein anderes GUI-Element angesprochen fühlt -----\
    if $iMouseButtonLeft then ;$sMausXY[2] = 1 then
    $iDoItOnlyOnce += 1
    if $iDoItOnlyOnce > 2 Then ;Integer-Überlauf verhindern.
    $iDoItOnlyOnce =2
    EndIf
    Else
    $iDoItOnlyOnce = 0
    EndIf
    ; --- Verhindern, dass sich während des Verschiebens ein anderes GUI-Element angesprochen fühlt -----/

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

    if $bGUIRedesign=1 then ;Im Menü wurde der Eintrag zum Umgestalten des GUI aktiviert.
    GUI_Redesign()
    EndIf

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

    WEnd
    #EndRegion Hauptschleife #######################################################################################################/

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

    ; ### Functions ################################################################################################################\
    Func _timeStatus()
    Local $zeit = _DateTimeFormat(_NowCalc(), 5)
    _GUICtrlStatusBar_SetText($idStatusbar, " " & $asWDAYger[@WDAY - 1] & _DateTimeFormat(_NowCalc(), 2), 2)
    _GUICtrlStatusBar_SetText($idStatusbar, " Uhrzeit: " & $zeit, 3)
    EndFunc ;==>_timeStatus
    ; #############################################################################
    Func _ListViewFill($QLite = "SELECT ROWID,* FROM Reparaturverwaltung;")
    Local $hQuery, $aRow
    _GUICtrlListView_DeleteAllItems($ListView)
    ;~ _SQLite_Query(-1, "SELECT ROWID,* FROM Reparaturverwaltung;", $hQuery)
    _SQLite_Query(-1, $QLite, $hQuery)
    While _SQLite_FetchData($hQuery, $aRow, False, False) = $SQLITE_OK ; Read Out the next Row
    GUICtrlCreateListViewItem(_ArrayToString($aRow, '|', 1, 21), $ListView)
    GUICtrlSetBkColor(-1, 0xF0E68C) ; (0xF9F9F9) helles Grau (0xB9D1EA) helles blau (0xF0E68C)
    WEnd
    _SQLite_QueryFinalize($hQuery)
    _GUICtrlListView_RegisterSortCallBack($ListView) ; CallBack registrieren zum sortieren
    EndFunc ;==>_ListViewFill
    ; #############################################################################
    Func _DsDelete() ;Datensatz löschen.
    _SQLite_Exec(-1, "DELETE From Reparaturverwaltung WHERE ID = " & GUICtrlRead($aHandleGUIElement[0]) & ";")
    EndFunc ;==>_DsDelete
    ; #############################################################################
    Func _DsUpdate() ;Datensatz updaten
    _SQLite_Exec(-1, "UPDATE Reparaturverwaltung SET " _
    & "F01 = '" & GUICtrlRead($aHandleGUIElement[1]) & "'," _
    & "F02 = '" & GUICtrlRead($aHandleGUIElement[2]) & "'," _
    & "F03 = '" & GUICtrlRead($aHandleGUIElement[3]) & "'," _
    & "F04 = '" & GUICtrlRead($aHandleGUIElement[4]) & "'," _
    & "F05 = '" & GUICtrlRead($aHandleGUIElement[5]) & "'," _
    & "F06 = '" & GUICtrlRead($aHandleGUIElement[6]) & "'," _
    & "F07 = '" & GUICtrlRead($aHandleGUIElement[7]) & "'," _
    & "F08 = '" & GUICtrlRead($aHandleGUIElement[8]) & "'," _
    & "F09 = '" & GUICtrlRead($aHandleGUIElement[9]) & "'," _
    & "F10 = '" & GUICtrlRead($aHandleGUIElement[10]) & "'," _
    & "F11 = '" & GUICtrlRead($aHandleGUIElement[11]) & "'," _
    & "F12 = '" & GUICtrlRead($aHandleGUIElement[12]) & "'," _
    & "F13 = '" & GUICtrlRead($aHandleGUIElement[13]) & "'," _
    & "F15 = '" & GUICtrlRead($aHandleGUIElement[14]) & "'," _
    & "F15 = '" & GUICtrlRead($aHandleGUIElement[15]) & "'," _
    & "F16 = '" & GUICtrlRead($aHandleGUIElement[16]) & "'," _
    & "F17 = '" & GUICtrlRead($aHandleGUIElement[17]) & "'," _
    & "F18 = '" & GUICtrlRead($aHandleGUIElement[18]) & "'," _
    & "F19 = '" & GUICtrlRead($aHandleGUIElement[19]) & "'," _
    & "F20 = '" & GUICtrlRead($aHandleGUIElement[20]) & "'," _
    & "F21 = '" & GUICtrlRead($aHandleGUIElement[21]) & "'," _
    & "F22 = '" & GUICtrlRead($aHandleGUIElement[22]) & "'," _
    & "F23 = '" & GUICtrlRead($aHandleGUIElement[23]) & "'," _
    & "F24 = '" & GUICtrlRead($aHandleGUIElement[24]) & "'," _
    & "F25 = '" & GUICtrlRead($aHandleGUIElement[25]) & "'," _
    & "F26 = '" & GUICtrlRead($aHandleGUIElement[26]) & "'," _
    & "F27 = '" & GUICtrlRead($aHandleGUIElement[27]) & "'," _
    & "F28 = '" & GUICtrlRead($aHandleGUIElement[28]) & "'," _
    & "F29 = '" & GUICtrlRead($aHandleGUIElement[29]) & "'," _
    & "F30 = '" & GUICtrlRead($aHandleGUIElement[30]) & "'" _
    & "WHERE ID = " & GUICtrlRead($aHandleGUIElement[0]) & ";")
    EndFunc ;==>_DsUpdate
    ; #############################################################################
    Func _DsInsert() ;Neuen Datensatz hinzufügen.
    _SQLite_Exec(-1, "INSERT INTO Reparaturverwaltung VALUES(NULL, '" _
    & GUICtrlRead($aHandleGUIElement[1]) & "','" _
    & GUICtrlRead($aHandleGUIElement[2]) & "','" _
    & GUICtrlRead($aHandleGUIElement[3]) & "','" _
    & GUICtrlRead($aHandleGUIElement[4]) & "','" _
    & GUICtrlRead($aHandleGUIElement[5]) & "','" _
    & GUICtrlRead($aHandleGUIElement[6]) & "','" _
    & GUICtrlRead($aHandleGUIElement[7]) & "','" _
    & GUICtrlRead($aHandleGUIElement[8]) & "','" _
    & GUICtrlRead($aHandleGUIElement[9]) & "','" _
    & GUICtrlRead($aHandleGUIElement[10]) & "','" _
    & GUICtrlRead($aHandleGUIElement[11]) & "','" _
    & GUICtrlRead($aHandleGUIElement[12]) & "','" _
    & GUICtrlRead($aHandleGUIElement[13]) & "','" _
    & GUICtrlRead($aHandleGUIElement[14]) & "','" _
    & GUICtrlRead($aHandleGUIElement[15]) & "','" _
    & GUICtrlRead($aHandleGUIElement[16]) & "','" _
    & GUICtrlRead($aHandleGUIElement[17]) & "','" _
    & GUICtrlRead($aHandleGUIElement[18]) & "','" _
    & GUICtrlRead($aHandleGUIElement[19]) & "','" _
    & GUICtrlRead($aHandleGUIElement[20]) & "','" _
    & GUICtrlRead($aHandleGUIElement[21]) & "','" _
    & GUICtrlRead($aHandleGUIElement[22]) & "','" _
    & GUICtrlRead($aHandleGUIElement[23]) & "','" _
    & GUICtrlRead($aHandleGUIElement[24]) & "','" _
    & GUICtrlRead($aHandleGUIElement[25]) & "','" _
    & GUICtrlRead($aHandleGUIElement[26]) & "','" _
    & GUICtrlRead($aHandleGUIElement[27]) & "','" _
    & GUICtrlRead($aHandleGUIElement[28]) & "','" _
    & GUICtrlRead($aHandleGUIElement[29]) & "','" _
    & GUICtrlRead($aHandleGUIElement[30]) & "');")
    EndFunc ;==>_DsInsert
    ; #############################################################################
    Func _ListView2ipt()
    ;~ MsgBox(0, "Information", "Selected Mark: " & _GUICtrlListView_GetSelectionMark($ListView))
    Local $electionMark = _GUICtrlListView_GetSelectionMark($ListView)
    If $electionMark > -1 Then
    Local $aLVitem = _GUICtrlListView_GetItemTextArray($ListView, $electionMark)
    For $i = 1 To $aLVitem[0]
    ;~ MsgBox(0, "Information", "ItemTextArray: " & $aIpt[$i-1] & " " & $aLVitem[$i])
    GUICtrlSetData($aHandleGUIElement[$i - 1], $aLVitem[$i])
    Next
    EndIf
    EndFunc ;==>_ListView2ipt
    ; #############################################################################
    Func _iptClear()
    For $i = 0 To 30
    GUICtrlSetData($aHandleGUIElement[$i], "")
    Next
    EndFunc ;==>_iptClear
    ; #############################################################################
    ;==========================================================================
    ; Function Name....: _SQLite_CountRows
    ; Description......: Ermittelt die Anzahl von Datensätzen für eine Tabelle
    ; Parameter(s).....: $_sTable Tabellenname
    ; Requirement(s)...: Eine mit _SQLite_Open() geöffnete DB
    ; .................: #include <SQLite.au3>
    ; Return Value(s)..: Erfolg: Anzahl der Datensätze
    ; .................: Fehler: -1 @error = 1, @extended = SQLite-@error
    ; Author(s)........: BugFix ([email='bugfix@autoit.de'][/email])
    ;==========================================================================
    Func _SQLite_CountRows($_sTable)
    Local $hQuery, $aQuery, $iRet = 0, $iErr
    If $SQLITE_OK <> _SQLite_Query(-1, "SELECT count(*) FROM " & $_sTable & ";", $hQuery) Then
    $iErr = _SQLite_ErrCode()
    _SQLite_QueryFinalize($hQuery)
    Return SetError(1, $iErr, -1)
    EndIf
    While _SQLite_FetchData($hQuery, $aQuery) = $SQLITE_OK
    $iRet = $aQuery[0]
    WEnd
    _SQLite_QueryFinalize($hQuery)
    ;MsgBox(0, "", $iRet)
    ;~ Return $iRet
    GUICtrlSetData($aCtrlipt[0], $iRet)
    EndFunc ;==>_SQLite_CountRows
    ; #############################################################################
    Func _DB_BackUp()
    Local $BackUpFolder = @ScriptDir & "\_BackUps"
    If Not FileExists($BackUpFolder) Then DirCreate($BackUpFolder)
    Local $hFileOpen = FileOpen($BackUpFolder & "\" & @YEAR & "-" & @MON & "-" & @MDAY & "_BuchVw.db.txt", 2)
    If $hFileOpen = -1 Then Exit MsgBox(0, "Fehler", "Die Datei konnte nicht geöffnet werden.")

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

    Local $aResult, $iRows, $iColumns
    Local $iRval = _SQLite_GetTable2d(-1, "SELECT * FROM Reparaturverwaltung;", $aResult, $iRows, $iColumns) ;Variablen doppelt deklariert (siehe Vorzeile).

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

    FileWriteLine($hFileOpen, $sListViewHeader)

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

    For $iR = 1 To $iRows
    $sText = ""
    For $iC = 0 To $iColumns - 1
    $sText &= $aResult[$iR][$iC]
    If $iC < $iColumns - 1 Then $sText &= "|"
    Next
    FileWriteLine($hFileOpen, $sText)
    Next
    FileClose($hFileOpen)
    MsgBox(64, "Info", "DB BackUp ist fertig !", 3)
    EndFunc ;==>_DB_BackUp
    ; #############################################################################
    Func Stringbreite($sT_Lbl)
    ; Ermittelt die Breite des Strings in Pixeln.
    ; Basiert auf folgender Quelle:
    ; TextMeter
    ; Dank an den User "BugFix"!
    Local $nText = $sT_Lbl
    Local $aFont[8] = [8,0,'Courier New',10,400,0,0,0]
    Local $gui

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

    If $nText = '' Then Return
    ;_GDIPlus_Startup()
    Local $hFormat = _GDIPlus_StringFormatCreate(0)
    Local $hFamily = _GDIPlus_FontFamilyCreate($aFont[2])
    Local $hFont = _GDIPlus_FontCreate($hFamily, $aFont[3], $aFont[1], 3)
    Local $tLayout = _GDIPlus_RectFCreate(15, 171, 0, 0)
    Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($gui)
    Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $nText, $hFont, $tLayout, $hFormat)
    Local $iWidth = Ceiling(DllStructGetData($aInfo[0], "Width"))
    ;Local $iHeight = Ceiling(DllStructGetData($aInfo[0], "Height"))
    ;_GDIPlus_StringFormatDispose($hFormat)
    ;_GDIPlus_FontDispose($hFont)
    ;_GDIPlus_FontFamilyDispose($hFamily)
    ;_GDIPlus_GraphicsDispose($hGraphic)
    ;_GDIPlus_ShutDown()
    ;GUICtrlSetData($inHeight, $iHeight)
    ;GUICtrlSetData($inWidth, $iWidth)
    Return $iWidth
    ;MsgBox(0, "", $iWidth)
    EndFunc
    ; #############################################################################
    Func Optionen()
    ;MsgBox(0, "Optionen", "Hallo")
    ;$aHandleGUIElement[$iGUI_ElementNr]
    $bGUIRedesign = BitXOR($bGUIRedesign, 0x1) ;Binärwert von $bGUIRedesign toggeln.
    if $bGUIRedesign=1 then ;Im Menü wurde der Eintrag zum Umgestalten des GUI aktiviert.
    MsgBox(0, "", "" _
    & "Sie können nun einzelne Bedienelemente" _
    & @CRLF & "mit der Maus verschieben." _
    & @CRLF & "Zum Beenden diesen Menüeintrag erneut anwählen!")
    EndIf
    EndFunc
    ; #############################################################################
    FUNC GUI_Redesign()
    ; Ermöglicht es, ein einzelnes GUI-Element mit der Maus zu verschieben.

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

    $sUserMessageNew=""

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

    ; --- Ermitteln, über welchem GUI-Element der Hauszeiger hoovert. ---------------\
    ;if $iDoItOnlyOnce = 1 then
    For $iGUI_ElementNr = 0 to Ubound($asGUI_Element)-1
    $avGUI_Parameter=Stringsplit($asGUI_Element[$iGUI_ElementNr], "|") ;Aufgesplittete Parameter
    ;$aRect = _GUICtrlHeader_GetItemRect($aHandleGUIElement[$iGUI_ElementNr], 3) ;$iGUI_ElementNr) ;test
    ;if $aHandleGUIElement[$iGUI_ElementNr]
    if $sMausXY[0] > $avGUI_Parameter[2] and $sMausXY[0] < ($avGUI_Parameter[2]+$avGUI_Parameter[4]) and $sMausXY[1] > $avGUI_Parameter[3] and $sMausXY[1] < ($avGUI_Parameter[3]+$avGUI_Parameter[5])then
    ;msgbox(0, "", "Rechteck: " & $aRect[0])
    ;if $sMausXY[0] > $aRect[0] and $sMausXY[0] < $aRect[2] then ; and $sMausXY[1] > $aRect[1] and $sMausXY[1] < ($aRect[1]+$aRect[3])then
    $sUserMessageNew="Feld-Nr. " & $iGUI_ElementNr
    ;_GDIPlus_GraphicsDrawLine($hGraphic, $center + $x1, $center + $y1, $center + $x2, $center + $y2, $hPen) ;quadrat
    ExitLoop
    EndIf
    Next
    ;EndIf
    ; --- Ermitteln, über welchem GUI-Element der Hauszeiger hoovert. ---------------/

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

    ;GUICtrlSetPos($aHandleGUIElement[1], 20, 20)

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

    if $sUserMessageNew <> $sUserMessageOld then
    _GUICtrlStatusBar_SetText($idStatusbar, $sUserMessageNew, 1)
    $sUserMessageOld=$sUserMessageNew
    EndIf

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

    if $iMouseButtonLeft then ;$sMausXY[2] = 1 then
    GUICtrlSetPos($aHandleGUIElement[$iGUI_ElementNr], $sMausXY[0], $sMausXY[1])
    ;GUICtrlSetFont($aHandleGUIElement[$iGUI_ElementNr], 12, 400, 0, "Arial")
    ;BitXOR $SS_SUNKEN
    EndIf

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

    ; --- test ----
    ;Switch GUIGetMsg()
    ; Case $GUI_EVENT_PRIMARYDOWN
    ; _SendMessage($aHandleGUIElement[4], $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
    ;Case $ribbonexit, -3
    ;Exit
    ;EndSwitch
    ; --- test ---

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

    EndFunc ;GUI_Redesign
    ; #############################################################################
    Func _Exit() ;Datenbank schließen und Programmende.
    _GUICtrlListView_UnRegisterSortCallBack($ListView)
    _SQLite_Close($g_db_Database)
    _SQLite_Shutdown()
    _GDIPlus_ShutDown()
    Exit
    EndFunc ;==>_Exit
    ; ### Functions ################################################################################################################/

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

    ;$maus_x = -(MouseGetPos(0) - $center)
    ;$maus_y = (MouseGetPos(1) - $center)
    ;_GDIPlus_GraphicsDrawLine($hGraphic, $center + $x1, $center + $y1, $center + $x2, $center + $y2, $hPen) ;quadrat
    ; Local $mpos = GUIGetCursorInfo() ;Mauskoordinaten relativ zum Fenster.

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

    Ich code, also bin ich!

    Einmal editiert, zuletzt von Code-Jack (7. Juni 2016 um 22:45) aus folgendem Grund: Fehler in den Code-Tags korrigiert. Und statt "ListBox" musste es "InputBox" heißen.

  • kannst du bitte dein Problem in einem Minimalscript reproduzieren und posten, also nur das wesentliche ohne anderes Gedöhns außenrum.

    Ich han zwar solche Experimente auch schon gemacht aber außer Darstellungsfehlern während des Drag'ens ist mir nichts aufgefallen.

  • Eingedampft auf 237 Zeilen:

    Ich code, also bin ich!

    Einmal editiert, zuletzt von Code-Jack (8. Juni 2016 um 00:24) aus folgendem Grund: Jetzt in Code-Tags, statt Spoiler- und AutoIt-Tags.

  • ich hatte eigentlich an noch etwas kompakteres gedacht etwa wie dies:

    da dein Skript imho den Fehler durch die schlecht implementierte Draging-Methode hat und ich auch von obigem Konzept überzeugt bin solltest du dieses Konzept erweitern. Die Hürde in Zeile 49 (Beschränkung auf 9 Controls) sollte über StringRegExpReplace lösbar sein. Dann bleibt nur noch die Hürde wie man den Style eines Controls ermittelt, dies ist nur nötig wenn der Anwender selbst noch neue Controls mit Style hinzufügen können soll.
    Alles andere ist dann imho Fleißarbeit.

  • Vielen Dank, autoBert!

    ControlGetPos war der entscheidende Hinweis, der mir fehlte.
    Trotz viieel RTFM war mir der entgangen, habe immer woanders gesucht.

    Ich habe diesen einen Befehl in meinen Code eingeflochten und kann nun wunderbar sämtliche Controls (nicht nur 9) mit der Maus verschieben.
    Es gibt nur noch etwas Optimierungsbedarf bezüglich der Geschwindigkeit, aber das bekomme ich selbst hin.

    Wenn ich den Code etwas aufgeräumt (und um 'n Biserle Schnickschnack ergänzt) habe, stelle ich meine Lösung hier ein.

    Nochmals vielen Dank!

    Ich code, also bin ich!

  • Ich hatte ja versprochen, meine Lösung hier einzustellen.
    Der Einfachheit halber poste ich kein kastriertes Beispiel, sondern den aktuellen Stand (V0.29) meines kompletten Programmes.
    Bei Gelegenheit muss ich die Variablen sinnvoller benennen, aber die Umgestaltung der GUI funktioniert richtig schön (man beachte die angehefteten Labels)!

    Derzeit ist die Umgestaltung noch auf das Verschieben von (den meisten) InputBoxen, sowie MemoBoxen und GroupBoxen beschränkt.

    Laden/Speichern der GUI-Parameter in eine (wählbare) Ini-Datei kommt dann als Nächstes ...

    Ich code, also bin ich!