MultiDlg #
Der MultiDlg ist ein universeller Eingabedialog mit vertikalem Property-Grid. Er ermöglicht die Abfrage beliebig vieler Felder unterschiedlicher Typen (Text, Zahlen, Datum, Combos, Farben, Bilder u.v.m.) in einem einzigen Dialog. Felder können in Kategorien gruppiert werden. Der Dialog unterstützt Drucken, Excel-Export und eine integrierte HTML-Hilfe.
Der MultiDlg ist komplett unabhängig von der Datenbankstruktur. Er kann bestehende Datenbankfelder in anderer Sichtweise anzeigen oder eigene Zusatzfelder aus getrennten Tabellen editieren. Über das Dataset-Objekt lässt sich die Maske mit dem am Bildschirm angezeigten Datensatz synchronisieren (z.B. über Dataset.RefreshCurrent nach dem Schließen des Dialogs).
Der MultiDlg steht auch im Berichts-Designer in Pascal-Script zur Verfügung.
Set Dialog = Client.CreateDialog("Eulanda.MultiDlg", "MeineInstanz")
var Dialog = Client.CreateDialog("Eulanda.MultiDlg", "MeineInstanz");
Der zweite Parameter (Instance) steuert die Speicherung des Fensterzustands. Dialoge mit unterschiedlichen Instanznamen merken sich Position und Spaltenbreiten getrennt.
Schnelleinstieg #
Option Explicit
Dim Dialog
Set Dialog = Client.CreateDialog("Eulanda.MultiDlg", "")
With Dialog
.Title = "Kundendaten"
.SubTitle = "Bitte die Daten eingeben"
.IconUrl = "folder"
.GridLines = 3 ' eulGridLinesBoth
.AddField "Vorname", "String", "Max", ""
.AddField "Nachname", "String", "Mustermann", ""
.AddField "Alter", "Integer", 42, ""
.AddField "Aktiv", "Boolean", True, ""
If .Execute Then
MsgBox "Vorname: " & .Values("Vorname") & vbCrLf & _
"Nachname: " & .Values("Nachname") & vbCrLf & _
"Alter: " & CStr(.Values("Alter"))
End If
End With
Set Dialog = Nothing
Übersicht #
Eigenschaften #
| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
Title | String | Titel im Kopfbereich (groß, fett) | |
SubTitle | String | Untertitel im Kopfbereich | |
Caption | String | "Eingabedialog" | Fenstertitel in der Titelleiste |
IconUrl | String | Symbol im Kopfbereich (z.B. "folder", "gearwheel") | |
GridLines | Integer | 0 | Gitterlinien (siehe Konstanten) |
Height | Integer | auto | Dialoghöhe in Zeilen (je 18 Pixel) |
Help | String | HTML-Hilfe oder URL im unteren Bereich | |
HtmlHelp | String | Alias für Help | |
HtmlHelpHeight | Integer | 0 | Höhe des Hilfebereichs in Pixeln |
ExplorerStyle | Boolean | False | Explorer-Stil für Kategorien |
DotNetStyle | Boolean | False | DotNet-Darstellung |
FlowStyle | Boolean | False | Band-Layout (mehrere Spalten) |
MajorVersion | Integer | 2 | Hauptversion (nur lesen) |
MinorVersion | Integer | 3 | Nebenversion (nur lesen) |
DeletePressed | Boolean | False | True wenn Löschen gedrückt wurde (nur lesen) |
Button-Eigenschaften #
| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
OkVisible | Boolean | True | OK-Button anzeigen |
OkCaption | String | "Übernehmen" | Beschriftung OK-Button |
CancelVisible | Boolean | True | Abbrechen-Button anzeigen |
CancelCaption | String | "Verwerfen" | Beschriftung Abbrechen-Button |
DeleteVisible | Boolean | False | Löschen-Button anzeigen |
DeleteCaption | String | "Löschen" | Beschriftung Löschen-Button |
PrintVisible | Boolean | False | Drucken-Button anzeigen |
PrintCaption | String | "Drucken" | Beschriftung Drucken-Button |
PrintPreviewVisible | Boolean | False | Vorschau im Kontextmenü |
PrintPreviewCaption | String | "Vorschau" | Beschriftung Vorschau |
ExportVisible | Boolean | False | Export-Button anzeigen |
ExportCaption | String | "Exportieren" | Beschriftung Export-Button |
Druck- und Export-Eigenschaften #
| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
ReportTitle | String | (= Caption) | Titel im Druckbericht |
PrintJobTitle | String | (= Caption) | Name des Druckauftrags |
ExportFileName | String | Desktop + Caption + .xls | Standard-Dateiname für Excel-Export |
UserNameVisible | Boolean | False | Benutzername im Druckkopf anzeigen |
DateVisible | Boolean | True | Datum im Druckkopf anzeigen |
PageNoVisible | Boolean | True | Seitenzahlen im Druckfuß anzeigen |
Methoden #
| Methode | Rückgabe | Beschreibung |
|---|---|---|
AddCategory(Caption) | – | Kategorie (Abschnitt) hinzufügen |
AddField(Name, Typ, Default, Hint) | – | Eingabefeld hinzufügen |
AddFieldItem(Name, Item) | – | Eintrag zu Combo/Radio hinzufügen |
SetOption(Name, Option, Wert) | – | Feldoption setzen |
SetValue(Name, Wert) | – | Feldwert setzen |
Values(Name) | Variant | Feldwert lesen |
SetHints(Name, Text) | – | Tooltip setzen |
Hints(Name) | String | Tooltip lesen |
Execute | Boolean | Dialog anzeigen (True = OK) |
LoadState(Version) | – | Gespeicherten Zustand laden |
SaveState | – | Aktuellen Zustand speichern |
ExpandAll | – | Alle Kategorien aufklappen |
CollapseAll | – | Alle Kategorien zuklappen |
Clear | – | Alle Felder entfernen |
Sample | – | Demo-Daten einfügen |
AddHandler(Handler) | – | Event-Handler registrieren |
AddButton(Name, Title) | Object | Benutzerdefinierten Button hinzufügen |
Buttons(Index) | Object | Button nach Index abrufen |
ButtonCount | Integer | Anzahl benutzerdefinierter Buttons |
NativeFieldType(Typ) | String | Nativen Datentyp eines Feldtyps ermitteln |
StrToFilename(Text) | String | Text in gültigen Dateinamen umwandeln |
Feldtypen #
Der zweite Parameter von AddField bestimmt den Typ des Eingabefeldes.
Standard-Typen #
| Typ | Wert in VBS | Editor | Beschreibung |
|---|---|---|---|
"String" | String | Texteingabe | Einzeiliger Text |
"Memo" | String | Mehrzeilig | Mehrzeiliger Text (Blob-Editor) |
"Integer" | Integer | Zahleneingabe | Ganzzahl |
"Float" | Double | Dezimaleingabe | Dezimalzahl (2 Nachkommastellen) |
"Currency" | Currency | Währung | Währungsbetrag |
"Calc" | Double | Taschenrechner | Zahl mit Rechner-Popup |
"Boolean" | Boolean | Checkbox | Wahr/Falsch |
"DateTime" | Date | Kalender + Uhr | Datum und Uhrzeit |
"Date" | Date | Kalender | Nur Datum (mit Kalenderwochen) |
"Time" | Date | Zeiteingabe | Nur Uhrzeit |
"Combo" | String | Dropdown | Auswahlliste (siehe AddFieldItem) |
"Radio" | Integer | Radiogruppe | Optionsschalter (0-basiert) |
"Spin" | Integer | Drehfeld | Zahl mit Hoch/Runter-Buttons |
"Track" | Integer | Schieberegler | Slider (Standard: 0-100) |
"Color" | Integer | Farbauswahl | Farbwähler mit Palette |
"Font" | String | Schriftauswahl | Dropdown mit Schriftarten |
"Shell" | String | Ordnerauswahl | Datei-/Ordner-Browser |
"Image" | Variant | Bildfeld | Bild-Anzeige und -Auswahl |
Typ-Modifikatoren (Prefix) #
Feldtypen können mit Präfixen kombiniert werden:
| Präfix | Syntax | Beschreibung |
|---|---|---|
+ | "+String" | Feld wird Unterelement der letzten Kategorie |
Gruppe. | "Addr.String" | Felder mit gleicher Gruppe erscheinen in einer Zeile |
| Kombination | "+Addr.String" | Beides kombiniert |
Feldname mit Anzeigename #
Der Feldname kann über @ in Anzeigename und internen Schlüssel getrennt werden:
.AddField "Anzeigename@InternerKey", "String", "", ""
Ohne @ wird der Feldname sowohl als Anzeige als auch als Schlüssel verwendet.
Methoden im Detail #
AddCategory #
AddCategory(Caption: String)
Fügt eine Kategorie-Überschrift ein. Alle folgenden Felder mit +-Präfix im Typ werden dieser Kategorie untergeordnet.
.AddCategory "Adresse"
.AddField "Strasse", "+String", "", ""
.AddField "PLZ", "+String", "", ""
.AddField "Ort", "+String", "", ""
AddField #
AddField(Name: String, Typ: String, Default: Variant, Hint: String)
| Parameter | Beschreibung |
|---|---|
Name | Feldname (oder "Anzeige@Schlüssel") |
Typ | Feldtyp (siehe Tabelle oben), optional mit Präfix |
Default | Vorgabewert (Null für leer) |
Hint | Tooltip-Text (leerer String für keinen Tooltip) |
AddFieldItem #
AddFieldItem(Name: String, Item: String)
Fügt einen Eintrag zu einem Combo-, Radio- oder Color-Feld hinzu. Muss nach AddField aufgerufen werden.
.AddField "Land@Country", "Combo", "DE", ""
.AddFieldItem "Country", "DE"
.AddFieldItem "Country", "AT"
.AddFieldItem "Country", "CH"
SetOption #
SetOption(Name: String, Option: String, Wert: Variant)
Setzt eine Feldoption. Verfügbare Optionen:
| Option | Gilt für | Wert | Beschreibung |
|---|---|---|---|
"FIXED" | Combo | – | Dropdown nicht editierbar |
"EDIT" | Combo | – | Dropdown editierbar (Freitext möglich) |
"READONLY" | Alle | 1/0 | Schreibschutz |
"HEIGHT" | Alle | Integer | Zeilenhöhe (Vielfaches von 17px) |
"HIDEFIELDNAME" | Alle | 1/0 | Feldbezeichnung ausblenden |
"DECIMALS" | Float, Calc | Integer | Nachkommastellen: 0 = keine, 1-6 = fest, >6 = Fließkomma |
"SEPARATOR" | Float, Calc, Integer | 1/0 | Tausendertrennzeichen (Standard: 1 = aktiv) |
"COLORSET" | Color | String | Farbpalette ("DELPHI", "HTML", "X11") |
"INLINE" | Image | – | Bild in Originalgröße anzeigen |
"ICON" | Image | – | Bild als Symbol anzeigen |
"EXPAND" | Kategorie | – | Kategorie aufklappen |
"COLLAPSE" | Kategorie | – | Kategorie zuklappen |
Values #
Values(Name: String): Variant
Liest den Wert eines Feldes nach Ausführung des Dialogs. Der Name muss dem internen Schlüssel entsprechen (bei @-Syntax der Teil nach dem @).
Execute #
Execute: Boolean
Zeigt den Dialog modal an. Gibt True zurück, wenn der Benutzer “Übernehmen” klickt, False bei “Verwerfen” oder Schließen.
Tastenkürzel: Strg+Enter = Übernehmen, Esc = Verwerfen.
LoadState / SaveState #
LoadState(StateVersion: Integer)
SaveState
LoadState lädt einen gespeicherten Dialogzustand (Spaltenbreiten, auf-/zugeklappte Kategorien). Der Parameter StateVersion stellt sicher, dass bei Änderungen am Feldlayout ein veralteter Zustand nicht geladen wird. Wenn LoadState aufgerufen wurde, wird der Zustand beim Schließen automatisch gespeichert.
Konstanten #
GridLines #
| Wert | RAP-Konstante | Beschreibung |
|---|---|---|
| 0 | vglNone | Keine Gitterlinien |
| 1 | vglHorizontal | Nur horizontal |
| 2 | vglVertical | Nur vertikal |
| 3 | vglBoth | Horizontal und vertikal |
In VBScript/JavaScript als Integer verwenden. In RAP-Scripten stehen die Konstanten auch über consts.eulGridLinesBoth etc. zur Verfügung.
Event-Handler #
Der Dialog unterstützt Event-Handler über AddHandler. Das Handler-Objekt kann folgende Ereignisse implementieren:
| Ereignis | Auslöser | Beschreibung |
|---|---|---|
Dialog_OnConnect | Nach Erstellung, vor Anzeige | Initialisierung |
Dialog_OnDisconnect | Nach Schließen | Aufräumen |
<ButtonName>_OnClick | Klick auf benutzerdefinierten Button | Button-Aktion |
Beispiele #
A. Einfacher Eingabedialog (VBScript) #
Option Explicit
Dim Dialog
Set Dialog = Client.CreateDialog("Eulanda.MultiDlg", "")
With Dialog
.Title = "Neuer Artikel"
.SubTitle = "Artikeldaten eingeben"
.IconUrl = "gearwheel"
.GridLines = 3
.AddField "Artikelnummer@ArtNr", "String", "", "Die eindeutige Artikelnummer"
.AddField "Bezeichnung@Bez", "String", "", ""
.AddField "Preis", "Float", 0, "Verkaufspreis in EUR"
.AddField "Aktiv", "Boolean", True, ""
If .Execute Then
MsgBox .Values("ArtNr") & " - " & .Values("Bez") & _
" - " & CStr(.Values("Preis")) & " EUR"
End If
End With
Set Dialog = Nothing
B. Kategorien und Combos (VBScript) #
Option Explicit
Dim Dialog, StateVersion
Randomize
StateVersion = CInt(Rnd * 1000)
Set Dialog = Client.CreateDialog("Eulanda.MultiDlg", "Bestellung")
With Dialog
.Title = "Bestellung"
.SubTitle = "Versandoptionen konfigurieren"
.IconUrl = "folder"
.GridLines = 3
.LoadState StateVersion
.AddCategory "Versand"
.AddField "Versandart@Versand", "+Combo", "Standard", ""
.AddFieldItem "Versand", "Standard"
.AddFieldItem "Versand", "Express"
.AddFieldItem "Versand", "Abholung"
.SetOption "Versand", "FIXED", 0
.AddField "Lieferdatum@Datum", "+Date", Now, ""
.AddField "Anmerkung@Notiz", "+Memo", "", "Optionaler Hinweis"
.SetOption "Notiz", "HEIGHT", 3
.AddCategory "Zahlung"
.AddField "Zahlart@Zahl", "+Radio", 0, ""
.AddFieldItem "Zahl", "Rechnung"
.AddFieldItem "Zahl", "Vorkasse"
.AddFieldItem "Zahl", "Nachnahme"
.AddField "Rabatt@Rabatt", "+Track", 0, "Rabatt in Prozent"
If .Execute Then
MsgBox "Versand: " & .Values("Versand") & vbCrLf & _
"Datum: " & CStr(.Values("Datum")) & vbCrLf & _
"Zahlart: " & CStr(.Values("Zahl")) & vbCrLf & _
"Rabatt: " & CStr(.Values("Rabatt")) & "%"
End If
End With
Set Dialog = Nothing
C. Dialog mit Drucken und Export (VBScript) #
Option Explicit
Dim Dialog
Set Dialog = Client.CreateDialog("Eulanda.MultiDlg", "Report")
With Dialog
.Title = "Lagerbestand"
.Caption = "Lagerbestand"
.GridLines = 3
.PrintVisible = True
.ExportVisible = True
.ReportTitle = "Lagerbestand - Übersicht"
.ExportFileName = "Lagerbestand.xls"
.DateVisible = True
.PageNoVisible = True
.AddField "Artikel", "String", "Widget A", ""
.AddField "Bestand", "Integer", 150, ""
.AddField "Mindestbestand", "Integer", 50, ""
.Execute
End With
Set Dialog = Nothing
D. Einfacher Dialog (JavaScript) #
var Dialog = Client.CreateDialog("Eulanda.MultiDlg", "");
Dialog.Title = "Einstellungen";
Dialog.SubTitle = "Konfiguration anpassen";
Dialog.GridLines = 3;
Dialog.AddField("Name", "String", "", "");
Dialog.AddField("Alter", "Integer", 30, "");
Dialog.AddField("Farbe", "Color", 0, "Lieblingsfarbe");
Dialog.SetOption("Farbe", "COLORSET", "HTML");
if (Dialog.Execute()) {
Client.MsgBox("Name: " + Dialog.Values("Name") +
"\nAlter: " + Dialog.Values("Alter"));
}
Dialog = null;
E. Felder in einer Zeile gruppieren (VBScript) #
Option Explicit
Dim Dialog
Set Dialog = Client.CreateDialog("Eulanda.MultiDlg", "")
With Dialog
.Title = "Adresse"
.GridLines = 3
.AddField "Vorname", "Name.String", "", ""
.AddField "Nachname", "Name.String", "", ""
.AddField "PLZ", "Ort.String", "", ""
.AddField "Stadt", "Ort.String", "", ""
.Execute
End With
Set Dialog = Nothing
Felder mit demselben Gruppennamen (hier Name und Ort) werden in einer Zeile nebeneinander dargestellt.
F. Externer Zugriff über COM (VBScript ohne EULANDA-Host) #
Wenn ein VBScript außerhalb der EULANDA-Anwendung läuft, kann der MultiDlg über die COM-Schnittstelle instanziert werden:
Option Explicit
Dim App, Lib, Client
' EULANDA-Application instanzieren
Set App = CreateObject("Eulanda.Application")
App.UDL = "C:\Users\Public\EULANDA_1 PluginsLokal.udl"
App.Open
Set Lib = App.ellib
Set Client = App.Client
' Dialog wie gewohnt verwenden
Dim Dialog
Set Dialog = Client.CreateDialog("Eulanda.MultiDlg", "")
With Dialog
.Title = "Externer Zugriff"
.SubTitle = "Dialog wird von externem VBScript aufgerufen"
.GridLines = 3
.AddField "Bemerkung", "String", "", ""
.AddField "Datum", "Date", Now, ""
If .Execute Then
MsgBox "Eingabe: " & .Values("Bemerkung")
End If
End With
Set Dialog = Nothing
' Aufräumen
App.Close
Set Client = Nothing
Set Lib = Nothing
Set App = Nothing
Hinweis: Für den externen Zugriff muss EULANDA® auf dem System installiert und eine gültige UDL-Datei vorhanden sein. Die Eulanda.Application-Klasse stellt Client, ellib und weitere Objekte bereit.
G. Event-Handler mit benutzerdefiniertem Button (VBScript) #
Option Explicit
' Handler-Klasse definieren
Class MyHandler
Public objDialog
Sub Dialog_OnConnect()
' Wird beim Verbinden aufgerufen
End Sub
Sub Berechnen_OnClick()
' Wird beim Klick auf den Button "Berechnen" aufgerufen
Dim Preis, Menge
Preis = objDialog.Values("Preis")
Menge = objDialog.Values("Menge")
objDialog.SetValue "Gesamt", Preis * Menge
End Sub
End Class
Dim Dialog, Handler
Set Handler = New MyHandler
Set Dialog = Client.CreateDialog("Eulanda.MultiDlg", "")
With Dialog
.Title = "Kalkulation"
.GridLines = 3
.AddField "Preis", "Float", 10.0, ""
.AddField "Menge", "Integer", 1, ""
.AddField "Gesamt", "Float", 0, ""
.SetOption "Gesamt", "READONLY", 1
.AddButton "Berechnen", "Berechnen"
.AddHandler Handler
.Execute
End With
Set Dialog = Nothing
Set Handler = Nothing
NativeFieldType #
NativeFieldType(Typ: String): String
Gibt den nativen Datentyp zurück, der einem Feldtyp zugrunde liegt. Beispiele: "Combo" liefert "String", "Time" liefert "DateTime", "Color" liefert "Integer".
StrToFilename #
StrToFilename(Text: String): String
Wandelt einen beliebigen String in einen gültigen Dateinamen um. Es dürfen keine Laufwerke, Pfadangaben oder Extensions enthalten sein – nur der reine Dateiname.
Integration in EULANDA #
Wenn ein MultiDlg-Script fertig entwickelt ist, kann es in der SQL-Registry unter ROOT\OBJECTS\Dataobjects\<Abschnitt>\Actions abgelegt werden. Dort lässt sich zusätzlich ein Menütitel, ein Icon sowie ein Tastenkürzel (Shortcut) eintragen. So wird der Dialog in die Werkzeugleiste, Menüs, Infosysteme oder Kurzinfosysteme integriert.
Über das Dataset-Objekt lässt sich der Dialog mit dem aktuellen Bildschirm-Datensatz synchronisieren. Werte die über den MultiDlg direkt in den SQL-Server geschrieben werden, lassen sich über Dataset.RefreshCurrent nach dem Schließen des Dialogs in der Hauptmaske sichtbar machen.
Farbreferenz #
Der Feldtyp Color kann über SetOption "FeldName", "COLORSET", "..." mit verschiedenen Farbpaletten geladen werden. Zusätzlich können über AddFieldItem benutzerdefinierte Farben als "FarbName;Anzeigename" hinzugefügt werden.
Verfügbare ColorSets #
| ColorSet | Beschreibung |
|---|---|
"DELPHI" | Standard-Farben (16 Grundfarben) |
"USER" | Benutzerdefinierte Farben (via AddFieldItem) |
"HTML" | Netscape/HTML-Farben (140+ benannte Farben) |
"X11" | X11-Farben (alphabetisch) |
"X11SORT" | X11-Farben (nach Farbton sortiert) |
Standard-Farben (DELPHI) #
Black, Maroon, Green, Olive, Navy, Purple, Teal, Gray, Silver, Red, Lime, Yellow, Blue, Fuchsia, Aqua, White, MoneyGreen, SkyBlue, Cream, MedGray.
Absolute Farben #
Farben können auch als Hexadezimalwert angegeben werden: #RRGGBB. Beispiele: #FFFFFF = Weiß, #000000 = Schwarz, #FF0000 = Rot.
.AddField "Farbe", "Color", 0, ""
.SetOption "Farbe", "ColorSet", "User"
.AddFieldItem "Farbe", "#FF6600;Mein Orange"
.AddFieldItem "Farbe", "Red;Standardrot"
Dialogaufbau #
+------------------------------------------------------------------+
| Kopfbereich (Title + SubTitle + Icon) |
+------------------------------------------------------------------+
| Vertikales Property-Grid |
| Feldname | Eingabefeld |
| Kategorie --------|------------------------------------------- |
| +Unterfeld | Eingabefeld |
+------------------------------------------------------------------+
| Hilfebereich (optional, wenn Help gesetzt) |
+------------------------------------------------------------------+
| [Drucken] [Export] [Löschen] [Übernehmen] [Verwerfen]|
+------------------------------------------------------------------+
Siehe auch #
- Client.CreateDialog - Dialoge erstellen
- MultiSelect-Dialog - Mehrfachauswahl-Dialog
- Mail-Objekt - E-Mail-Versand