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
; output.code.page=65001 ;Deutsche Umlaute ermöglichen. Klappt dennoch nur manchmal ...
#Region Header #################################################################################################################\
; Erstellt mit AutoIt-Version v3.3.14.2
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"
; --- 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 -----------------------------------------------------------------------------/
; --- 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 -------------------------------------------------------------------------------------------------------------/
; --- 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 ---------------------------------------------------------------------------------------------------/
#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
#include <GDIPlus.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#Include <Misc.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
_GDIPlus_Startup()
#EndRegion Header ##############################################################################################################/
#Region Constanten & Variablen deklarieren und belegen #########################################################################\
; --- Globale Constanten deklarieren --------------------------------------------------------------------------------------\
Global Const $asWDAYger[7] = ["Sonntag, ", "Montag, ", "Dienstag, ", "Mittwoch, ", "Donnerstag, ", "Freitag, ", "Samstag, "]
; --- Globale Constanten deklarieren --------------------------------------------------------------------------------------/
; --- 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
Opt("MouseCoordMode", 0)
Global $iPressed = 0, $iLastCtrlID = -1
; --- Globale Variablen deklarieren ---------------------------------------------------------------------------------------/
; ---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 ######################################################################/
#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)
; --- Menüzweig 1 ------------------------------------------------------------\
Global $MenuA = GUICtrlCreateMenu("Datei")
Global $MenuItemAExit = GUICtrlCreateMenuItem("Schließen", $MenuA)
; --- Menüzweig 1 ------------------------------------------------------------/
; --- Menüzweig 2 ------------------------------------------------------------\
Global $MenuB = GUICtrlCreateMenu("Einstellungen")
Global $MenuItemOptionen = GUICtrlCreateMenuItem("Maske umgestalten", $MenuB)
; --- Menüzweig 2 ------------------------------------------------------------/
; --- 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-----------------------------------------------------------/
; --- 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 ----------------------------------------------------------/
; --- 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 --------------------------------------------------------/
; --- 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 ----------------------------------------------------------------/
; --- 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 ----------------/
$ContextMenu = GUICtrlCreateContextMenu($ListView)
$MenuItem = GUICtrlCreateMenuItem("Datensatz bearbeiten", $ContextMenu)
; --- Liestview aufbauen --------------------------------------------------------------------------------------------------/
; --- 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
; --- 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 ------------------------------------------------------------/
;_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
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])
$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)
$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
$iStrgW=Stringbreite($sT_Lbl) ;Breite des vordefinierten Label-Strings in Pixeln.
; --- Pro Schleifendurchlauf die Parameter je eines GUI-Elements auslesen --------------------------------/
; --- 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
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
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
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
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
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
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
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
EndSelect
; --- Positionen der Labels (in Bezug auf deren Inputboxen), sowie deren Textausrichtung festlegen -------/
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
if $sF_Obj="Groupbox" then
$aHandleGUIElement[$iGUI_ElementNr] = GUICtrlCreateGroup($sT_Obj, $iX_Obj, $iY_Obj, $iW_Obj, $iH_Obj)
EndIf
if $sF_Obj="Editbox" then
$aHandleGUIElement[$iGUI_ElementNr] = GUICtrlCreateEdit($sT_Obj, $iX_Obj, $iY_Obj, $iW_Obj, $iH_Obj)
EndIf
; --- 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 -----------------------------------------------------------------------------/
Next
; --- Input-Boxen (und Labels) für Datenbankfelder --------------------------------------------------------------/
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
; --- Information
;$aHandleGUIElement[$iDBFeldanzahl] = GUICtrlCreateEdit("Gesprächsnotiz", 895, 400, 217, 160)
;$aCtrlLabel[$iDBFeldanzahl] = GUICtrlCreateLabel($aHeader[$iDBFeldanzahl + 1], 895, 372, 100, 22)
; --- Button "Datensatz Update"
$btnUpdate = GUICtrlCreateButton("DS Update", 895, 583, 105, 28)
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
; --- Button "Datensatz löschen"
$btnDelete = GUICtrlCreateButton("DS Löschen", 1010, 583, 105, 28)
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
; --- 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")
$btnSearch = GUICtrlCreateButton("Suche starten", 570, 8, 110, 25)
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
; --- Button "Datenbank laden"
$btnDBladen = GUICtrlCreateButton("Suche beenden", 700, 8, 130, 25)
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
; --- Button "Eingabefelder leeren"
$btnClear = GUICtrlCreateButton("Eingabefelder leeren", 620, 583, 241, 28)
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
; --- Buttons, Labels und Inputfelder erzeugen -----------------------------------------------------------------------/
; --- Main Area -----------------------------------------------------------------------------------------------------------/
; --- Horizontale, gestrichelte Linie erzeugen -------------------------------\
Const $trR = _StringRepeat("-", 368)
$lblBottomLine = GUICtrlCreateLabel($trR, 10, 615, 1110,
; --- Horizontale, gestrichelte Linie erzeugen -------------------------------/
; --- 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 --------------------------------------------/
; --- Button "Datensatz kopieren" erzeugen -----------------------------------\
$btnSave = GUICtrlCreateButton("DS kopieren", 1010, 635, 105, 28)
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
; --- Button "Datensatz kopieren" erzeugen -----------------------------------/
; --- Button "Datenbank-Backup" erzeugen -------------------------------------\
$btnBackUp = GUICtrlCreateButton("DB BackUp", 895, 635, 105, 28)
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
; --- Button "Datenbank-Backup" erzeugen -------------------------------------/
; --- Bottom Area ---------------------------------------------------------------------------------------------------------/
#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
Local $bTabelleErzeugen = 0
If Not FileExists($sDatenbankVollpfad) Then
$bTabelleErzeugen = True
EndIf
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
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 ----------------------------------------------------------------------------------------/
; --- 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
_SQLite_CountRows('Reparaturverwaltung')
#EndRegion SQL starten & Datenbank in Listview laden (DB gegebenenfalls zuerst erzeugen) #######################################/
; --- Statusbar am untersten Fensterrand ----------------------------------------------------------------------------------\
Global $idStatusbar = _GUICtrlStatusBar_Create($FormKombiansicht)
GUISetState(@SW_SHOW)
;_timeStatus() ; Funktion aufrufen sofortige einmalige Ausführung nach Programmstart
AdlibRegister('_timeStatus', 1000) ; Start alle 1000 milisec.
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
_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)
_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.
_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 ############################################################/
#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.
;do
While True
; --- 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 -------------------------------------/
Switch GUIGetMsg()
[/autoit] [autoit][/autoit] [autoit]Case -3
_Exit()
Case $ListView
_GUICtrlListView_RegisterSortCallBack($ListView, false)
_GUICtrlListView_SortItems($ListView, GUICtrlGetState($ListView))
Case $btnSave
_DsInsert()
_ListViewFill()
_iptClear()
_SQLite_CountRows('Reparaturverwaltung')
Case $btnDelete
_DsDelete()
_ListViewFill()
_SQLite_CountRows('Reparaturverwaltung')
Case $btnUpdate
_DsUpdate()
_ListViewFill()
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: -------------------------------/
Case $btnDBladen
_ListViewFill()
Case $btnClear
_iptClear()
Case $btnBackUp
_DB_BackUp()
Case $MenuItem
_iptClear()
_ListView2ipt()
Case $MenuItemAExit
_Exit()
Case $MenuItemCProgramminfo
msgbox(0, "", $sAbout)
Case $MenuItemCHistory
msgbox(0, "", $sHistory)
Case $MenuItemOptionen
Optionen()
Case $GUI_EVENT_PRIMARYDOWN ;Test
;_SendMessage($aHandleGUIElement[4], $WM_SYSCOMMAND, $SC_DRAGMOVE, 0) ;Test
ConsoleWrite("Linker Mausbutton gedrückt" & @CRLF)
$iMouseButtonLeft = 1
Case $GUI_EVENT_PRIMARYUP ;Test
;_SendMessage($aHandleGUIElement[4], $WM_SYSCOMMAND, $SC_DRAGMOVE, 0) ;Test
ConsoleWrite("Linker Mausbutton losgel." & @CRLF)
$iMouseButtonLeft = 0
Case $GUI_EVENT_SECONDARYDOWN ;Test
;_SendMessage($aHandleGUIElement[4], $WM_SYSCOMMAND, $SC_DRAGMOVE, 0) ;Test
ConsoleWrite("Rechtsklick" & @CRLF)
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 -----/
if $bGUIRedesign=1 then ;Im Menü wurde der Eintrag zum Umgestalten des GUI aktiviert.
GUI_Redesign()
EndIf
WEnd
#EndRegion Hauptschleife #######################################################################################################/
; ### 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.")
Local $aResult, $iRows, $iColumns
Local $iRval = _SQLite_GetTable2d(-1, "SELECT * FROM Reparaturverwaltung;", $aResult, $iRows, $iColumns) ;Variablen doppelt deklariert (siehe Vorzeile).
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
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.
$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. ---------------/
;GUICtrlSetPos($aHandleGUIElement[1], 20, 20)
[/autoit] [autoit][/autoit] [autoit]if $sUserMessageNew <> $sUserMessageOld then
_GUICtrlStatusBar_SetText($idStatusbar, $sUserMessageNew, 1)
$sUserMessageOld=$sUserMessageNew
EndIf
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
; --- test ----
;Switch GUIGetMsg()
; Case $GUI_EVENT_PRIMARYDOWN
; _SendMessage($aHandleGUIElement[4], $WM_SYSCOMMAND, $SC_DRAGMOVE, 0)
;Case $ribbonexit, -3
;Exit
;EndSwitch
; --- test ---
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 ################################################################################################################/
;$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.